From 4340d77b0649e25c1af0b581da01bf1c11dabe46 Mon Sep 17 00:00:00 2001 From: xyy Date: Sat, 18 Nov 2023 00:00:35 +0800 Subject: [PATCH 01/41] basic rbac completed, haven't been tested yet. --- sql/README.md | 316 ++++++++++-------- sql/ssadmin_init.sql | 159 +++++++-- ssadmin-server/pom.xml | 5 + ssadmin-server/ssadmin-common/pom.xml | 9 + .../common/exception/ErrorCodeConstants.java | 5 + .../ssadmin/common/utils/CollectionUtils.java | 281 ++++++++++++++++ .../edu/ssadmin/common/utils/JsonUtils.java | 153 +++++++++ .../edu/ssadmin/common/utils/ObjectUtils.java | 63 ++++ .../ssadmin/common/utils/ServletUtils.java | 111 ++++++ .../edu/ssadmin/common/validation/Mobile.java | 28 ++ .../common/validation/MobileValidator.java | 25 ++ .../ssadmin-module-security/pom.xml | 9 + .../security/config/SecurityProperties.java | 41 +++ .../SsadminSecurityAutoConfiguration.java | 83 +++++ .../filter/TokenAuthenticationFilter.java | 86 +++++ .../service/SecurityFrameworkService.java | 44 +++ .../service/SecurityFrameworkServiceImpl.java | 43 +++ .../security/util/SecurityFrameworkUtils.java | 96 ++++++ ssadmin-server/ssadmin-system/pom.xml | 62 ++-- .../admin/permission/MenuController.java | 4 - .../permission/PermissionController.java | 4 - .../admin/permission/RoleController.java | 4 - .../controller/admin/user/UserController.java | 4 - .../admin/user/UserProfileController.java | 35 -- .../server/convert/auth/AuthConvert.java | 23 -- .../server/service/user/AdminUserService.java | 11 - .../service/user/AdminUserServiceImpl.java | 25 -- .../ssadmin-system/ssadmin-system-api/pom.xml | 29 ++ .../server/api/permission/PermissionApi.java | 58 ++++ .../server/enums/permission/MenuTypeEnum.java | 26 ++ .../server/enums/permission/RoleCodeEnum.java | 31 ++ .../src/main/resources/application-dev.yml | 0 .../src/main/resources/application-local.yml | 0 .../src/main/resources/application-prod.yml | 0 .../src/main/resources/application.yml | 0 .../resources/mappers/AdminUserMapper.xml | 49 ++- .../ssadmin-system/ssadmin-system-biz/pom.xml | 61 ++++ .../edu/ssadmin/server/ServerApplication.java | 0 .../api/permission/PermissionApiImpl.java | 41 +++ .../edu/ssadmin/server/controller/Demo.java | 0 .../admin/auth/AdminAuthController.java | 54 +++ .../auth/vo/AuthPermissionInfoRespVO.java | 62 ++++ .../controller/admin/auth/vo/LoginReqVO.java | 0 .../controller/admin/auth/vo/LoginRespVO.java | 0 .../admin/captcha/CaptchaController.java | 0 .../controller/admin/dept/DeptController.java | 0 .../server/controller/admin/package-info.java | 0 .../admin/permission/MenuController.java | 82 +++++ .../permission/PermissionController.java | 56 ++++ .../admin/permission/RoleController.java | 83 +++++ .../admin/permission/vo/menu/MenuBaseVO.java | 44 +++ .../permission/vo/menu/MenuCreateReqVO.java | 9 + .../permission/vo/menu/MenuListReqVO.java | 12 + .../admin/permission/vo/menu/MenuRespVO.java | 22 ++ .../permission/vo/menu/MenuSimpleRespVO.java | 19 ++ .../permission/vo/menu/MenuUpdateReqVO.java | 15 + .../PermissionAssignRoleMenuReqVO.java | 17 + .../PermissionAssignUserRoleReqVO.java | 17 + .../admin/permission/vo/role/RoleBaseVO.java | 29 ++ .../permission/vo/role/RoleCreateReqVO.java | 10 + .../admin/permission/vo/role/RoleRespVO.java | 23 ++ .../permission/vo/role/RoleSimpleRespVO.java | 16 + .../permission/vo/role/RoleUpdateReqVO.java | 15 + .../vo/role/RoleUpdateStatusReqVO.java | 18 + .../controller/admin/user/UserController.java | 78 +++++ .../admin/user/UserProfileController.java | 75 +++++ .../user/vo/profile/UserProfileRespVO.java | 17 + .../UserProfileUpdatePasswordReqVO.java | 19 ++ .../vo/profile/UserProfileUpdateReqVO.java | 19 ++ .../admin/user/vo/user/UserBaseVO.java | 17 +- .../admin/user/vo/user/UserCreateReqVO.java | 17 + .../admin/user/vo/user/UserRespVO.java | 28 ++ .../admin/user/vo/user/UserSimpleRespVO.java | 17 + .../user/vo/user/UserUpdatePasswordReqVO.java | 19 ++ .../admin/user/vo/user/UserUpdateReqVO.java | 15 + .../server/convert/auth/AuthConvert.java | 96 ++++++ .../convert/permission/MenuConvert.java | 28 ++ .../convert/permission/RoleConvert.java | 28 ++ .../server/convert/user/UserConvert.java | 32 ++ .../server/dataobject/base/BaseDO.java | 1 + .../server/dataobject/base/TenantBaseDO.java | 0 .../server/dataobject/permission/MenuDO.java | 77 +++++ .../server/dataobject/permission/RoleDO.java | 48 +++ .../dataobject/permission/RoleMenuDO.java | 24 ++ .../dataobject/permission/UserRoleDO.java | 24 ++ .../server/dataobject/user/AdminUserDO.java | 32 +- .../server/mapper/permission/MenuMapper.java | 33 ++ .../server/mapper/permission/RoleMapper.java | 27 ++ .../mapper/permission/RoleMenuMapper.java | 26 ++ .../mapper/permission/UserRoleMapper.java | 23 ++ .../server/mapper/user/AdminUserMapper.java | 12 + .../server/service/auth/AdminAuthService.java | 0 .../service/auth/AdminAuthServiceImpl.java | 0 .../service/permission/MenuService.java | 73 ++++ .../service/permission/MenuServiceImpl.java | 180 ++++++++++ .../service/permission/PermissionService.java | 125 +++++++ .../permission/PermissionServiceImpl.java | 242 ++++++++++++++ .../service/permission/RoleService.java | 89 +++++ .../service/permission/RoleServiceImpl.java | 174 ++++++++++ .../server/service/user/AdminUserService.java | 112 +++++++ .../service/user/AdminUserServiceImpl.java | 241 +++++++++++++ .../ssadmin/server/utils/AdminLoginInfo.java | 0 .../src/main/resources/application-dev.yml | 39 +++ .../src/main/resources/application-local.yml | 18 + .../src/main/resources/application-prod.yml | 15 + .../src/main/resources/application.yml | 47 +++ .../resources/mappers/AdminUserMapper.xml | 76 +++++ .../src/main/resources/mappers/MenuMapper.xml | 90 +++++ .../src/main/resources/mappers/RoleMapper.xml | 66 ++++ .../main/resources/mappers/RoleMenuMapper.xml | 66 ++++ .../main/resources/mappers/UserRoleMapper.xml | 60 ++++ .../server/ServerApplicationTests.java | 0 112 files changed, 4840 insertions(+), 332 deletions(-) create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java create mode 100644 ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java delete mode 100644 ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-api}/src/main/resources/application-dev.yml (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-api}/src/main/resources/application-local.yml (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-api}/src/main/resources/application-prod.yml (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-api}/src/main/resources/application.yml (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-api}/src/main/resources/mappers/AdminUserMapper.xml (33%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/ServerApplication.java (100%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/Demo.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java (37%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/package-info.java (100%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java (66%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java (58%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java (99%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java (100%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java (55%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java (36%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java (100%) rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java (100%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java (100%) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml rename ssadmin-server/ssadmin-system/{ => ssadmin-system-biz}/src/test/java/edu/ssadmin/server/ServerApplicationTests.java (100%) diff --git a/sql/README.md b/sql/README.md index 1e9e923..7c0eb64 100644 --- a/sql/README.md +++ b/sql/README.md @@ -2,41 +2,46 @@ ## **核心表结构及说明** -### **用户表** - `system_user` +### **用户表** - `system_users` 存储用户的基本信息,包括用户名、密码、联系方式等,还有用户的状态,创建和更新信息。每个用户都有一个唯一的ID。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-----------------|------------|------|----------|--------|------------| -| id | bigint | 20 | N | | 用户编码 | -| username | varchar | 64 | N | | 用户名 | -| password | varchar | 64 | N | | 密码 | -| real_name | varchar | 64 | Y | | 真实姓名 | -| avatar | varchar | 256 | Y | | 头像 | -| email | varchar | 128 | Y | | 邮箱 | -| mobile | varchar | 20 | Y | | 手机号 | -| status | tinyint | 4 | N | 0 | 状态 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | -| last_login_time | datetime | | Y | | 最后登录时间 | -| creator | varchar | 64 | Y | | 创建者 | -| updater | varchar | 64 | Y | | 更新者 | -| deleted | bit | 1 | N | b'0' | 是否删除 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|------------|----------|------|----------|--------|--------| +| id | bigint | 20 | N | | 用户编码 | +| username | varchar | 64 | N | | 用户名 | +| password | varchar | 64 | N | | 密码 | +| realname | varchar | 64 | Y | | 真实姓名 | +| avatar | varchar | 256 | Y | | 头像 | +| email | varchar | 128 | Y | | 邮箱 | +| mobile | varchar | 20 | Y | | 手机号 | +| status | tinyint | 4 | N | 0 | 状态 | +| remark | varchar | 500 | Y | | 备注 | +| login_ip | varchar | | Y | | 最后登录IP | +| login_date | datetime | | Y | | 最后登录时间 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar | 64 | Y | | 创建者 | +| updater | varchar | 64 | Y | | 更新者 | +| deleted | bit | 1 | N | b'0' | 是否删除 | ### **角色表** - `system_role` 定义系统中的角色,角色可以被分配不同的权限。角色也包括创建者和更新时间等信息。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-----------------|------------|------|----------|--------|------------| -| id | bigint | 20 | N | | 角色编码 | -| name | varchar | 100 | N | | 角色名称 | -| remark | varchar | 500 | Y | | 备注 | -| creator | varchar | 64 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| updater | varchar | 64 | Y | | 更新者 | -| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | -| deleted | bit | 1 | N | b'0' | 是否删除 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|----------|-----|----------|--------|------| +| id | bigint | 20 | N | | 角色编码 | +| name | varchar | 100 | N | | 角色名称 | +| code | varchar | 100 | N | | 角色标识 | +| sort | int | 10 | N | | 显示顺序 | +| status | tinyint | 4 | N | 0 | 状态 | +| remark | varchar | 500 | Y | | 备注 | +| creator | varchar | 64 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | varchar | 64 | Y | | 更新者 | +| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | ### **用户角色关联表** - `system_user_role` @@ -57,36 +62,74 @@ 在`system_menu`表中,`type`字段用于区分是菜单项还是按钮/权限标识。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-------------|----------|------|----------|---------------------|--------------| -| id | bigint | 20 | N | | 菜单ID | -| parent_id | bigint | 20 | N | 0 | 父菜单ID | -| name | varchar | 50 | N | | 菜单名称 | -| path | varchar | 200 | Y | | 菜单路径 | -| component | varchar | 255 | Y | | 前端组件地址 | -| perms | varchar | 100 | Y | | 权限标识 | -| type | int | | N | | 菜单类型 | -| icon | varchar | 50 | Y | | 菜单图标 | -| order_num | int | | N | | 菜单排序 | -| status | tinyint | 1 | N | 0 | 菜单状态 | -| create_by | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_by | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | -| remark | varchar | 500 | Y | | 备注 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|----------|-----|----------|---------------------|--------------| +| id | bigint | 20 | N | | 菜单ID | +| parent_id | bigint | 20 | N | 0 | 父菜单ID | +| name | varchar | 50 | N | | 菜单名称 | +| path | varchar | 200 | Y | | 菜单路径 | +| component | varchar | 255 | Y | | 前端组件地址 | +| permission | varchar | 100 | Y | | 权限标识 | +| type | int | | N | | 菜单类型 | +| sort | int | 10 | N | | 显示顺序 | +| status | tinyint | 1 | N | 0 | 菜单状态 | +| remark | varchar | 500 | Y | | 备注 | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | Y | b'0' | 是否删除 | + ### **角色权限表** - `system_role_menu` 将`system_menu`表中定义的菜单或权限项与角色关联起来。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-------------|----------|------|----------|---------------------|------------| -| role_id | bigint | 20 | N | | 角色ID | -| menu_id | bigint | 20 | N | | 菜单ID | -| create_by | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_by | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|----------|------|----------|---------------------|------| +| id | bigint | 20 | N | | 自增编码 | +| role_id | bigint | 20 | N | | 角色ID | +| menu_id | bigint | 20 | N | | 菜单ID | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | + +### **字典类型表** - `system_dict_type` + +此表用于定义不同的字典类型,每种类型可以包含多个字典数据项。 + +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|-----------|------|----------|---------------------|--------------| +| id | bigint | 20 | N | | 类型主键ID | +| name | varchar | 100 | N | | 类型名称 | +| type | varchar | 100 | N | | 类型代码 | +| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | +| remark | varchar | 255 | Y | | 备注 | + +### **字典数据表** - `system_dict_data` + +此表用于存储每个类型下的字典数据项。 + +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|-----------|------|----------|---------------------|--------------| +| id | bigint | 20 | N | | 数据主键ID | +| type_id | bigint | 20 | N | | 字典类型ID | +| label | varchar | 100 | N | | 数据标签 | +| value | varchar | 100 | N | | 数据值 | +| order_num | int | | N | | 排序号 | +| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | ### **操作日志表** - `system_operation_log` @@ -107,39 +150,6 @@ | create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | | remark | varchar | 500 | Y | | 备注 | -### **字典类型表** - `system_dict_type` - -此表用于定义不同的字典类型,每种类型可以包含多个字典数据项。 - -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|--------------|-----------|------|----------|---------------------|--------------| -| id | bigint | 20 | N | | 类型主键ID | -| name | varchar | 100 | N | | 类型名称 | -| type | varchar | 100 | N | | 类型代码 | -| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | -| create_by | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_by | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | -| remark | varchar | 255 | Y | | 备注 | - -### **字典数据表** - `system_dict_data` - -此表用于存储每个类型下的字典数据项。 - -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|--------------|-----------|------|----------|---------------------|--------------| -| id | bigint | 20 | N | | 数据主键ID | -| type_id | bigint | 20 | N | | 字典类型ID | -| label | varchar | 100 | N | | 数据标签 | -| value | varchar | 100 | N | | 数据值 | -| order_num | int | | N | | 排序号 | -| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | -| create_by | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_by | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | - ### **登录日志表** - `system_login_log` 此表用于记录用户登录系统的活动,包括成功和失败的尝试。 @@ -173,83 +183,95 @@ ## **附录:建表语句** ```sql + -- 用户表 system_user -CREATE TABLE `system_user` ( - `id` BIGINT(20) NOT NULL, - `username` VARCHAR(64) NOT NULL, - `password` VARCHAR(64) NOT NULL, - `real_name` VARCHAR(64) DEFAULT NULL, - `avatar` VARCHAR(256) DEFAULT NULL, - `email` VARCHAR(128) DEFAULT NULL, - `mobile` VARCHAR(20) DEFAULT NULL, - `status` TINYINT(4) NOT NULL DEFAULT '0', - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `last_login_time` DATETIME DEFAULT NULL, - `creator` VARCHAR(64) DEFAULT NULL, - `updater` VARCHAR(64) DEFAULT NULL, - `deleted` BIT(1) NOT NULL DEFAULT b'0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `system_users` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `username` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `realname` varchar(255) DEFAULT NULL, + `avatar` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `mobile` varchar(255) DEFAULT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` varchar(255) DEFAULT NULL, + `login_ip` varchar(255) DEFAULT NULL, + `login_date` datetime DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- 角色表 system_role + CREATE TABLE `system_role` ( - `id` BIGINT(20) NOT NULL, - `name` VARCHAR(100) NOT NULL, - `remark` VARCHAR(500) DEFAULT NULL, - `creator` VARCHAR(64) DEFAULT NULL, - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` VARCHAR(64) DEFAULT NULL, - `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` BIT(1) NOT NULL DEFAULT b'0', - PRIMARY KEY (`id`) + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `name` VARCHAR(100) NOT NULL, + `code` VARCHAR(100) NOT NULL, + `sort` int(10) NOT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 用户角色关联表 system_user_role CREATE TABLE `system_user_role` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, - `user_id` BIGINT(20) NOT NULL, - `role_id` BIGINT(20) NOT NULL, - `creator` VARCHAR(64) DEFAULT NULL, - `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, - `updater` VARCHAR(64) DEFAULT NULL, - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` BIT(1) DEFAULT b'0', - PRIMARY KEY (`id`), - KEY `idx_user_id` (`user_id`), - KEY `idx_role_id` (`role_id`) + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `user_id` BIGINT(20) NOT NULL, + `role_id` BIGINT(20) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_role_id` (`role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 菜单权限表 system_menu CREATE TABLE `system_menu` ( - `id` BIGINT(20) NOT NULL, - `parent_id` BIGINT(20) NOT NULL DEFAULT '0', - `name` VARCHAR(50) NOT NULL, - `path` VARCHAR(200) DEFAULT NULL, - `component` VARCHAR(255) DEFAULT NULL, - `perms` VARCHAR(100) DEFAULT NULL, - `type` INT NOT NULL, - `icon` VARCHAR(50) DEFAULT NULL, - `order_num` INT NOT NULL, - `status` TINYINT(1) NOT NULL DEFAULT '0', - `create_by` BIGINT(20) DEFAULT NULL, - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_by` BIGINT(20) DEFAULT NULL, - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `remark` VARCHAR(500) DEFAULT NULL, - PRIMARY KEY (`id`) + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `parent_id` BIGINT(20) NOT NULL DEFAULT '0', + `name` VARCHAR(50) NOT NULL, + `path` VARCHAR(200) DEFAULT NULL, + `component` VARCHAR(255) DEFAULT NULL, + `permission` VARCHAR(100) DEFAULT NULL, + `type` INT NOT NULL, + `sort` int(10) NOT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; --- 角色权限表 system_role_menu +-- 角色权限关联表 system_role_menu CREATE TABLE `system_role_menu` ( - `role_id` BIGINT(20) NOT NULL, - `menu_id` BIGINT(20) NOT NULL, - `create_by` BIGINT(20) DEFAULT NULL, - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_by` BIGINT(20) DEFAULT NULL, - `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`role_id`,`menu_id`), - KEY `idx_menu_id` (`menu_id`) + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `role_id` BIGINT(20) NOT NULL , + `menu_id` BIGINT(20) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`role_id`,`menu_id`), + KEY `idx_role_id` (`role_id`), + KEY `idx_menu_id` (`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 操作日志表 system_operation_log diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index 4f8d876..f9ee15d 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -27,55 +27,166 @@ USE `ssadmin`; -- -------------------------------------------------------- -- --- 表的结构 `system_users` +-- 用户表的结构 `system_users` -- CREATE TABLE `system_users` ( - `id` bigint NOT NULL, + `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, - `nickname` varchar(255) DEFAULT NULL, - `status` int NOT NULL DEFAULT '0', + `realname` varchar(255) DEFAULT NULL, + `avatar` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `mobile` varchar(255) DEFAULT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` varchar(255) DEFAULT NULL, `login_ip` varchar(255) DEFAULT NULL, `login_date` datetime DEFAULT NULL, - `tenant_id` int DEFAULT '1', - `create_time` datetime DEFAULT CURRENT_TIMESTAMP, - `update_time` datetime DEFAULT CURRENT_TIMESTAMP, - `creator` varchar(255) DEFAULT NULL, - `updater` varchar(255) DEFAULT NULL, - `deleted` tinyint(1) DEFAULT '0' + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- --- 转存表中的数据 `system_users` +-- 转存用户表的初始数据 `system_users` -- -INSERT INTO `system_users` (`id`, `username`, `password`, `nickname`, `status`, `login_ip`, `login_date`, `tenant_id`, `create_time`, `update_time`, `creator`, `updater`, `deleted`) VALUES -(1, 'sysadmin', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'admin', 0, NULL, '2023-10-28 10:57:02', 1, '2023-10-28 10:57:30', '2023-10-28 10:57:30', NULL, NULL, 0), -(2, 'user', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'admin', 0, NULL, '2023-10-28 10:57:02', 1, '2023-10-28 10:57:30', '2023-10-28 10:57:30', NULL, NULL, 0); +INSERT INTO `system_users` (`username`, `password`, `realname`) VALUES +('sysadmin', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'zhang'), +('user', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'wang'); -- --- 转储表的索引 +-- 角色表的结构 `system_role` -- +CREATE TABLE `system_role` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `name` VARCHAR(100) NOT NULL, + `code` VARCHAR(100) NOT NULL, + `sort` int(10) NOT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存角色表的初始数据 `system_role` +-- + +INSERT INTO `system_role` (`name`, `code`, `sort`) VALUES + ('超级管理员', 'super_admin', '1'), + ('租户管理员', 'tenant_admin', '2'), + ('用户', 'user', '3'); + + +-- +-- 用户角色关联表的结构 `system_user_role` +-- + +CREATE TABLE `system_user_role` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `user_id` BIGINT(20) NOT NULL, + `role_id` BIGINT(20) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`), + KEY `idx_user_id` (`user_id`), + KEY `idx_role_id` (`role_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存角色表的初始数据 `system_user_role` -- --- 表的索引 `system_users` + +INSERT INTO `system_user_role` (`user_id`, `role_id`) VALUES + (1,1), + (2,3); + +-- +-- 菜单表的结构 `system_menu` -- -ALTER TABLE `system_users` - ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `username` (`username`); + +CREATE TABLE `system_menu` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `name` VARCHAR(50) NOT NULL, + `permission` VARCHAR(100) DEFAULT NULL, + `type` INT NOT NULL, + `sort` int(10) NOT NULL, + `parent_id` BIGINT(20) NOT NULL DEFAULT '0', + `path` VARCHAR(200) DEFAULT NULL, + `component` VARCHAR(255) DEFAULT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --- 在导出的表使用AUTO_INCREMENT +-- 转存角色表的初始数据 `system_menu` -- +INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`) VALUES + (1,'系统管理', '',1,1,0,'/system',null), + (2,'用户管理', 'system:user:list',2,1,1,'user','system/user/index'), + (3,'角色管理', 'system:role:list',2,2,1,'role','system/role/index'), + (4,'菜单管理', 'system:menu:list',2,3,1,'menu','system/menu/index'), + (5,'用户新增', 'system:user:create',3,1,2,'',''), + (6,'用户删除', 'system:user:delete',3,2,2,'',''), + (7,'用户修改', 'system:user:update',3,3,2,'',''), + (8,'用户查询', 'system:user:query',3,4,2,'',''), + (9,'角色新增', 'system:role:create',3,1,3,'',''), + (10,'角色删除', 'system:role:delete',3,2,3,'',''), + (11,'角色修改', 'system:role:update',3,3,3,'',''), + (12,'角色查询', 'system:role:query',3,4,3,'',''), + (13,'菜单新增', 'system:menu:create',3,1,4,'',''), + (14,'菜单删除', 'system:menu:delete',3,2,4,'',''), + (15,'菜单修改', 'system:menu:update',3,3,4,'',''), + (16,'菜单查询', 'system:menu:query',3,4,4,'',''); + (17,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'',''), + (18,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'',''); + + +-- +-- 角色菜单关联表的结构 `system_role_menu` +-- + +CREATE TABLE `system_role_menu` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `role_id` BIGINT(20) NOT NULL , + `menu_id` BIGINT(20) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`role_id`,`menu_id`), + KEY `idx_role_id` (`role_id`), + KEY `idx_menu_id` (`menu_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + -- --- 使用表AUTO_INCREMENT `system_users` +-- 转存角色表的初始数据 `system_role_menu` -- -ALTER TABLE `system_users` - MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; -COMMIT; +INSERT INTO `system_role_menu` (`role_id`,`menu_id`) VALUES + (1,1); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/ssadmin-server/pom.xml b/ssadmin-server/pom.xml index 30d8252..afe895c 100644 --- a/ssadmin-server/pom.xml +++ b/ssadmin-server/pom.xml @@ -62,6 +62,11 @@ knife4j-openapi2-spring-boot-starter 4.3.0 + + com.google.guava + guava + 30.1-jre + diff --git a/ssadmin-server/ssadmin-common/pom.xml b/ssadmin-server/ssadmin-common/pom.xml index a0310d2..1760c18 100644 --- a/ssadmin-server/ssadmin-common/pom.xml +++ b/ssadmin-server/ssadmin-common/pom.xml @@ -19,6 +19,15 @@ + + cn.hutool + hutool-all + 5.7.6 + + + org.projectlombok + lombok + diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java index 01c0f6f..6fb2907 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java @@ -138,4 +138,9 @@ public interface ErrorCodeConstants { ErrorCode OAUTH2_CODE_NOT_EXISTS = new ErrorCode(1002022000, "code 不存在"); ErrorCode OAUTH2_CODE_EXPIRE = new ErrorCode(1002022000, "code 已过期"); + // ========= 文件相关 1-001-003-000 ================= + ErrorCode FILE_PATH_EXISTS = new ErrorCode(1_001_003_000, "文件路径已存在"); + ErrorCode FILE_NOT_EXISTS = new ErrorCode(1_001_003_001, "文件不存在"); + ErrorCode FILE_IS_EMPTY = new ErrorCode(1_001_003_002, "文件为空"); + } diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java new file mode 100644 index 0000000..06a63b8 --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java @@ -0,0 +1,281 @@ +package edu.ssadmin.common.utils; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; + +import java.util.*; +import java.util.function.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static java.util.Arrays.asList; + +/** + * Collection 工具类 + * + * @author 芋道源码 + */ +public class CollectionUtils { + + public static boolean containsAny(Object source, Object... targets) { + return asList(targets).contains(source); + } + + public static boolean isAnyEmpty(Collection... collections) { + return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty); + } + + public static boolean anyMatch(Collection from, Predicate predicate) { + return from.stream().anyMatch(predicate); + } + + public static List filterList(Collection from, Predicate predicate) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(predicate).collect(Collectors.toList()); + } + + public static List distinct(Collection from, Function keyMapper) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return distinct(from, keyMapper, (t1, t2) -> t1); + } + + public static List distinct(Collection from, Function keyMapper, BinaryOperator cover) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return new ArrayList<>(convertMap(from, keyMapper, Function.identity(), cover).values()); + } + + public static List convertList(T[] from, Function func) { + if (ArrayUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return convertList(Arrays.asList(from), func); + } + + public static List convertList(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List convertList(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static List mergeValuesFromMap(Map> map) { + return map.values() + .stream() + .flatMap(List::stream) + .collect(Collectors.toList()); + } + + public static Set convertSet(Collection from, Function func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Set convertSet(Collection from, Function func, Predicate filter) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + + public static Map convertMapByFilter(Collection from, Predicate filter, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().filter(filter).collect(Collectors.toMap(keyFunc, v -> v)); + } + + public static Map convertMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, Function.identity()); + } + + public static Map convertMap(Collection from, Function keyFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, Function.identity(), supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return convertMap(from, keyFunc, valueFunc, mergeFunction, HashMap::new); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return supplier.get(); + } + return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1, supplier); + } + + public static Map convertMap(Collection from, Function keyFunc, Function valueFunc, BinaryOperator mergeFunction, Supplier> supplier) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.toMap(keyFunc, valueFunc, mergeFunction, supplier)); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(t -> t, Collectors.toList()))); + } + + public static Map> convertMultiMap(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream() + .collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toList()))); + } + + // 暂时没想好名字,先以 2 结尾噶 + public static Map> convertMultiMap2(Collection from, Function keyFunc, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return new HashMap<>(); + } + return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet()))); + } + + /** + * 对比老、新两个列表,找出新增、修改、删除的数据 + * + * @param oldList 老列表 + * @param newList 新列表 + * @param sameFunc 对比函数,返回 true 表示相同,返回 false 表示不同 + * 注意,same 是通过每个元素的“标识”,判断它们是不是同一个数据 + * @return [新增列表、修改列表、删除列表] + */ + public static List> diffList(Collection oldList, Collection newList, + BiFunction sameFunc) { + List createList = new LinkedList<>(newList); // 默认都认为是新增的,后续会进行移除 + List updateList = new ArrayList<>(); + List deleteList = new ArrayList<>(); + + // 通过以 oldList 为主遍历,找出 updateList 和 deleteList + for (T oldObj : oldList) { + // 1. 寻找是否有匹配的 + T foundObj = null; + for (Iterator iterator = createList.iterator(); iterator.hasNext(); ) { + T newObj = iterator.next(); + // 1.1 不匹配,则直接跳过 + if (!sameFunc.apply(oldObj, newObj)) { + continue; + } + // 1.2 匹配,则移除,并结束寻找 + iterator.remove(); + foundObj = newObj; + break; + } + // 2. 匹配添加到 updateList;不匹配则添加到 deleteList 中 + if (foundObj != null) { + updateList.add(foundObj); + } else { + deleteList.add(oldObj); + } + } + return asList(createList, updateList, deleteList); + } + + public static boolean containsAny(Collection source, Collection candidates) { + return org.springframework.util.CollectionUtils.containsAny(source, candidates); + } + + public static T getFirst(List from) { + return !CollectionUtil.isEmpty(from) ? from.get(0) : null; + } + + public static T findFirst(List from, Predicate predicate) { + return findFirst(from, predicate, Function.identity()); + } + + public static U findFirst(List from, Predicate predicate, Function func) { + if (CollUtil.isEmpty(from)) { + return null; + } + return from.stream().filter(predicate).findFirst().map(func).orElse(null); + } + + public static > V getMaxValue(Collection from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + T t = from.stream().max(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getMinValue(List from, Function valueFunc) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + T t = from.stream().min(Comparator.comparing(valueFunc)).get(); + return valueFunc.apply(t); + } + + public static > V getSumValue(List from, Function valueFunc, + BinaryOperator accumulator) { + if (CollUtil.isEmpty(from)) { + return null; + } + assert from.size() > 0; // 断言,避免告警 + return from.stream().map(valueFunc).reduce(accumulator).get(); + } + + public static void addIfNotNull(Collection coll, T item) { + if (item == null) { + return; + } + coll.add(item); + } + + public static Collection singleton(T deptId) { + return deptId == null ? Collections.emptyList() : Collections.singleton(deptId); + } + + public static List convertListByFlatMap(Collection from, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new ArrayList<>(); + } + return from.stream().flatMap(func).filter(Objects::nonNull).collect(Collectors.toList()); + } + + public static Set convertSetByFlatMap(Collection from, + Function> func) { + if (CollUtil.isEmpty(from)) { + return new HashSet<>(); + } + return from.stream().flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet()); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java new file mode 100644 index 0000000..db58e16 --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java @@ -0,0 +1,153 @@ +package edu.ssadmin.common.utils; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * + * @author 芋道源码 + */ +@Slf4j +public class JsonUtils { + + private static ObjectMapper objectMapper = new ObjectMapper(); + + static { + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.registerModules(new JavaTimeModule()); // 解决 LocalDateTime 的序列化 + } + + /** + * 初始化 objectMapper 属性 + *

+ * 通过这样的方式,使用 Spring 创建的 ObjectMapper Bean + * + * @param objectMapper ObjectMapper 对象 + */ + public static void init(ObjectMapper objectMapper) { + JsonUtils.objectMapper = objectMapper; + } + + @SneakyThrows + public static String toJsonString(Object object) { + return objectMapper.writeValueAsString(object); + } + + @SneakyThrows + public static byte[] toJsonByte(Object object) { + return objectMapper.writeValueAsBytes(object); + } + + @SneakyThrows + public static String toJsonPrettyString(Object object) { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object); + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, Type type) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructType(type)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + /** + * 将字符串解析成指定类型的对象 + * 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下, + * 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。 + * + * @param text 字符串 + * @param clazz 类型 + * @return 对象 + */ + public static T parseObject2(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + return JSONUtil.toBean(text, clazz); + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (IOException e) { + log.error("json parse err,json:{}", bytes, e); + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(String text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + + public static JsonNode parseTree(byte[] text) { + try { + return objectMapper.readTree(text); + } catch (IOException e) { + log.error("json parse err,json:{}", text, e); + throw new RuntimeException(e); + } + } + +} diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java new file mode 100644 index 0000000..e16722d --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java @@ -0,0 +1,63 @@ +package edu.ssadmin.common.utils; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.function.Consumer; + +/** + * Object 工具类 + * + * 参考 芋道源码 + */ +public class ObjectUtils { + + /** + * 复制对象,并忽略 Id 编号 + * + * @param object 被复制对象 + * @param consumer 消费者,可以二次编辑被复制对象 + * @return 复制后的对象 + */ + public static T cloneIgnoreId(T object, Consumer consumer) { + T result = ObjectUtil.clone(object); + // 忽略 id 编号 + Field field = ReflectUtil.getField(object.getClass(), "id"); + if (field != null) { + ReflectUtil.setFieldValue(result, field, null); + } + // 二次编辑 + if (result != null) { + consumer.accept(result); + } + return result; + } + + public static > T max(T obj1, T obj2) { + if (obj1 == null) { + return obj2; + } + if (obj2 == null) { + return obj1; + } + return obj1.compareTo(obj2) > 0 ? obj1 : obj2; + } + + @SafeVarargs + public static T defaultIfNull(T... array) { + for (T item : array) { + if (item != null) { + return item; + } + } + return null; + } + + @SafeVarargs + public static boolean equalsAny(T obj, T... array) { + return Arrays.asList(array).contains(obj); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java new file mode 100644 index 0000000..baa70d7 --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java @@ -0,0 +1,111 @@ +package edu.ssadmin.common.utils; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import org.springframework.http.MediaType; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.Map; + +/** + * 客户端工具类 + * + * @author 芋道源码 + */ +public class ServletUtils { + + /** + * 返回 JSON 字符串 + * + * @param response 响应 + * @param object 对象,会序列化成 JSON 字符串 + */ + @SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否则会乱码 + public static void writeJSON(HttpServletResponse response, Object object) { + String content = JsonUtils.toJsonString(object); + ServletUtil.write(response, content, MediaType.APPLICATION_JSON_UTF8_VALUE); + } + + /** + * 返回附件 + * + * @param response 响应 + * @param filename 文件名 + * @param content 附件内容 + */ + public static void writeAttachment(HttpServletResponse response, String filename, byte[] content) throws IOException { + // 设置 header 和 contentType + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + // 输出附件 + IoUtil.write(response.getOutputStream(), false, content); + } + + /** + * @param request 请求 + * @return ua + */ + public static String getUserAgent(HttpServletRequest request) { + String ua = request.getHeader("User-Agent"); + return ua != null ? ua : ""; + } + + /** + * 获得请求 + * + * @return HttpServletRequest + */ + public static HttpServletRequest getRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (!(requestAttributes instanceof ServletRequestAttributes)) { + return null; + } + return ((ServletRequestAttributes) requestAttributes).getRequest(); + } + + public static String getUserAgent() { + HttpServletRequest request = getRequest(); + if (request == null) { + return null; + } + return getUserAgent(request); + } + + public static String getClientIP() { + HttpServletRequest request = getRequest(); + if (request == null) { + return null; + } + return ServletUtil.getClientIP(request); + } + + + public static boolean isJsonRequest(ServletRequest request) { + return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE); + } + + public static String getBody(HttpServletRequest request) { + return ServletUtil.getBody(request); + } + + public static byte[] getBodyBytes(HttpServletRequest request) { + return ServletUtil.getBodyBytes(request); + } + + public static String getClientIP(HttpServletRequest request) { + return ServletUtil.getClientIP(request); + } + + public static Map getParamMap(HttpServletRequest request) { + return ServletUtil.getParamMap(request); + } + +} diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java new file mode 100644 index 0000000..31ae98c --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java @@ -0,0 +1,28 @@ +package edu.ssadmin.common.validation; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.*; + +@Target({ + ElementType.METHOD, + ElementType.FIELD, + ElementType.ANNOTATION_TYPE, + ElementType.CONSTRUCTOR, + ElementType.PARAMETER, + ElementType.TYPE_USE +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint( + validatedBy = MobileValidator.class +) +public @interface Mobile { + + String message() default "手机号格式不正确"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java new file mode 100644 index 0000000..d1ce90f --- /dev/null +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java @@ -0,0 +1,25 @@ +package edu.ssadmin.common.validation; + +import cn.hutool.core.util.StrUtil; +import edu.ssadmin.common.utils.ValidationUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +public class MobileValidator implements ConstraintValidator { + + @Override + public void initialize(Mobile annotation) { + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + // 如果手机号为空,默认不校验,即校验通过 + if (StrUtil.isEmpty(value)) { + return true; + } + // 校验手机 + return ValidationUtils.isMobile(value); + } + +} diff --git a/ssadmin-server/ssadmin-module-security/pom.xml b/ssadmin-server/ssadmin-module-security/pom.xml index f125044..e79e121 100644 --- a/ssadmin-server/ssadmin-module-security/pom.xml +++ b/ssadmin-server/ssadmin-module-security/pom.xml @@ -23,6 +23,11 @@ ssadmin-common 1.0 + + edu.ssadmin + ssadmin-system-api + 1.0 + io.jsonwebtoken jjwt @@ -34,6 +39,10 @@ jbcrypt 0.4 + + org.springframework.boot + spring-boot-starter-security + diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java new file mode 100644 index 0000000..3aaa1a6 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java @@ -0,0 +1,41 @@ +package edu.ssadmin.security.config; +import lombok.Data; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Collections; +import java.util.List; + +@Validated +@Data +public class SecurityProperties { + + /** + * HTTP 请求时,访问令牌的请求 Header + */ + @NotEmpty(message = "Token Header 不能为空") + private String tokenHeader = "Authorization"; + + /** + * mock 模式的开关 + */ + @NotNull(message = "mock 模式的开关不能为空") + private Boolean mockEnable = false; + /** + * mock 模式的密钥 + * 一定要配置密钥,保证安全性 + */ + @NotEmpty(message = "mock 模式的密钥不能为空") // 这里设置了一个默认值,因为实际上只有 mockEnable 为 true 时才需要配置。 + private String mockSecret = "test"; + + /** + * 免登录的 URL 列表 + */ + private List permitAllUrls = Collections.emptyList(); + + /** + * PasswordEncoder 加密复杂度,越高开销越大 + */ + private Integer passwordEncoderLength = 4; +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java new file mode 100644 index 0000000..f2ab52f --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java @@ -0,0 +1,83 @@ +package edu.ssadmin.security.config; + +import edu.ssadmin.common.handler.GlobalExceptionHandler; +import edu.ssadmin.security.filter.TokenAuthenticationFilter; +import edu.ssadmin.security.service.SecurityFrameworkService; +import edu.ssadmin.security.service.SecurityFrameworkServiceImpl; +import edu.ssadmin.server.api.permission.PermissionApi; +import org.springframework.beans.factory.config.MethodInvokingFactoryBean; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.access.AccessDeniedHandler; + + +import javax.annotation.Resource; + +/** + * Spring Security 自动配置类,主要用于相关组件的配置 + * + * 参见 https://stackoverflow.com/questions/53847050/spring-boot-delegatebuilder-cannot-be-null-on-autowiring-authenticationmanager 文档。 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableConfigurationProperties(SecurityProperties.class) +public class SsadminSecurityAutoConfiguration { + + @Resource + private SecurityProperties securityProperties; + +// /** +// * 处理用户未登录拦截的切面的 Bean +// */ +// @Bean +// public PreAuthenticatedAspect preAuthenticatedAspect() { +// return new PreAuthenticatedAspect(); +// } +// +// /** +// * 认证失败处理类 Bean +// */ +// @Bean +// public AuthenticationEntryPoint authenticationEntryPoint() { +// return new AuthenticationEntryPointImpl(); +// } +// +// /** +// * 权限不够处理器 Bean +// */ +// @Bean +// public AccessDeniedHandler accessDeniedHandler() { +// return new AccessDeniedHandlerImpl(); +// } + + /** + * Spring Security 加密器 + * 考虑到安全性,这里采用 BCryptPasswordEncoder 加密器 + * + * @see Password Encoding with Spring Security + */ + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength()); + } + + /** + * Token 认证过滤器 Bean + */ + @Bean + public TokenAuthenticationFilter authenticationTokenFilter(GlobalExceptionHandler globalExceptionHandler) { + return new TokenAuthenticationFilter(securityProperties, globalExceptionHandler); + } + + @Bean("ss") // 使用 Spring Security 的缩写,方便使用 + public SecurityFrameworkService securityFrameworkService(PermissionApi permissionApi) { + return new SecurityFrameworkServiceImpl(permissionApi); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java new file mode 100644 index 0000000..59a8073 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -0,0 +1,86 @@ +package edu.ssadmin.security.filter; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import edu.ssadmin.common.handler.GlobalExceptionHandler; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.common.utils.ServletUtils; +import edu.ssadmin.security.config.SecurityProperties; +import edu.ssadmin.security.util.JwtTokenUtil; +import edu.ssadmin.security.util.SecurityFrameworkUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Token 过滤器,验证 token 的有效性 + */ +@RequiredArgsConstructor +public class TokenAuthenticationFilter extends OncePerRequestFilter { + + private final SecurityProperties securityProperties; + + private final GlobalExceptionHandler globalExceptionHandler; + + @Autowired + private JwtTokenUtil jwtTokenUtil; + + @Override + @SuppressWarnings("NullableProblems") + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); + if (StrUtil.isNotEmpty(token)) { + try { + // 1.1 基于 token 获取登录用户名 + String username = jwtTokenUtil.getUsernameFromToken(token); + + // 1.2 模拟 Login 功能,方便日常开发调试 + if (username == null) { + username = mockUser(token); + } + + // 2. 设置当前用户 在后端进行数据存储的持久化操作 + if (username!= null) { + SecurityFrameworkUtils.setUserName(username, request); + } + } catch (Throwable ex) { + CommonResult result = globalExceptionHandler.allExceptionHandler(request, ex); + ServletUtils.writeJSON(response, result); + return; + } + } + + // 继续过滤链 + chain.doFilter(request, response); + } + + /** + * 模拟登录用户,方便日常开发调试 + * + * 注意,在线上环境下,一定要关闭该功能!!! + * + * @param token 模拟的 token,格式为 {@link SecurityProperties#getMockSecret()} + 用户编号 + * @return 模拟的 username + */ + private String mockUser(String token) { + if (!securityProperties.getMockEnable()) { + return null; + } + // 必须以 mockSecret 开头 + if (!token.startsWith(securityProperties.getMockSecret())) { + return null; + } + // 构建模拟用户 + String username = token.substring(securityProperties.getMockSecret().length()); + return username; + } + +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java new file mode 100644 index 0000000..1fa55ad --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java @@ -0,0 +1,44 @@ +package edu.ssadmin.security.service; + +/** + * Security 框架 Service 接口,定义权限相关的校验操作 + * + * @author 芋道源码 + */ +public interface SecurityFrameworkService { + + /** + * 判断是否有权限 + * + * @param permission 权限 + * @return 是否 + */ + boolean hasPermission(String permission); + + /** + * 判断是否有权限,任一一个即可 + * + * @param permissions 权限 + * @return 是否 + */ + boolean hasAnyPermissions(String... permissions); + + /** + * 判断是否有角色 + * + * 注意,角色使用的是 SysRoleDO 的 code 标识 + * + * @param role 角色 + * @return 是否 + */ + boolean hasRole(String role); + + /** + * 判断是否有角色,任一一个即可 + * + * @param roles 角色数组 + * @return 是否 + */ + boolean hasAnyRoles(String... roles); + +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java new file mode 100644 index 0000000..2c6efef --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java @@ -0,0 +1,43 @@ +package edu.ssadmin.security.service; + +import cn.hutool.core.collection.CollUtil; +import lombok.AllArgsConstructor; + +import edu.ssadmin.server.api.permission.PermissionApi; + +import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; +import javax.annotation.Resource; +import java.util.Arrays; + +/** + * 默认的 {@link SecurityFrameworkService} 实现类 + * + * @author 芋道源码 + */ +@AllArgsConstructor +public class SecurityFrameworkServiceImpl implements SecurityFrameworkService { + + private final PermissionApi permissionApi; + + @Override + public boolean hasPermission(String permission) { + return hasAnyPermissions(permission); + } + + @Override + public boolean hasAnyPermissions(String... permissions) { + return permissionApi.hasAnyPermissions(getUserName(), permissions); + } + + @Override + public boolean hasRole(String role) { + return hasAnyRoles(role); + } + + @Override + public boolean hasAnyRoles(String... roles) { + return permissionApi.hasAnyRoles(getUserName(), roles); + } + + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java new file mode 100644 index 0000000..e444b00 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java @@ -0,0 +1,96 @@ +package edu.ssadmin.security.util; + +import org.springframework.lang.Nullable; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.Collections; + +/** + * 安全服务工具类 + * + * @author 芋道源码 + */ +public class SecurityFrameworkUtils { + + public static final String AUTHORIZATION_BEARER = "Bearer"; + + private SecurityFrameworkUtils() {} + + /** + * 从请求中,获得认证 Token + * + * @param request 请求 + * @param header 认证 Token 对应的 Header 名字 + * @return 认证 Token + */ + public static String obtainAuthorization(HttpServletRequest request, String header) { + String authorization = request.getHeader(header); + if (!StringUtils.hasText(authorization)) { + return null; + } + int index = authorization.indexOf(AUTHORIZATION_BEARER + " "); + if (index == -1) { // 未找到 + return null; + } + return authorization.substring(index + 7).trim(); + } + + /** + * 获得当前认证信息 + * + * @return 认证信息 + */ + public static Authentication getAuthentication() { + SecurityContext context = SecurityContextHolder.getContext(); + if (context == null) { + return null; + } + return context.getAuthentication(); + } + + /** + * 获取当前用户 + * + * @return 当前用户 + */ + @Nullable + public static String getUserName() { + Authentication authentication = getAuthentication(); + if (authentication == null) { + return null; + } + return authentication.getPrincipal() instanceof String ? (String) authentication.getPrincipal() : null; + } + + /** + * 设置当前用户 + * + * @param username 用户名 + * @param request 请求 + */ + public static void setUserName(String username, HttpServletRequest request) { + // 创建 Authentication,并设置到上下文 + Authentication authentication = buildAuthentication(username, request); + SecurityContextHolder.getContext().setAuthentication(authentication); + + // 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号; + // 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息 +// WebFrameworkUtils.setLoginUserId(request, loginUser.getId()); +// WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType()); + } + + private static Authentication buildAuthentication(String username, HttpServletRequest request) { + // 创建 UsernamePasswordAuthenticationToken 对象 + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( + username, null, Collections.emptyList()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + return authenticationToken; + } + +} diff --git a/ssadmin-server/ssadmin-system/pom.xml b/ssadmin-server/ssadmin-system/pom.xml index 8afdeb5..dd7f5df 100644 --- a/ssadmin-server/ssadmin-system/pom.xml +++ b/ssadmin-server/ssadmin-system/pom.xml @@ -1,44 +1,24 @@ - - - 4.0.0 - - - edu.ssadmin - ssadmin-parrent-server - 1.0 - - - ssadmin-system - - ${project.artifactId} - - - - - - - edu.ssadmin - ssadmin-common - 1.0 - - - edu.ssadmin - ssadmin-module-security - 1.0 - - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + edu.ssadmin + ssadmin-parrent-server + 1.0 + +4.0.0 + + ssadmin-system-api + ssadmin-system-biz + +ssadmin-system +pom + +${project.artifactId} + + system 模块下,我们放通用业务,支撑上层的核心业务。 + 例如说:用户、部门、权限、数据字典等等 + diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java deleted file mode 100644 index cfd17c3..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java +++ /dev/null @@ -1,4 +0,0 @@ -package edu.ssadmin.server.controller.admin.permission; - -public class MenuController { -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java deleted file mode 100644 index 26c0577..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java +++ /dev/null @@ -1,4 +0,0 @@ -package edu.ssadmin.server.controller.admin.permission; - -public class PermissionController { -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java deleted file mode 100644 index 0554620..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java +++ /dev/null @@ -1,4 +0,0 @@ -package edu.ssadmin.server.controller.admin.permission; - -public class RoleController { -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java deleted file mode 100644 index e142aa5..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java +++ /dev/null @@ -1,4 +0,0 @@ -package edu.ssadmin.server.controller.admin.user; - -public class UserController { -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java deleted file mode 100644 index c3b7968..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java +++ /dev/null @@ -1,35 +0,0 @@ -package edu.ssadmin.server.controller.admin.user; - -import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; -import edu.ssadmin.server.utils.AdminLoginInfo; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.Tag; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.List; - -import static edu.ssadmin.common.pojo.CommonResult.success; - -@Api(tags = "管理后台 - 用户个人中心") -@RestController -@RequestMapping("/system/user/profile") -public class UserProfileController { - - @Resource - AdminLoginInfo adminLoginInfo; - - @GetMapping("/get") - @ApiOperation("获得登录用户信息") - public CommonResult profile() { - String username = adminLoginInfo.getLoginUsername(); - UserProfileRespVO resp = new UserProfileRespVO(); - resp.setNickname(username); - return success(resp); - } -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java deleted file mode 100644 index 344c3f8..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java +++ /dev/null @@ -1,23 +0,0 @@ -package edu.ssadmin.server.convert.auth; - -import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; -import edu.ssadmin.common.pojo.AccessToken; -import org.springframework.stereotype.Component; - -@Component -public class AuthConvert { - public LoginRespVO convert(AccessToken bean) { - if ( bean == null ) { - return null; - } - - // 使用AccessToken bean的属性值创建LoginRespVO对象 - LoginRespVO loginRespVO = new LoginRespVO(); - loginRespVO.setUserId(bean.getUserId()); - loginRespVO.setAccessToken(bean.getAccessToken()); - loginRespVO.setRefreshToken(bean.getRefreshToken()); - loginRespVO.setExpiresTime(bean.getExpiresTime()); - - return loginRespVO; - } -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java deleted file mode 100644 index c2659bb..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java +++ /dev/null @@ -1,11 +0,0 @@ -package edu.ssadmin.server.service.user; - -import edu.ssadmin.server.dataobject.user.AdminUserDO; - -public interface AdminUserService { - - AdminUserDO getUserByUsername(String username); - - boolean isPasswordMatch(String rawPassword, String encodedPassword); - -} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java b/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java deleted file mode 100644 index dbeb9df..0000000 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java +++ /dev/null @@ -1,25 +0,0 @@ -package edu.ssadmin.server.service.user; - -import edu.ssadmin.security.util.PasswordUtil; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.mapper.user.AdminUserMapper; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -@Service -public class AdminUserServiceImpl implements AdminUserService { - - @Resource - private AdminUserMapper userMapper; - - @Override - public AdminUserDO getUserByUsername(String username) { - return userMapper.selectByUsername(username); - } - - @Override - public boolean isPasswordMatch(String rawPassword, String encodedPassword) { - return PasswordUtil.verify(rawPassword, encodedPassword); - } -} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml new file mode 100644 index 0000000..ee998a8 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + + edu.ssadmin + ssadmin-system + 1.0 + + + ssadmin-system-api + 1.0 + + + + 18 + 18 + UTF-8 + + + + edu.ssadmin + ssadmin-common + 1.0 + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java new file mode 100644 index 0000000..e6f79d5 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java @@ -0,0 +1,58 @@ +package edu.ssadmin.server.api.permission; + + +import java.util.Collection; +import java.util.Set; + +/** + * 权限 API 接口 + * + * @author 芋道源码 + */ +public interface PermissionApi { + + /** + * 获得拥有多个角色的用户编号集合 + * + * @param roleIds 角色编号集合 + * @return 用户编号集合 + */ + Set getUserRoleIdListByRoleIds(Collection roleIds); + + /** + * 判断是否有权限,任一一个即可 + * + * @param userId 用户编号 + * @param permissions 权限 + * @return 是否 + */ + //boolean hasAnyPermissions(Long userId, String... permissions); + + /** + * 判断是否有权限,任一一个即可 + * + * @param username 用户名 + * @param permissions 权限 + * @return 是否 + */ + boolean hasAnyPermissions(String username, String... permissions); + /** + * 判断是否有角色,任一一个即可 + * + * @param userId 用户编号 + * @param roles 角色数组 + * @return 是否 + */ + //boolean hasAnyRoles(Long userId, String... roles); + + /** + * 判断是否有角色,任一一个即可 + * + * @param username 用户名 + * @param roles 角色数组 + * @return 是否 + */ + boolean hasAnyRoles(String username, String... roles); + + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java new file mode 100644 index 0000000..a33ea02 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java @@ -0,0 +1,26 @@ +package edu.ssadmin.server.enums.permission; + + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 菜单类型枚举类 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum MenuTypeEnum { + + DIR(1), // 目录 + MENU(2), // 菜单 + BUTTON(3) // 按钮 + ; + + /** + * 类型 + */ + private final Integer type; + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java new file mode 100644 index 0000000..192ce56 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java @@ -0,0 +1,31 @@ +package edu.ssadmin.server.enums.permission; + +import edu.ssadmin.common.utils.ObjectUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 角色标识枚举 + */ +@Getter +@AllArgsConstructor +public enum RoleCodeEnum { + + SUPER_ADMIN("super_admin", "超级管理员"), + TENANT_ADMIN("tenant_admin", "租户管理员"), + ; + + /** + * 角色编码 + */ + private final String code; + /** + * 名字 + */ + private final String name; + + public static boolean isSuperAdmin(String code) { + return ObjectUtils.equalsAny(code, SUPER_ADMIN.getCode()); + } + +} diff --git a/ssadmin-server/ssadmin-system/src/main/resources/application-dev.yml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-dev.yml similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/resources/application-dev.yml rename to ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-dev.yml diff --git a/ssadmin-server/ssadmin-system/src/main/resources/application-local.yml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-local.yml similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/resources/application-local.yml rename to ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-local.yml diff --git a/ssadmin-server/ssadmin-system/src/main/resources/application-prod.yml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-prod.yml similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/resources/application-prod.yml rename to ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-prod.yml diff --git a/ssadmin-server/ssadmin-system/src/main/resources/application.yml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application.yml similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/resources/application.yml rename to ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application.yml diff --git a/ssadmin-server/ssadmin-system/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml similarity index 33% rename from ssadmin-server/ssadmin-system/src/main/resources/mappers/AdminUserMapper.xml rename to ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml index db42fbe..692c94b 100644 --- a/ssadmin-server/ssadmin-system/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml @@ -9,11 +9,13 @@ - + + + + - @@ -22,8 +24,51 @@ + + + + + + + INSERT INTO system_users (id, username, password, realname,avatar,email,mobile,status,loginIp,loginDate) VALUES + (#{id}, #{username}, #{password}, #{realname},#{avatar},#{email},#{mobile},#{status},#{loginIp},#{loginDate}) + + + UPDATE system_users + + username = #{username}, + password = #{password}, + realname = #{realname}, + avatar = #{avatar}, + email = #{email}, + mobile = #{mobile}, + status = #{status}, + loginIp = #{loginIp}, + loginDate = #{loginDate}, + + + + WHERE id = #{id} + + + UPDATE system_users + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml new file mode 100644 index 0000000..011f2ec --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml @@ -0,0 +1,61 @@ + + + + 4.0.0 + + + edu.ssadmin + ssadmin-system + 1.0 + + + ssadmin-system-biz + + ${project.artifactId} + + + + + + + edu.ssadmin + ssadmin-system-api + 1.0 + + + edu.ssadmin + ssadmin-module-security + 1.0 + + + org.mapstruct + mapstruct + 1.5.0.Final + + + org.mapstruct + mapstruct-processor + 1.5.0.Final + + + edu.ssadmin + ssadmin-common + 1.0 + compile + + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/ServerApplication.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/ServerApplication.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java new file mode 100644 index 0000000..06406d3 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java @@ -0,0 +1,41 @@ +package edu.ssadmin.server.api.permission; + +import edu.ssadmin.server.service.permission.PermissionService; +import edu.ssadmin.server.service.user.AdminUserService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Set; + +/** + * 权限 API 实现类 + * + * @author 芋道源码 + */ +@Service +public class PermissionApiImpl implements PermissionApi { + + @Resource + private PermissionService permissionService; + @Resource + private AdminUserService adminUserService; + + @Override + public Set getUserRoleIdListByRoleIds(Collection roleIds) { + return permissionService.getUserRoleIdListByRoleId(roleIds); + } + + @Override + public boolean hasAnyPermissions(String username, String... permissions) { + Long userId = adminUserService.getUserId(username); + return permissionService.hasAnyPermissions(userId, permissions); + } + + @Override + public boolean hasAnyRoles(String username, String... roles) { + Long userId = adminUserService.getUserId(username); + return permissionService.hasAnyRoles(userId, roles); + } + +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/Demo.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/Demo.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/Demo.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/Demo.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java similarity index 37% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java index 4d1e2e9..52dfda6 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java @@ -1,9 +1,20 @@ package edu.ssadmin.server.controller.admin.auth; +import cn.hutool.core.collection.CollUtil; +import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; import edu.ssadmin.server.controller.admin.auth.vo.LoginReqVO; import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.convert.auth.AuthConvert; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.server.dataobject.user.AdminUserDO; import edu.ssadmin.server.service.auth.AdminAuthService; +import edu.ssadmin.server.service.permission.MenuService; +import edu.ssadmin.server.service.permission.PermissionService; +import edu.ssadmin.server.service.permission.RoleService; +import edu.ssadmin.server.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -12,8 +23,15 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; +import java.util.Collections; +import java.util.List; +import java.util.Set; + import static edu.ssadmin.common.pojo.CommonResult.success; +import static edu.ssadmin.common.utils.CollectionUtils.convertSet; +import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; + @Api(tags = "管理后台 - 认证") @RestController @RequestMapping("/system/auth") @@ -21,6 +39,14 @@ public class AdminAuthController { @Resource private AdminAuthService authService; + @Resource + private AdminUserService userService; + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + @Resource + private PermissionService permissionService; @PostMapping("/login") @ApiOperation("使用账号密码登录") @@ -39,4 +65,32 @@ public class AdminAuthController { public CommonResult logout(HttpServletRequest request) { return success(true); } + + @GetMapping("/get-permission-info") + @ApiOperation( "获取登录用户的权限信息") + public CommonResult getPermissionInfo() { + Long userId = userService.getUserId(getUserName()); + // 1.1 获得用户信息 + AdminUserDO user = userService.getUser(userId); + if (user == null) { + return null; + } + + // 1.2 获得角色列表 + Set roleIds = permissionService.getUserRoleIdListByUserId(userId); + if (CollUtil.isEmpty(roleIds)) { + return success(AuthConvert.INSTANCE.convert(user, Collections.emptyList(), Collections.emptyList())); + } + List roles = roleService.getRoleList(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色 + + // 1.3 获得菜单列表 + Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); + List menuList = menuService.getMenuList(menuIds); + menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 + + // 2. 拼接结果返回 + return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); + } + } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java new file mode 100644 index 0000000..8baf63e --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -0,0 +1,62 @@ +package edu.ssadmin.server.controller.admin.auth.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Set; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthPermissionInfoRespVO { + + private UserVO user; + + private Set roles; + + private Set permissions; + + private List menus; + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class UserVO { + + private Long id; + + private String username; + + private String avatar; + + } + + @Data + @NoArgsConstructor + @AllArgsConstructor + @Builder + public static class MenuVO { + + private Long id; + + private Long parentId; + + private String name; + + private String path; + + private String component; + + /** + * 子路由 + */ + private List children; + + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/package-info.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/package-info.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java new file mode 100644 index 0000000..dafdf62 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java @@ -0,0 +1,82 @@ +package edu.ssadmin.server.controller.admin.permission; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.permission.vo.menu.*; +import edu.ssadmin.server.convert.permission.MenuConvert; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.server.service.permission.MenuService; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.Comparator; +import java.util.List; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/system/menu") +@Validated +public class MenuController { + + @Resource + private MenuService menuService; + + @PostMapping("/create") + @ApiOperation("创建菜单") + @PreAuthorize("@ss.hasPermission('system:menu:create')") + public CommonResult createMenu(@Valid @RequestBody MenuCreateReqVO reqVO) { + Long menuId = menuService.createMenu(reqVO); + return success(menuId); + } + + @PutMapping("/update") + @ApiOperation("修改菜单") + @PreAuthorize("@ss.hasPermission('system:menu:update')") + public CommonResult updateMenu(@Valid @RequestBody MenuUpdateReqVO reqVO) { + menuService.updateMenu(reqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation( "删除菜单") + @PreAuthorize("@ss.hasPermission('system:menu:delete')") + public CommonResult deleteMenu(@RequestParam("id") Long id) { + menuService.deleteMenu(id); + return success(true); + } + + @GetMapping("/list") + @ApiOperation("获取菜单列表") + @PreAuthorize("@ss.hasPermission('system:menu:query')") + public CommonResult> getMenuList(MenuListReqVO reqVO) { + List list = menuService.getMenuList(reqVO); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(MenuConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/list-all-simple") + @ApiOperation("获取菜单精简信息列表")//"只包含被开启的菜单,用于【角色分配菜单】功能的选项 + public CommonResult> getSimpleMenuList() { + // 获得菜单列表,只要开启状态的 + MenuListReqVO reqVO = new MenuListReqVO(); + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); + List list = menuService.getMenuList(reqVO); + // 排序后,返回给前端 + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(MenuConvert.INSTANCE.convertList02(list)); + } + + @GetMapping("/get") + @ApiOperation("获取菜单信息") + @PreAuthorize("@ss.hasPermission('system:menu:query')") + public CommonResult getMenu(Long id) { + MenuDO menu = menuService.getMenu(id); + return success(MenuConvert.INSTANCE.convert(menu)); + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java new file mode 100644 index 0000000..7d2af34 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java @@ -0,0 +1,56 @@ +package edu.ssadmin.server.controller.admin.permission; + +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; +import edu.ssadmin.server.service.permission.PermissionService; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.Set; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/system/permission") +public class PermissionController { + + @Resource + private PermissionService permissionService; + + @ApiOperation("获得角色拥有的菜单编号") + @GetMapping("/list-role-menus") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult> getRoleMenuList(Long roleId) { + return success(permissionService.getRoleMenuListByRoleId(roleId)); + } + + @PostMapping("/assign-role-menu") + @ApiOperation("赋予角色菜单") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { + // 执行菜单的分配 + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); + return success(true); + } + + @ApiOperation("获得管理员拥有的角色编号列表") + @GetMapping("/list-user-roles") + @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public CommonResult> listAdminRoles(@RequestParam("userId") Long userId) { + return success(permissionService.getUserRoleIdListByUserId(userId)); + } + + @ApiOperation("赋予用户角色") + @PostMapping("/assign-user-role") + @PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public CommonResult assignUserRole(@Validated @RequestBody PermissionAssignUserRoleReqVO reqVO) { + permissionService.assignUserRole(reqVO.getUserId(), reqVO.getRoleIds()); + return success(true); + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java new file mode 100644 index 0000000..ae505e6 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java @@ -0,0 +1,83 @@ +package edu.ssadmin.server.controller.admin.permission; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.permission.vo.role.*; +import edu.ssadmin.server.convert.permission.RoleConvert; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.server.service.permission.RoleService; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Comparator; +import java.util.List; + +import static edu.ssadmin.common.pojo.CommonResult.success; +import static java.util.Collections.singleton; + +@RestController +@RequestMapping("/system/role") +@Validated +public class RoleController { + + @Resource + private RoleService roleService; + + @PostMapping("/create") + @ApiOperation("创建角色") + @PreAuthorize("@ss.hasPermission('system:role:create')") + public CommonResult createRole(@Valid @RequestBody RoleCreateReqVO reqVO) { + return success(roleService.createRole(reqVO, null)); + } + + @PutMapping("/update") + @ApiOperation("修改角色") + @PreAuthorize("@ss.hasPermission('system:role:update')") + public CommonResult updateRole(@Valid @RequestBody RoleUpdateReqVO reqVO) { + roleService.updateRole(reqVO); + return success(true); + } + + @PutMapping("/update-status") + @ApiOperation("修改角色状态") + @PreAuthorize("@ss.hasPermission('system:role:update')") + public CommonResult updateRoleStatus(@Valid @RequestBody RoleUpdateStatusReqVO reqVO) { + roleService.updateRoleStatus(reqVO.getId(), reqVO.getStatus()); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除角色") + @PreAuthorize("@ss.hasPermission('system:role:delete')") + public CommonResult deleteRole(@RequestParam("id") Long id) { + roleService.deleteRole(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得角色信息") + @PreAuthorize("@ss.hasPermission('system:role:query')") + public CommonResult getRole(@RequestParam("id") Long id) { + RoleDO role = roleService.getRole(id); + return success(RoleConvert.INSTANCE.convert(role)); + } + + + @GetMapping("/list-all-simple") + @ApiOperation("获取角色精简信息列表") + public CommonResult> getSimpleRoleList() { + // 获得角色列表,只要开启状态的 + List list = roleService.getRoleListByStatus(singleton(CommonStatusEnum.ENABLE.getStatus())); + // 排序后,返回给前端 + list.sort(Comparator.comparing(RoleDO::getSort)); + return success(RoleConvert.INSTANCE.convertList02(list)); + } + + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java new file mode 100644 index 0000000..49c5410 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -0,0 +1,44 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 菜单 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class MenuBaseVO { + + + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + private String name; + + @Size(max = 100) + private String permission; + + @NotNull(message = "菜单类型不能为空") + private Integer type; + + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @NotNull(message = "父菜单 ID 不能为空") + private Long parentId; + + @Size(max = 200, message = "路由地址不能超过200个字符") + private String path; + + @Size(max = 200, message = "组件路径不能超过255个字符") + private String component; + + @NotNull(message = "状态不能为空") + private Integer status; + + private String remark; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java new file mode 100644 index 0000000..748b342 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java @@ -0,0 +1,9 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class MenuCreateReqVO extends MenuBaseVO { +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java new file mode 100644 index 0000000..0095943 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java @@ -0,0 +1,12 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.Data; + +@Data +public class MenuListReqVO { + + private String name; + + private Integer status; + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java new file mode 100644 index 0000000..bdf5de7 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java @@ -0,0 +1,22 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class MenuRespVO extends MenuBaseVO { + + private Long id; + + private Integer status; + + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java new file mode 100644 index 0000000..9abfef6 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java @@ -0,0 +1,19 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MenuSimpleRespVO { + + private Long id; + + private String name; + + private Long parentId; + + private Integer type; +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java new file mode 100644 index 0000000..8c4a29a --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.server.controller.admin.permission.vo.menu; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class MenuUpdateReqVO extends MenuBaseVO { + + @NotNull(message = "菜单编号不能为空") + private Long id; + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java new file mode 100644 index 0000000..dcdb2cf --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.server.controller.admin.permission.vo.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Set; + +@Data +public class PermissionAssignRoleMenuReqVO { + + @NotNull(message = "角色编号不能为空") + private Long roleId; + + private Set menuIds = Collections.emptySet(); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java new file mode 100644 index 0000000..3424f66 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.server.controller.admin.permission.vo.permission; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Collections; +import java.util.Set; + +@Data +public class PermissionAssignUserRoleReqVO { + + @NotNull(message = "用户编号不能为空") + private Long userId; + + private Set roleIds = Collections.emptySet(); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java new file mode 100644 index 0000000..d4b6216 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java @@ -0,0 +1,29 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 角色 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class RoleBaseVO { + + @NotBlank(message = "角色名称不能为空") + @Size(max = 30, message = "角色名称长度不能超过30个字符") + private String name; + + @NotBlank(message = "角色标志不能为空") + @Size(max = 100, message = "角色标志长度不能超过100个字符") + private String code; + + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + private String remark; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java new file mode 100644 index 0000000..fb6f7b6 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java @@ -0,0 +1,10 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleCreateReqVO extends RoleBaseVO { + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java new file mode 100644 index 0000000..8b9a48c --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java @@ -0,0 +1,23 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class RoleRespVO extends RoleBaseVO { + + private Long id; + + private Integer status; + + private LocalDateTime createTime; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java new file mode 100644 index 0000000..9bc6255 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java @@ -0,0 +1,16 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RoleSimpleRespVO { + + private Long id; + + private String name; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java new file mode 100644 index 0000000..a4e09be --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleUpdateReqVO extends RoleBaseVO { + + @NotNull(message = "角色编号不能为空") + private Long id; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java new file mode 100644 index 0000000..f82e865 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java @@ -0,0 +1,18 @@ +package edu.ssadmin.server.controller.admin.permission.vo.role; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + + +@Data +public class RoleUpdateStatusReqVO { + + @NotNull(message = "角色编号不能为空") + private Long id; + + @NotNull(message = "状态不能为空") + //@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java new file mode 100644 index 0000000..00d9abe --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java @@ -0,0 +1,78 @@ +package edu.ssadmin.server.controller.admin.user; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.user.vo.user.*; +import edu.ssadmin.server.convert.user.UserConvert; +import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.server.service.user.AdminUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.util.*; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@Api(tags = "管理后台 - 用户管理") +@RestController +@RequestMapping("/system/user") +public class UserController { + + @Resource + private AdminUserService userService; + + @PostMapping("/create") + @ApiOperation("新增用户") + @PreAuthorize("@ss.hasPermission('system:user:create')") + public CommonResult createUser(@Valid @RequestBody UserCreateReqVO reqVO) { + Long id = userService.createUser(reqVO); + return success(id); + } + + @PutMapping("update") + @ApiOperation("修改用户")@PreAuthorize("@ss.hasPermission('system:user:update')") + public CommonResult updateUser(@Valid @RequestBody UserUpdateReqVO reqVO) { + userService.updateUser(reqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除用户") + @PreAuthorize("@ss.hasPermission('system:user:delete')") + public CommonResult deleteUser(@RequestParam("id") Long id) { + userService.deleteUser(id); + return success(true); + } + + @PutMapping("/update-password") + @ApiOperation("重置用户密码") + @PreAuthorize("@ss.hasPermission('system:user:update-password')") + public CommonResult updateUserPassword(@Valid @RequestBody UserUpdatePasswordReqVO reqVO) { + //不涉及旧密码的验证,只以管理员的身份做密码重置reset + userService.updateUserPassword(reqVO.getId(),reqVO.getPassword()); + return success(true); + } + + @GetMapping("/list-all-simple") + @ApiOperation("获取用户精简信息列表") + public CommonResult> getSimpleUserList() { + // 获用户列表,只要开启状态的 + List list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); + // 排序后,返回给前端 + return success(UserConvert.INSTANCE.convertList04(list)); + } + + @GetMapping("/get") + @ApiOperation("获得用户详情") + @PreAuthorize("@ss.hasPermission('system:user:query')") + public CommonResult getUser(@RequestParam("id") Long id) { + AdminUserDO user = userService.getUser(id); + return success(UserConvert.INSTANCE.convert(user)); + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java new file mode 100644 index 0000000..e624380 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java @@ -0,0 +1,75 @@ +package edu.ssadmin.server.controller.admin.user; + +import cn.hutool.core.collection.CollUtil; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.server.convert.user.UserConvert; +import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.server.utils.AdminLoginInfo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import static edu.ssadmin.common.pojo.CommonResult.success; +import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; + + +@Api(tags = "管理后台 - 用户个人中心") +@RestController +@RequestMapping("/system/user/profile") +public class UserProfileController { + + @Resource + AdminLoginInfo adminLoginInfo; + + @Resource + private AdminUserService userService; + + @GetMapping("/get") + @ApiOperation("获得登录用户信息") + public CommonResult profile() { + String username = adminLoginInfo.getLoginUsername(); + // 获得用户基本信息 + UserProfileRespVO resp = UserConvert.INSTANCE.convert01(userService.getUserByUsername(username)); + // 获得用户角色 +// List userRoles = roleService.getRoleListFromCache(permissionService.getUserRoleIdListByUserId(user.getId())); +// resp.setRoles(UserConvert.INSTANCE.convertList(userRoles)); + return success(resp); + } + + @PutMapping("/update") + @ApiOperation("修改用户个人信息") + public CommonResult updateUserProfile(@Valid @RequestBody UserProfileUpdateReqVO reqVO) { + Long userId = userService.getUserId(getUserName()); + userService.updateUserProfile(userId, reqVO); + return success(true); + } + + @PutMapping("/update-password") + @ApiOperation("修改用户个人密码") + public CommonResult updateUserProfilePassword(@Valid @RequestBody UserProfileUpdatePasswordReqVO reqVO) { + Long userId = userService.getUserId(getUserName()); + userService.updateUserPassword(userId, reqVO); + return success(true); + } + + @RequestMapping(value = "/update-avatar", method = {RequestMethod.POST, RequestMethod.PUT}) // 解决 uni-app 不支持 Put 上传文件的问题 + @ApiOperation("上传用户个人头像") + public CommonResult updateUserAvatar(@RequestParam("avatarFile") MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw exception(FILE_IS_EMPTY); + } + Long userId = userService.getUserId(getUserName()); + String avatar = userService.updateUserAvatar(userId, file.getInputStream()); + return success(avatar); + } + +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java similarity index 66% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java index f4b14f0..0c6a4ef 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java @@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import java.time.LocalDateTime; +import java.util.List; @Data @EqualsAndHashCode(callSuper = true) @@ -15,6 +16,22 @@ import java.time.LocalDateTime; @AllArgsConstructor public class UserProfileRespVO extends UserBaseVO { private Long id; + private Integer status; private String loginIp; private LocalDateTime loginDate; + private LocalDateTime createTime; + + /** + * 所属角色 + */ + private List roles; + + @Data + public static class Role { + + private Long id; + + private String name; + + } } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java new file mode 100644 index 0000000..2861c56 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java @@ -0,0 +1,19 @@ +package edu.ssadmin.server.controller.admin.user.vo.profile; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + +@Data +public class UserProfileUpdatePasswordReqVO { + + @NotEmpty(message = "旧密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String oldPassword; + + @NotEmpty(message = "新密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String newPassword; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java new file mode 100644 index 0000000..fce2e58 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -0,0 +1,19 @@ +package edu.ssadmin.server.controller.admin.user.vo.profile; + +import edu.ssadmin.common.validation.Mobile; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.Email; +import javax.validation.constraints.Size; + +@Data +public class UserProfileUpdateReqVO { + + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + private String email; + + @Mobile + private String mobile; +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java similarity index 58% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java index 0827eea..ffaac66 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java @@ -1,12 +1,12 @@ package edu.ssadmin.server.controller.admin.user.vo.user; +import edu.ssadmin.common.validation.Mobile; import lombok.Data; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; -import java.util.Set; @Data @@ -17,7 +17,18 @@ public class UserBaseVO { @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符") private String username; - @Size(max = 30, message = "用户昵称长度不能超过30个字符") - private String nickname; + @Size(max = 10, message = "用户真实姓名长度不能超过10个字符") + private String realname; + + private String remark; + + @Email(message = "邮箱格式不正确") + @Size(max = 50, message = "邮箱长度不能超过 50 个字符") + private String email; + + @Mobile + private String mobile; + + private String avatar; } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java new file mode 100644 index 0000000..36b51fc --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; + +@Data +@EqualsAndHashCode(callSuper = true) +public class UserCreateReqVO extends UserBaseVO { + + @NotEmpty(message = "密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java new file mode 100644 index 0000000..463cdf8 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java @@ -0,0 +1,28 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class UserRespVO extends UserBaseVO { + + private Long id; + + private Integer status; + + private String loginIp; + + private LocalDateTime loginDate; + + private LocalDateTime createTime; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java new file mode 100644 index 0000000..a5ab7a6 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserSimpleRespVO { + + private Long id; + + private String username; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java new file mode 100644 index 0000000..e75a068 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java @@ -0,0 +1,19 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class UserUpdatePasswordReqVO { + + @NotNull(message = "用户编号不能为空") + private Long id; + + @NotEmpty(message = "密码不能为空") + @Length(min = 4, max = 16, message = "密码长度为 4-16 位") + private String password; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java new file mode 100644 index 0000000..aaa36c7 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class UserUpdateReqVO extends UserBaseVO { + + @NotNull(message = "用户编号不能为空") + private Long id; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java new file mode 100644 index 0000000..c48e191 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java @@ -0,0 +1,96 @@ +package edu.ssadmin.server.convert.auth; + +import cn.hutool.core.collection.CollUtil; +import edu.ssadmin.common.pojo.AccessToken; +import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; +import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.server.enums.permission.MenuTypeEnum; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.slf4j.LoggerFactory; + +import java.util.*; + +import static edu.ssadmin.common.utils.CollectionUtils.convertSet; +import static edu.ssadmin.common.utils.CollectionUtils.filterList; +import static edu.ssadmin.server.dataobject.permission.MenuDO.ID_ROOT; + +@Mapper +public interface AuthConvert { + + AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); + + LoginRespVO convert(AccessToken bean); + + default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { + return AuthPermissionInfoRespVO.builder() + .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).username(user.getUsername()).avatar(user.getAvatar()).build()) + .roles(convertSet(roleList, RoleDO::getCode)) + // 权限标识信息 + .permissions(convertSet(menuList, MenuDO::getPermission)) + // 菜单树 + .menus(buildMenuTree(menuList)) + .build(); + } + + AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO menu); + + /** + * 将菜单列表,构建成菜单树 + * + * @param menuList 菜单列表 + * @return 菜单树 + */ + default List buildMenuTree(List menuList) { + if (CollUtil.isEmpty(menuList)) { + return Collections.emptyList(); + } + // 移除按钮 + menuList.removeIf(menu -> menu.getType().equals(MenuTypeEnum.BUTTON.getType())); + // 排序,保证菜单的有序性 + menuList.sort(Comparator.comparing(MenuDO::getSort)); + + // 构建菜单树 + // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 + Map treeNodeMap = new LinkedHashMap<>(); + menuList.forEach(menu -> treeNodeMap.put(menu.getId(), AuthConvert.INSTANCE.convertTreeNode(menu))); + // 处理父子关系 + treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(ID_ROOT)).forEach(childNode -> { + // 获得父节点 + AuthPermissionInfoRespVO.MenuVO parentNode = treeNodeMap.get(childNode.getParentId()); + if (parentNode == null) { + LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找不到父资源({})]", + childNode.getId(), childNode.getParentId()); + return; + } + // 将自己添加到父节点中 + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList<>()); + } + parentNode.getChildren().add(childNode); + }); + // 获得到所有的根节点 + return filterList(treeNodeMap.values(), node -> ID_ROOT.equals(node.getParentId())); + } + +} + + + +// public LoginRespVO convert(AccessToken bean) { +// if ( bean == null ) { +// return null; +// } +// +// // 使用AccessToken bean的属性值创建LoginRespVO对象 +// LoginRespVO loginRespVO = new LoginRespVO(); +// loginRespVO.setUserId(bean.getUserId()); +// loginRespVO.setAccessToken(bean.getAccessToken()); +// loginRespVO.setRefreshToken(bean.getRefreshToken()); +// loginRespVO.setExpiresTime(bean.getExpiresTime()); +// +// return loginRespVO; +// } \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java new file mode 100644 index 0000000..1f5811a --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java @@ -0,0 +1,28 @@ +package edu.ssadmin.server.convert.permission; + +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuRespVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuSimpleRespVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface MenuConvert { + + MenuConvert INSTANCE = Mappers.getMapper(MenuConvert.class); + + List convertList(List list); + + MenuDO convert(MenuCreateReqVO bean); + + MenuDO convert(MenuUpdateReqVO bean); + + MenuRespVO convert(MenuDO bean); + + List convertList02(List list); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java new file mode 100644 index 0000000..b5158a8 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java @@ -0,0 +1,28 @@ +package edu.ssadmin.server.convert.permission; + +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleRespVO; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleSimpleRespVO; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface RoleConvert { + + RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class); + + RoleDO convert(RoleUpdateReqVO bean); + + RoleRespVO convert(RoleDO bean); + + RoleDO convert(RoleCreateReqVO bean); + + List convertList02(List list); + +// RoleDO convert(RoleCreateReqBO bean); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java new file mode 100644 index 0000000..5cd7bcc --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java @@ -0,0 +1,32 @@ +package edu.ssadmin.server.convert.user; + +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserRespVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserSimpleRespVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.server.dataobject.user.AdminUserDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface UserConvert { + + UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); + + UserRespVO convert(AdminUserDO bean); + + UserProfileRespVO convert01(AdminUserDO bean); + + AdminUserDO convert(UserCreateReqVO bean); + + AdminUserDO convert(UserUpdateReqVO bean); + + AdminUserDO convert(UserProfileUpdateReqVO bean); + + List convertList04(List list); + +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java similarity index 99% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java index 419539f..27e58e3 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java @@ -35,4 +35,5 @@ public abstract class BaseDO implements Serializable { */ private Boolean deleted; + } diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java new file mode 100644 index 0000000..d0b85f6 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java @@ -0,0 +1,77 @@ +package edu.ssadmin.server.dataobject.permission; + +import edu.ssadmin.server.enums.permission.MenuTypeEnum; +import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.common.enums.CommonStatusEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 菜单 DO + * + * 参考 ruoyi + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MenuDO extends BaseDO { + + /** + * 菜单编号 - 根节点 + */ + public static final Long ID_ROOT = 0L; + + /** + * 菜单编号 + */ + private Long id; + /** + * 菜单名称 + */ + private String name; + /** + * 权限标识 + * + * 一般格式为:${系统}:${模块}:${操作} + * 例如说:system:admin:add,即 system 服务的添加管理员。 + * + * 当我们把该 MenuDO 赋予给角色后,意味着该角色有该资源: + * - 对于后端,配合 @PreAuthorize 注解,配置 API 接口需要该权限,从而对 API 接口进行权限控制。 + * - 对于前端,配合前端标签,配置按钮是否展示,避免用户没有该权限时,结果可以看到该操作。 + */ + private String permission; + /** + * 菜单类型 + * + * 枚举 {@link MenuTypeEnum} + */ + private Integer type; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 父菜单ID + */ + private Long parentId; + /** + * 路由地址 + * + * 如果 path 为 http(s) 时,则它是外链 + */ + private String path; + /** + * 组件路径 + */ + private String component; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java new file mode 100644 index 0000000..b081bb5 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java @@ -0,0 +1,48 @@ +package edu.ssadmin.server.dataobject.permission; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.server.dataobject.base.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +/** + * 角色 DO + * + * @author ruoyi + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleDO extends BaseDO { + + /** + * 角色ID + */ + private Long id; + /** + * 角色名称 + */ + private String name; + /** + * 角色标识 + * + * 枚举 + */ + private String code; + /** + * 角色排序 + */ + private Integer sort; + /** + * 角色状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java new file mode 100644 index 0000000..ad6b7ef --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java @@ -0,0 +1,24 @@ +package edu.ssadmin.server.dataobject.permission; + +import edu.ssadmin.server.dataobject.base.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class RoleMenuDO extends BaseDO { + + /** + * 自增主键 + */ + private Long id; + /** + * 角色ID + */ + private Long roleId; + /** + * 菜单ID + */ + private Long menuId; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java new file mode 100644 index 0000000..ec09c16 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java @@ -0,0 +1,24 @@ +package edu.ssadmin.server.dataobject.permission; + +import edu.ssadmin.server.dataobject.base.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class UserRoleDO extends BaseDO { + + /** + * 自增主键 + */ + private Long id; + /** + * 用户 ID + */ + private Long userId; + /** + * 角色 ID + */ + private Long roleId; + +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java similarity index 55% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java index 13023fa..11bff9f 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java @@ -1,17 +1,17 @@ package edu.ssadmin.server.dataobject.user; -import edu.ssadmin.server.dataobject.base.TenantBaseDO; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.server.dataobject.base.BaseDO; import lombok.*; import java.time.LocalDateTime; -import java.util.Set; @Data @EqualsAndHashCode(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class AdminUserDO extends TenantBaseDO { +public class AdminUserDO extends BaseDO { /** * 用户ID @@ -30,15 +30,37 @@ public class AdminUserDO extends TenantBaseDO { private String password; /** - * 用户昵称 + * 用户真实姓名 */ - private String nickname; + private String realname; + + /** + * 用户头像 + */ + private String avatar; + + /** + * 用户邮件 + */ + private String email; + + /** + * 用户电话 + */ + private String mobile; /** * 状态 + * + * 枚举 {@link CommonStatusEnum} */ private Integer status; + /** + * 备注 + */ + private String remark; + /** * 最后登录IP */ diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java new file mode 100644 index 0000000..84f7ace --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java @@ -0,0 +1,33 @@ +package edu.ssadmin.server.mapper.permission; + +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.server.dataobject.permission.MenuDO; + +import java.util.Collection; +import java.util.List; + +public interface MenuMapper { + void insert(MenuDO menu); + + void updateById(MenuDO menu); + + void deleteById(Long id); + + + MenuDO selectById(Long id); + + MenuDO selectByParentIdAndName(Long parentId, String name) ; + + Long selectCountByParentId(Long parentId); + + List selectList() ; + + List selectList(MenuListReqVO reqVO) ; + + List selectBatchIds(Collection ids); + + List selectListByPermission(String permission); + +} + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java new file mode 100644 index 0000000..1191329 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java @@ -0,0 +1,27 @@ +package edu.ssadmin.server.mapper.permission; + + +import edu.ssadmin.server.dataobject.permission.RoleDO; + +import java.util.Collection; +import java.util.List; + +public interface RoleMapper { + + void insert(RoleDO role); + + void updateById(RoleDO role); + + void deleteById(Long id); + + RoleDO selectById(Long id); + + RoleDO selectByName(String name); + + RoleDO selectByCode(String code); + + List selectListByStatus(Collection statuses); + + List selectList(); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java new file mode 100644 index 0000000..3f2faab --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java @@ -0,0 +1,26 @@ +package edu.ssadmin.server.mapper.permission; + +import edu.ssadmin.server.dataobject.permission.RoleMenuDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface RoleMenuMapper { + + List selectListByRoleIds(Long roleId); + + List selectListByRoleIds(Collection roleIds) ; + + List selectListByMenuId(Long menuId); + + void deleteListByRoleIdAndMenuIds(Long roleId, Collection menuIds) ; + + void deleteListByMenuId(Long menuId) ; + + void deleteListByRoleId(Long roleId) ; + + void insertBatch(Collection roleMenuDOS); + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java new file mode 100644 index 0000000..ed10fdd --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java @@ -0,0 +1,23 @@ +package edu.ssadmin.server.mapper.permission; + +import edu.ssadmin.server.dataobject.permission.UserRoleDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface UserRoleMapper { + + List selectListByUserId(Long userId); + + List selectListByRoleIds(Collection roleIds); + + void deleteListByUserIdAndRoleIdIds(Long userId, Collection roleIds); + + void deleteListByUserId(Long userId) ; + + void deleteListByRoleId(Long roleId) ; + + void insertBatch(Collection userRoleDOS); +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java similarity index 36% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java index 067103d..dff18cf 100644 --- a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java @@ -2,8 +2,20 @@ package edu.ssadmin.server.mapper.user; import edu.ssadmin.server.dataobject.user.AdminUserDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; @Mapper public interface AdminUserMapper { + Long selectIdByUsername(String username); AdminUserDO selectByUsername(String username); + AdminUserDO selectById(Long id); + AdminUserDO selectByMobile(String mobile); + AdminUserDO selectByEmail(String email); + List selectListByStatus(Integer status); + + void insert(AdminUserDO user); + void updateById(AdminUserDO user); + void deleteById(Long id); } diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java new file mode 100644 index 0000000..0cff6cd --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java @@ -0,0 +1,73 @@ +package edu.ssadmin.server.service.permission; + +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.server.dataobject.permission.MenuDO; + +import java.util.Collection; +import java.util.List; + +/** + * 菜单 Service 接口 + * + * 参考 芋道源码 + */ +public interface MenuService { + + /** + * 创建菜单 + * + * @param reqVO 菜单信息 + * @return 创建出来的菜单编号 + */ + Long createMenu(MenuCreateReqVO reqVO); + + /** + * 更新菜单 + * + * @param reqVO 菜单信息 + */ + void updateMenu(MenuUpdateReqVO reqVO); + + /** + * 删除菜单 + * + * @param id 菜单编号 + */ + void deleteMenu(Long id); + + /** + * 获得所有菜单列表 + * + * @return 菜单列表 + */ + List getMenuList(); + + + /** + * 筛选菜单列表 + * + * @param reqVO 筛选条件请求 VO + * @return 菜单列表 + */ + List getMenuList(MenuListReqVO reqVO); + + /** + * 获得菜单 + * + * @param id 菜单编号 + * @return 菜单 + */ + MenuDO getMenu(Long id); + + /** + * 获得菜单数组 + * + * @param ids 菜单编号数组 + * @return 菜单数组 + */ + List getMenuList(Collection ids); + + List getMenuIdListByPermission(String permission); +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java new file mode 100644 index 0000000..3de32d0 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java @@ -0,0 +1,180 @@ +package edu.ssadmin.server.service.permission; + +import cn.hutool.core.collection.CollUtil; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.server.convert.permission.MenuConvert; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.server.enums.permission.MenuTypeEnum; +import edu.ssadmin.server.mapper.permission.MenuMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; + +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; +import static edu.ssadmin.common.utils.CollectionUtils.convertList; +import static edu.ssadmin.server.dataobject.permission.MenuDO.ID_ROOT; + +/** + * 菜单 Service 实现 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class MenuServiceImpl implements MenuService { + + @Resource + private MenuMapper menuMapper; + @Resource + private PermissionService permissionService; + + @Override + public Long createMenu(MenuCreateReqVO reqVO) { + // 校验父菜单存在 + validateParentMenu(reqVO.getParentId(), null); + // 校验菜单(自己) + validateMenu(reqVO.getParentId(), reqVO.getName(), null); + + // 插入数据库 + MenuDO menu = MenuConvert.INSTANCE.convert(reqVO); + initMenuProperty(menu); + menuMapper.insert(menu); + // 返回 + return menu.getId(); + } + + @Override + public void updateMenu(MenuUpdateReqVO reqVO) { + // 校验更新的菜单是否存在 + if (menuMapper.selectById(reqVO.getId()) == null) { + throw exception(MENU_NOT_EXISTS); + } + // 校验父菜单存在 + validateParentMenu(reqVO.getParentId(), reqVO.getId()); + // 校验菜单(自己) + validateMenu(reqVO.getParentId(), reqVO.getName(), reqVO.getId()); + + // 更新到数据库 + MenuDO updateObject = MenuConvert.INSTANCE.convert(reqVO); + initMenuProperty(updateObject); + menuMapper.updateById(updateObject); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteMenu(Long id) { + // 校验是否还有子菜单 + if (menuMapper.selectCountByParentId(id) > 0) { + throw exception(MENU_EXISTS_CHILDREN); + } + // 校验删除的菜单是否存在 + if (menuMapper.selectById(id) == null) { + throw exception(MENU_NOT_EXISTS); + } + // 标记删除 + menuMapper.deleteById(id); + // 删除授予给角色的权限 + permissionService.processMenuDeleted(id); + } + + @Override + public List getMenuList() { + return menuMapper.selectList(); + } + + @Override + public List getMenuList(MenuListReqVO reqVO) { + return menuMapper.selectList(reqVO); + } + + @Override + public MenuDO getMenu(Long id) { + return menuMapper.selectById(id); + } + + @Override + public List getMenuList(Collection ids) { + return menuMapper.selectBatchIds(ids); + } + + @Override + public List getMenuIdListByPermission(String permission){ + List menus = menuMapper.selectListByPermission(permission); + return convertList(menus, MenuDO::getId); + } + /** + * 校验父菜单是否合法 + *

+ * 1. 不能设置自己为父菜单 + * 2. 父菜单不存在 + * 3. 父菜单必须是 {@link MenuTypeEnum#MENU} 菜单类型 + * + * @param parentId 父菜单编号 + * @param childId 当前菜单编号 + */ + void validateParentMenu(Long parentId, Long childId) { + if (parentId == null || ID_ROOT.equals(parentId)) { + return; + } + // 不能设置自己为父菜单 + if (parentId.equals(childId)) { + throw exception(MENU_PARENT_ERROR); + } + MenuDO menu = menuMapper.selectById(parentId); + // 父菜单不存在 + if (menu == null) { + throw exception(MENU_PARENT_NOT_EXISTS); + } + // 父菜单必须是目录或者菜单类型 + if (!MenuTypeEnum.DIR.getType().equals(menu.getType()) + && !MenuTypeEnum.MENU.getType().equals(menu.getType())) { + throw exception(MENU_PARENT_NOT_DIR_OR_MENU); + } + } + + /** + * 校验菜单是否合法 + *

+ * 1. 校验相同父菜单编号下,是否存在相同的菜单名 + * + * @param name 菜单名字 + * @param parentId 父菜单编号 + * @param id 菜单编号 + */ + void validateMenu(Long parentId, String name, Long id) { + MenuDO menu = menuMapper.selectByParentIdAndName(parentId, name); + if (menu == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的菜单 + if (id == null) { + throw exception(MENU_NAME_DUPLICATE); + } + if (!menu.getId().equals(id)) { + throw exception(MENU_NAME_DUPLICATE); + } + } + + /** + * 初始化菜单的通用属性。 + *

+ * 例如说,只有目录或者菜单类型的菜单,才设置 icon + * + * @param menu 菜单 + */ + private void initMenuProperty(MenuDO menu) { + // 菜单为按钮类型时,无需 component、path 属性,进行置空 + if (MenuTypeEnum.BUTTON.getType().equals(menu.getType())) { + menu.setComponent(""); + menu.setPath(""); + } + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java new file mode 100644 index 0000000..101a1f2 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java @@ -0,0 +1,125 @@ +package edu.ssadmin.server.service.permission; + +import java.util.Collection; +import java.util.Set; + +import static java.util.Collections.singleton; + +/** + * 权限 Service 接口 + *

+ * 提供用户-角色、角色-菜单、角色-部门的关联权限处理 + * + * @author 芋道源码 + */ +public interface PermissionService { + + /** + * 判断是否有权限,任一一个即可 + * + * @param userId 用户编号 + * @param permissions 权限 + * @return 是否 + */ + boolean hasAnyPermissions(Long userId, String... permissions); + + /** + * 判断是否有角色,任一一个即可 + * + * @param roles 角色数组 + * @return 是否 + */ + boolean hasAnyRoles(Long userId, String... roles); + + // ========== 角色-菜单的相关方法 ========== + + /** + * 设置角色菜单 + * + * @param roleId 角色编号 + * @param menuIds 菜单编号集合 + */ + void assignRoleMenu(Long roleId, Set menuIds); + + /** + * 处理角色删除时,删除关联授权数据 + * + * @param roleId 角色编号 + */ + void processRoleDeleted(Long roleId); + + /** + * 处理菜单删除时,删除关联授权数据 + * + * @param menuId 菜单编号 + */ + void processMenuDeleted(Long menuId); + + /** + * 获得角色拥有的菜单编号集合 + * + * @param roleId 角色编号 + * @return 菜单编号集合 + */ + default Set getRoleMenuListByRoleId(Long roleId) { + return getRoleMenuListByRoleId(singleton(roleId)); + } + + /** + * 获得角色们拥有的菜单编号集合 + * + * @param roleIds 角色编号数组 + * @return 菜单编号集合 + */ + Set getRoleMenuListByRoleId(Collection roleIds); + + /** + * 获得拥有指定菜单的角色编号数组,从缓存中获取 + * + * @param menuId 菜单编号 + * @return 角色编号数组 + */ + Set getMenuRoleIdListByMenuIdFromCache(Long menuId); + + // ========== 用户-角色的相关方法 ========== + + /** + * 设置用户角色 + * + * @param userId 角色编号 + * @param roleIds 角色编号集合 + */ + void assignUserRole(Long userId, Set roleIds); + + /** + * 处理用户删除时,删除关联授权数据 + * + * @param userId 用户编号 + */ + void processUserDeleted(Long userId); + + /** + * 获得拥有多个角色的用户编号集合 + * + * @param roleIds 角色编号集合 + * @return 用户编号集合 + */ + Set getUserRoleIdListByRoleId(Collection roleIds); + + /** + * 获得用户拥有的角色编号集合 + * + * @param userId 用户编号 + * @return 角色编号集合 + */ + Set getUserRoleIdListByUserId(Long userId); + + /** + * 获得用户拥有的角色编号集合,从缓存中获取 + * + * @param userId 用户编号 + * @return 角色编号集合 + */ + Set getUserRoleIdListByUserIdFromCache(Long userId); + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java new file mode 100644 index 0000000..28c9935 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java @@ -0,0 +1,242 @@ +package edu.ssadmin.server.service.permission; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.extra.spring.SpringUtil; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.utils.CollectionUtils; +import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.server.dataobject.permission.RoleMenuDO; +import edu.ssadmin.server.dataobject.permission.UserRoleDO; +import edu.ssadmin.server.mapper.permission.RoleMenuMapper; +import edu.ssadmin.server.mapper.permission.UserRoleMapper; +import edu.ssadmin.server.service.user.AdminUserService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.google.common.collect.Sets; + +import javax.annotation.Resource; +import java.util.*; + +import static edu.ssadmin.common.utils.CollectionUtils.convertSet; + +/** + * 权限 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class PermissionServiceImpl implements PermissionService { + + @Resource + private RoleMenuMapper roleMenuMapper; + @Resource + private UserRoleMapper userRoleMapper; + + @Resource + private RoleService roleService; + @Resource + private MenuService menuService; + @Resource + private AdminUserService userService; + + @Override + public boolean hasAnyPermissions(Long userId, String... permissions) { + // 如果为空,说明已经有权限 + if (ArrayUtil.isEmpty(permissions)) { + return true; + } + + // 获得当前登录的角色。如果为空,说明没有权限 + List roles = getEnableUserRoleListByUserIdFromCache(userId); + if (CollUtil.isEmpty(roles)) { + return false; + } + + // 情况一:遍历判断每个权限,如果有一满足,说明有权限 + for (String permission : permissions) { + if (hasAnyPermission(roles, permission)) { + return true; + } + } + + // 情况二:如果是超管,也说明有权限 + return roleService.hasAnySuperAdmin(convertSet(roles, RoleDO::getId)); + } + + /** + * 判断指定角色,是否拥有该 permission 权限 + * + * @param roles 指定角色数组 + * @param permission 权限标识 + * @return 是否拥有 + */ + private boolean hasAnyPermission(List roles, String permission) { + List menuIds = menuService.getMenuIdListByPermission(permission); + // 采用严格模式,如果权限找不到对应的 Menu 的话,也认为没有权限 + if (CollUtil.isEmpty(menuIds)) { + return false; + } + + // 判断是否有权限 + Set roleIds = convertSet(roles, RoleDO::getId); + for (Long menuId : menuIds) { + // 获得拥有该菜单的角色编号集合 + Set menuRoleIds = getSelf().getMenuRoleIdListByMenuIdFromCache(menuId); + // 如果有交集,说明有权限 + if (CollUtil.containsAny(menuRoleIds, roleIds)) { + return true; + } + } + return false; + } + + @Override + public boolean hasAnyRoles(Long userId, String... roles) { + // 如果为空,说明已经有权限 + if (ArrayUtil.isEmpty(roles)) { + return true; + } + + // 获得当前登录的角色。如果为空,说明没有权限 + List roleList = getEnableUserRoleListByUserIdFromCache(userId); + if (CollUtil.isEmpty(roleList)) { + return false; + } + + // 判断是否有角色 + Set userRoles = convertSet(roleList, RoleDO::getCode); + return CollUtil.containsAny(userRoles, Sets.newHashSet(roles)); + } + + // ========== 角色-菜单的相关方法 ========== + + @Override + public void assignRoleMenu(Long roleId, Set menuIds) { + // 获得角色拥有菜单编号 + Set dbMenuIds = convertSet(roleMenuMapper.selectListByRoleIds(roleId), RoleMenuDO::getMenuId); + // 计算新增和删除的菜单编号 + Collection createMenuIds = CollUtil.subtract(menuIds, dbMenuIds); + Collection deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIds); + // 执行新增和删除。对于已经授权的菜单,不用做任何处理 + if (CollUtil.isNotEmpty(createMenuIds)) { + roleMenuMapper.insertBatch(CollectionUtils.convertList(createMenuIds, menuId -> { + RoleMenuDO entity = new RoleMenuDO(); + entity.setRoleId(roleId); + entity.setMenuId(menuId); + return entity; + })); + } + if (CollUtil.isNotEmpty(deleteMenuIds)) { + roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void processRoleDeleted(Long roleId) { + // 标记删除 UserRole + userRoleMapper.deleteListByRoleId(roleId); + // 标记删除 RoleMenu + roleMenuMapper.deleteListByRoleId(roleId); + } + + @Override + public void processMenuDeleted(Long menuId) { + roleMenuMapper.deleteListByMenuId(menuId); + } + + @Override + public Set getRoleMenuListByRoleId(Collection roleIds) { + if (CollUtil.isEmpty(roleIds)) { + return Collections.emptySet(); + } + + // 如果是管理员的情况下,获取全部菜单编号 + if (roleService.hasAnySuperAdmin(roleIds)) { + return convertSet(menuService.getMenuList(), MenuDO::getId); + } + // 如果是非管理员的情况下,获得拥有的菜单编号 + return convertSet(roleMenuMapper.selectListByRoleIds(roleIds), RoleMenuDO::getMenuId); + } + + @Override + public Set getMenuRoleIdListByMenuIdFromCache(Long menuId) { + return convertSet(roleMenuMapper.selectListByMenuId(menuId), RoleMenuDO::getRoleId); + } + + // ========== 用户-角色的相关方法 ========== + + @Override + public void assignUserRole(Long userId, Set roleIds) { + // 获得角色拥有角色编号 + Set dbRoleIds = convertSet(userRoleMapper.selectListByUserId(userId), + UserRoleDO::getRoleId); + // 计算新增和删除的角色编号 + Collection createRoleIds = CollUtil.subtract(roleIds, dbRoleIds); + Collection deleteMenuIds = CollUtil.subtract(dbRoleIds, roleIds); + // 执行新增和删除。对于已经授权的角色,不用做任何处理 + if (!CollectionUtil.isEmpty(createRoleIds)) { + userRoleMapper.insertBatch(CollectionUtils.convertList(createRoleIds, roleId -> { + UserRoleDO entity = new UserRoleDO(); + entity.setUserId(userId); + entity.setRoleId(roleId); + return entity; + })); + } + if (!CollectionUtil.isEmpty(deleteMenuIds)) { + userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds); + } + } + + @Override + public void processUserDeleted(Long userId) { + userRoleMapper.deleteListByUserId(userId); + } + + @Override + public Set getUserRoleIdListByUserId(Long userId) { + return convertSet(userRoleMapper.selectListByUserId(userId), UserRoleDO::getRoleId); + } + + @Override + public Set getUserRoleIdListByUserIdFromCache(Long userId) { + return getUserRoleIdListByUserId(userId); + } + + @Override + public Set getUserRoleIdListByRoleId(Collection roleIds) { + return convertSet(userRoleMapper.selectListByRoleIds(roleIds), UserRoleDO::getUserId); + } + + /** + * 获得用户拥有的角色,并且这些角色是开启状态的 + * + * @param userId 用户编号 + * @return 用户拥有的角色 + */ + List getEnableUserRoleListByUserIdFromCache(Long userId) { + // 获得用户拥有的角色编号 + Set roleIds = getSelf().getUserRoleIdListByUserIdFromCache(userId); + // 获得角色数组,并移除被禁用的 + List roles = roleService.getRoleList(roleIds); + roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); + return roles; + } + + + /** + * 获得自身的代理对象,解决 AOP 生效问题 + * + * @return 自己 + */ + private PermissionServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java new file mode 100644 index 0000000..316970e --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java @@ -0,0 +1,89 @@ +package edu.ssadmin.server.service.permission; + +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.server.dataobject.permission.RoleDO; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +/** + * 角色 Service 接口 + * + * 参考开源项目 芋道源码 + */ +public interface RoleService { + + /** + * 创建角色 + * + * @param reqVO 创建角色信息 + * @param type 角色类型 + * @return 角色编号 + */ + Long createRole(@Valid RoleCreateReqVO reqVO, Integer type); + + /** + * 更新角色 + * + * @param reqVO 更新角色信息 + */ + void updateRole(@Valid RoleUpdateReqVO reqVO); + + /** + * 删除角色 + * + * @param id 角色编号 + */ + void deleteRole(Long id); + + /** + * 更新角色状态 + * + * @param id 角色编号 + * @param status 状态 + */ + void updateRoleStatus(Long id, Integer status); + + /** + * 获得角色 + * + * @param id 角色编号 + * @return 角色 + */ + RoleDO getRole(Long id); + + /** + * 获得角色数组,从缓存中 + * + * @param ids 角色编号数组 + * @return 角色数组 + */ + List getRoleList(Collection ids); + + + /** + * 获得角色列表 + * + * @param statuses 筛选的状态 + * @return 角色列表 + */ + List getRoleListByStatus(Collection statuses); + + /** + * 获得所有角色列表 + * + * @return 角色列表 + */ + List getRoleList(); + + /** + * 判断角色编号数组中,是否有管理员 + * + * @param ids 角色编号数组 + * @return 是否有管理员 + */ + boolean hasAnySuperAdmin(Collection ids); +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java new file mode 100644 index 0000000..7a32e01 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java @@ -0,0 +1,174 @@ +package edu.ssadmin.server.service.permission; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.extra.spring.SpringUtil; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.server.convert.permission.RoleConvert; +import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.server.enums.permission.RoleCodeEnum; +import edu.ssadmin.server.mapper.permission.RoleMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + + +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; +import static edu.ssadmin.common.utils.CollectionUtils.convertList; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 角色 Service 实现类 + * + * 参考开源项目 芋道源码 + */ +@Service +@Slf4j +public class RoleServiceImpl implements RoleService { + + @Resource + private PermissionService permissionService; + + @Resource + private RoleMapper roleMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createRole(RoleCreateReqVO reqVO, Integer type) { + // 校验角色 + validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), null); + // 插入到数据库 + RoleDO role = RoleConvert.INSTANCE.convert(reqVO); + role.setStatus(CommonStatusEnum.ENABLE.getStatus()); + roleMapper.insert(role); + // 返回 + return role.getId(); + } + + @Override + public void updateRole(RoleUpdateReqVO reqVO) { + // 校验是否可以更新 + validateRoleForUpdate(reqVO.getId()); + // 校验角色的唯一字段是否重复 + validateRoleDuplicate(reqVO.getName(), reqVO.getCode(), reqVO.getId()); + + // 更新到数据库 + RoleDO updateObj = RoleConvert.INSTANCE.convert(reqVO); + roleMapper.updateById(updateObj); + } + + @Override + public void updateRoleStatus(Long id, Integer status) { + // 校验是否可以更新 + validateRoleForUpdate(id); + + // 更新状态 + RoleDO updateObj = new RoleDO(); + updateObj.setId(id); + updateObj.setStatus(status); + roleMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteRole(Long id) { + // 校验是否可以更新 + validateRoleForUpdate(id); + // 标记删除 + roleMapper.deleteById(id); + // 删除相关数据 + permissionService.processRoleDeleted(id); + } + + /** + * 校验角色的唯一字段是否重复 + * + * 1. 是否存在相同名字的角色 + * 2. 是否存在相同编码的角色 + * + * @param name 角色名字 + * @param code 角色额编码 + * @param id 角色编号 + */ + void validateRoleDuplicate(String name, String code, Long id) { + // 0. 超级管理员,不允许创建 +// if (RoleCodeEnum.isSuperAdmin(code)) { +// throw exception(ROLE_ADMIN_CODE_ERROR, code); +// } + // 1. 该 name 名字被其它角色所使用 + RoleDO role = roleMapper.selectByName(name); + if (role != null && !role.getId().equals(id)) { + throw exception(ROLE_NAME_DUPLICATE); + } + // 2. 是否存在相同编码的角色 + if (!StringUtils.hasText(code)) { + return; + } + // 该 code 编码被其它角色所使用 + role = roleMapper.selectByCode(code); + if (role != null && !role.getId().equals(id)) { + throw exception(ROLE_CODE_DUPLICATE); + } + } + + /** + * 校验角色是否可以被更新 + * + * @param id 角色编号 + */ + void validateRoleForUpdate(Long id) { + RoleDO roleDO = roleMapper.selectById(id); + if (roleDO == null) { + throw exception(ROLE_NOT_EXISTS); + } + } + + @Override + public RoleDO getRole(Long id) { + return roleMapper.selectById(id); + } + + @Override + public List getRoleList(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + // 这里采用 for 循环从缓存中获取,主要考虑 Spring CacheManager 无法批量操作的问题 + RoleServiceImpl self = getSelf(); + return convertList(ids, self::getRole); + } + @Override + public List getRoleListByStatus(Collection statuses) { + return roleMapper.selectListByStatus(statuses); + } + @Override + public List getRoleList() { + return roleMapper.selectList(); + } + + @Override + public boolean hasAnySuperAdmin(Collection ids) { + if (CollectionUtil.isEmpty(ids)) { + return false; + } + RoleServiceImpl self = getSelf(); + return ids.stream().anyMatch(id -> { + RoleDO role = self.getRole(id); + return role != null && RoleCodeEnum.isSuperAdmin(role.getCode()); + }); + } + /** + * 获得自身的代理对象,解决 AOP 生效问题 + * + * @return 自己 + */ + private RoleServiceImpl getSelf() { + return SpringUtil.getBean(getClass()); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java new file mode 100644 index 0000000..b696574 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java @@ -0,0 +1,112 @@ +package edu.ssadmin.server.service.user; + +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdatePasswordReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.server.dataobject.user.AdminUserDO; + +import javax.validation.Valid; +import java.io.InputStream; +import java.util.*; + + +/** + * 后台用户 Service 接口 + * + * 参考开源项目芋道源码 + */ +public interface AdminUserService { + + + + boolean isPasswordMatch(String rawPassword, String encodedPassword); + + /** + * 创建用户 + * + * @param reqVO 用户信息 + * @return 用户编号 + */ + Long createUser(@Valid UserCreateReqVO reqVO); + + /** + * 修改用户 + * + * @param reqVO 用户信息 + */ + void updateUser(@Valid UserUpdateReqVO reqVO); + + /** + * 修改用户个人信息 + * + * @param id 用户编号 + * @param reqVO 用户个人信息 + */ + void updateUserProfile(Long id, @Valid UserProfileUpdateReqVO reqVO); + + /** + * 修改用户个人密码 + * + * @param id 用户编号 + * @param reqVO 更新用户个人密码 + */ + void updateUserPassword(Long id, @Valid UserProfileUpdatePasswordReqVO reqVO); + + /** + * 更新用户头像 + * + * @param id 用户 id + * @param avatarFile 头像文件 + */ + String updateUserAvatar(Long id, InputStream avatarFile) throws Exception; + + /** + * 修改密码 + * + * @param id 用户编号 + * @param password 密码 + */ + void updateUserPassword(Long id, String password); + + + /** + * 删除用户 + * + * @param id 用户编号 + */ + void deleteUser(Long id); + + /** + * 通过用户 ID 查询用户 + * + * @param id 用户ID + * @return 用户对象信息 + */ + AdminUserDO getUser(Long id); + + /** + * 通过用户 ID 查询用户 + * + * @param username 用户名 + * @return 用户对象信息 + */ + AdminUserDO getUserByUsername(String username); + + /** + * 通过用户名 查询用户ID + */ + Long getUserId(String username); + + /** + * 获得指定状态的用户们 + * + * @param status 状态 + * @return 用户们 + */ + List getUserListByStatus(Integer status); + + +} + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java new file mode 100644 index 0000000..8086107 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java @@ -0,0 +1,241 @@ +package edu.ssadmin.server.service.user; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.StrUtil; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.security.util.PasswordUtil; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdatePasswordReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.server.convert.user.UserConvert; +import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.server.mapper.user.AdminUserMapper; +import edu.ssadmin.server.service.permission.PermissionService; +import org.springframework.stereotype.Service; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.validation.Valid; + +import java.io.InputStream; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; + +@Service +public class AdminUserServiceImpl implements AdminUserService { + + @Resource + private PermissionService permissionService; + + @Resource + private AdminUserMapper userMapper; + @Resource + private PasswordEncoder passwordEncoder; + + @Override + public AdminUserDO getUserByUsername(String username) { + return userMapper.selectByUsername(username); + } + + @Override + public boolean isPasswordMatch(String rawPassword, String encodedPassword) { + return PasswordUtil.verify(rawPassword, encodedPassword); + } + @Override + public Long createUser(@Valid UserCreateReqVO reqVO){ + // 校验正确性 + validateUserForCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail()); + // 插入用户 + AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); + user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 + user.setPassword(encodePassword(reqVO.getPassword())); // 加密密码 + userMapper.insert(user); + return user.getId(); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void updateUser(UserUpdateReqVO reqVO) { + // 校验正确性 + validateUserForCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail()); + // 更新用户 + AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); + userMapper.updateById(updateObj); + + } + + @Override + public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) { + // 校验正确性 + validateUserExists(id); + validateEmailUnique(id, reqVO.getEmail()); + validateMobileUnique(id, reqVO.getMobile()); + // 执行更新 + AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); + updateObj.setId(id); + userMapper.updateById(updateObj); + } + + @Override + public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception { + validateUserExists(id); + // 存储文件 + String avatar = "";//fileApi.createFile(IoUtil.readBytes(avatarFile)); + // 更新路径 + AdminUserDO sysUserDO = new AdminUserDO(); + sysUserDO.setId(id); + sysUserDO.setAvatar(avatar); + userMapper.updateById(sysUserDO); + return avatar; + } + + @Override + public void updateUserPassword(Long id, String password) { + // 校验用户存在 + validateUserExists(id); + // 更新密码 + AdminUserDO updateObj = new AdminUserDO(); + updateObj.setId(id); + updateObj.setPassword(encodePassword(password)); // 加密密码 + userMapper.updateById(updateObj); + } + + @Override + public void updateUserPassword(Long id,UserProfileUpdatePasswordReqVO reqVO) { + // 校验旧密码密码 + validateOldPassword(id, reqVO.getOldPassword()); + // 执行更新 + AdminUserDO updateObj = new AdminUserDO(); + updateObj.setId(id); + updateObj.setPassword(encodePassword(reqVO.getNewPassword())); // 加密密码 + userMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteUser(Long id) { + // 校验用户存在 + validateUserExists(id); + // 删除用户 + userMapper.deleteById(id); + // 删除用户关联角色的DO数据 + permissionService.processUserDeleted(id); + } + @Override + public AdminUserDO getUser(Long id) { + return userMapper.selectById(id); + } + + @Override + public Long getUserId(String username){return userMapper.selectIdByUsername(username);} + + @Override + public List getUserListByStatus(Integer status) { + return userMapper.selectListByStatus(status); + } + + private void validateUserForCreateOrUpdate(Long id, String username, String mobile, String email) { + + // 校验用户存在 + validateUserExists(id); + // 校验用户名唯一 + validateUsernameUnique(id, username); + // 校验手机号唯一 + validateMobileUnique(id, mobile); + // 校验邮箱唯一 + validateEmailUnique(id, email); + + } + + + void validateUserExists(Long id) { + if (id == null) { + return; + } + AdminUserDO user = userMapper.selectById(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + } + + void validateUsernameUnique(Long id, String username) { + if (StrUtil.isBlank(username)) { + return; + } + AdminUserDO user = userMapper.selectByUsername(username); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_USERNAME_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_USERNAME_EXISTS); + } + } + + void validateEmailUnique(Long id, String email) { + if (StrUtil.isBlank(email)) { + return; + } + AdminUserDO user = userMapper.selectByEmail(email); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_EMAIL_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_EMAIL_EXISTS); + } + } + + void validateMobileUnique(Long id, String mobile) { + if (StrUtil.isBlank(mobile)) { + return; + } + AdminUserDO user = userMapper.selectByMobile(mobile); + if (user == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(USER_MOBILE_EXISTS); + } + if (!user.getId().equals(id)) { + throw exception(USER_MOBILE_EXISTS); + } + } + /** + * 校验旧密码 + * @param id 用户 id + * @param oldPassword 旧密码 + */ + void validateOldPassword(Long id, String oldPassword) { + AdminUserDO user = userMapper.selectById(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!isPasswordMatch(oldPassword, user.getPassword())) { + throw exception(USER_PASSWORD_FAILED); + } + } + /** + * 对密码进行加密 + * + * @param password 密码 + * @return 加密后的密码 + */ + private String encodePassword(String password) { + return passwordEncoder.encode(password); + } +} diff --git a/ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml new file mode 100644 index 0000000..fee6cd3 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml @@ -0,0 +1,39 @@ +#配置数据源 +spring: + datasource: + url: jdbc:mysql://localhost:3306/ssadmin + username: ssadmin + password: ssadmin + +#jwt +jwt: + secret: gx4SN/4gh6QPvLfVWCW8Aoo4l2n66d2338IwXyu1koDT1W94XS35OZJPYkA2IIMMgmlz96LCHSNc8jLYuzwB1IreKOZz2TZhsWODfjHAS9bYlduniCUSuSPZ5/OP15O63fn1kN1N5w64frpyWcWbTtiCgLMkJpnfjmqFMAr7fgcOGyt2rmunvFYni9T78Q4fn/0gpx3qm8zXw3oBbFb1Ge9Wnh1UCSapXd/EzLau3iaXqp9f+8FHmSCo9vbEaRSRMPHdcpnB4WKHKySE/BCNSsWM+kHmHyrAbvKErPCz2XXMnIalUoAtquq03LnmYjrBHyI230VcYEVzGmzLOTsSJw== + access_token: + expiration: 3600 # in seconds + refresh_token: + expiration: 604800 # in seconds + +#是否开启 swagger-ui + +knife4j: + enable: true + openapi: + title: Knife4j官方文档 + description: "这是API文档" + email: 384704@qq.com + concat: 张老师 + version: v4.0 + group: + test1: + group-name: ssadmin + api-rule: package + api-rule-resources: + - edu.ssadmin + + +# 日志文件配置 + + +ssadmin: + captcha: + enable: false # 开发环境,暂时关闭验证码,方便登录等接口的测试; \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml new file mode 100644 index 0000000..8cea8c0 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml @@ -0,0 +1,18 @@ +#配置数据源 +spring: + datasource: + url: jdbc:mysql://localhost:3306/ssadmin + username: ssadmin + password: ssadmin + +#jwt +jwt: + secret: gx4SN/4gh6QPvLfVWCW8Aoo4l2n66d2338IwXyu1koDT1W94XS35OZJPYkA2IIMMgmlz96LCHSNc8jLYuzwB1IreKOZz2TZhsWODfjHAS9bYlduniCUSuSPZ5/OP15O63fn1kN1N5w64frpyWcWbTtiCgLMkJpnfjmqFMAr7fgcOGyt2rmunvFYni9T78Q4fn/0gpx3qm8zXw3oBbFb1Ge9Wnh1UCSapXd/EzLau3iaXqp9f+8FHmSCo9vbEaRSRMPHdcpnB4WKHKySE/BCNSsWM+kHmHyrAbvKErPCz2XXMnIalUoAtquq03LnmYjrBHyI230VcYEVzGmzLOTsSJw== + access_token: + expiration: 3600 # in seconds + refresh_token: + expiration: 604800 # in seconds + +ssadmin: + captcha: + enable: false # 本地环境,暂时关闭验证码,方便登录等接口的测试; \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml new file mode 100644 index 0000000..25014ec --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml @@ -0,0 +1,15 @@ +#配置数据源 +spring: + datasource: + url: jdbc:mysql://localhost:3306/ssadmin + username: ssadmin + password: ssadmin + +#jwt + +#是否开启 swagger-ui + +knife4j: + enable: false + +# 日志文件配置 \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml new file mode 100644 index 0000000..41205f4 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml @@ -0,0 +1,47 @@ +server: + port: 28080 + +spring: + application: + name: ssadmin-server + profiles: + active: dev + + main: + allow-circular-references: true # 允许循环依赖 + + jackson: + #日期格式化 + + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + serialization: + #格式化输出 + indent_output: true + #忽略无法转换的对象 + fail_on_empty_beans: false + write-dates-as-timestamps: false + #设置空如何序列化 + defaultPropertyInclusion: NON_EMPTY + deserialization: + #允许对象忽略json中不存在的属性 + fail_on_unknown_properties: false + parser: + #允许出现特殊字符和转义符 + allow_unquoted_control_chars: true + #允许出现单引号 + allow_single_quotes: true + +mybatis: + mapper-locations: classpath:mappers/*.xml + +ssadmin: + info: + version: 1.0.0 + captcha: # 验证码的开关 + enable: true # 默认为 true + + tenant: # 多租户配置 + enable: false + +debug: false \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml new file mode 100644 index 0000000..7d928f9 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_users (id, username, password, realname,avatar,email,mobile,status,remark,loginIp,loginDate) VALUES + (#{id}, #{username}, #{password}, #{realname},#{avatar},#{email},#{mobile},#{status},#{remark},#{loginIp},#{loginDate}) + + + UPDATE system_users + + username = #{username}, + password = #{password}, + realname = #{realname}, + avatar = #{avatar}, + email = #{email}, + mobile = #{mobile}, + status = #{status}, + remark = #{remark}, + loginIp = #{loginIp}, + loginDate = #{loginDate}, + + + + WHERE id = #{id} + + + UPDATE system_users + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml new file mode 100644 index 0000000..4d049f5 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_menu (name, permission,type,component,sort,parent_id,status,remark, path) VALUES + (#{name}, #{permission}, #{type},#{component},#{sort},#{parentId},#{status},#{remark},#{path}) + + + UPDATE system_menu + + name = #{name}, + permission = #{permission}, + type = #{type}, + sort = #{sort}, + parent_id = #{parentId}, + path = #{path}, + component = #{component}, + status = #{status}, + remark = #{remark}, + + + + WHERE id = #{id} + + + UPDATE system_menu + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml new file mode 100644 index 0000000..20f6c44 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_role (name, code,sort,status,remark) VALUES + (#{name}, #{code},#{sort},#{status},#{remark}) + + + UPDATE system_role + + name = #{name}, + code = #{code}, + sort = #{sort}, + status = #{status}, + remark = #{remark}, + + + + WHERE id = #{id} + + + UPDATE system_role + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml new file mode 100644 index 0000000..1ded6e7 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_role_menu (role_id, menu_id) VALUES + + (#{item.roleId}, #{item.menuId}) + + + + + UPDATE system_role_menu + SET deleted = 1 + WHERE deleted = 0 AND role_id = #{roleId} + AND menu_id IN + + #{menuId} + + + + UPDATE system_role_menu + SET deleted = 1 + WHERE role_id = #{roleId} AND deleted = 0 + + + UPDATE system_role_menu + SET deleted = 1 + WHERE menu_id = #{menuId} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml new file mode 100644 index 0000000..9107079 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_user_role (user_id, role_id) VALUES + + (#{item.userId},#{item.roleId}) + + + + + UPDATE system_user_role + SET deleted = 1 + WHERE deleted = 0 AND user_id = #{userId} + AND user_id IN + + #{roleId} + + + + UPDATE system_user_role + SET deleted = 1 + WHERE user_id = #{userId} AND deleted = 0 + + + UPDATE system_user_role + SET deleted = 1 + WHERE role_id = #{roleId} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/src/test/java/edu/ssadmin/server/ServerApplicationTests.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/ServerApplicationTests.java similarity index 100% rename from ssadmin-server/ssadmin-system/src/test/java/edu/ssadmin/server/ServerApplicationTests.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/ServerApplicationTests.java -- Gitee From ae2d8d5cd1db47ad7325d37b49a387dab01ac017 Mon Sep 17 00:00:00 2001 From: xyy Date: Mon, 11 Dec 2023 17:05:09 +0800 Subject: [PATCH 02/41] a little bug repaired --- .../auth/AdminAuthServiceImplTest.java | 2 ++ ssadmin-server/ssadmin-test/pom.xml | 20 +++++++++++++++++++ .../test/core/ut/BaseDBUnitTest.java | 2 ++ 3 files changed, 24 insertions(+) create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java create mode 100644 ssadmin-server/ssadmin-test/pom.xml create mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java new file mode 100644 index 0000000..95c3ef5 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java @@ -0,0 +1,2 @@ +package edu.ssadmin.server.service.auth;public class AdminAuthServiceImplTest { +} diff --git a/ssadmin-server/ssadmin-test/pom.xml b/ssadmin-server/ssadmin-test/pom.xml new file mode 100644 index 0000000..0159f29 --- /dev/null +++ b/ssadmin-server/ssadmin-test/pom.xml @@ -0,0 +1,20 @@ + + + + ssadmin-parrent-server + edu.ssadmin + 1.0 + + 4.0.0 + + ssadmin-test + + + 18 + 18 + UTF-8 + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java new file mode 100644 index 0000000..8e139b8 --- /dev/null +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java @@ -0,0 +1,2 @@ +package edu.ssadmin.framework.test.core.ut;public class BaseDBTest { +} -- Gitee From b2a9708c6f391be111c4df5e2680509d48d14c41 Mon Sep 17 00:00:00 2001 From: xyy Date: Mon, 11 Dec 2023 17:05:35 +0800 Subject: [PATCH 03/41] a little bug repaired. --- sql/README.md | 68 ++-- sql/ssadmin_init.sql | 2 +- ssadmin-server/pom.xml | 1 + .../common/exception/ServiceException.java | 2 + .../security/service/TokenService.java | 2 + .../security/service/TokenServiceImpl.java | 6 + .../server/enums/permission/MenuTypeEnum.java | 3 + .../ssadmin-system/ssadmin-system-biz/pom.xml | 7 + .../server/convert/auth/AuthConvert.java | 9 +- .../convert/permission/MenuConvert.java | 2 + .../convert/permission/RoleConvert.java | 2 + .../server/convert/user/UserConvert.java | 2 + .../server/mapper/permission/MenuMapper.java | 4 +- .../server/mapper/permission/RoleMapper.java | 2 + .../service/auth/AdminAuthServiceImpl.java | 13 +- .../service/permission/MenuServiceImpl.java | 2 +- .../src/main/resources/mappers/MenuMapper.xml | 2 +- .../auth/AdminAuthServiceImplTest.java | 341 +++++++++++++++++- ssadmin-server/ssadmin-test/pom.xml | 7 + .../test/core/ut/BaseDBUnitTest.java | 4 +- 20 files changed, 431 insertions(+), 50 deletions(-) diff --git a/sql/README.md b/sql/README.md index 7c0eb64..bcd216d 100644 --- a/sql/README.md +++ b/sql/README.md @@ -6,24 +6,24 @@ 存储用户的基本信息,包括用户名、密码、联系方式等,还有用户的状态,创建和更新信息。每个用户都有一个唯一的ID。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|------------|----------|------|----------|--------|--------| -| id | bigint | 20 | N | | 用户编码 | -| username | varchar | 64 | N | | 用户名 | -| password | varchar | 64 | N | | 密码 | -| realname | varchar | 64 | Y | | 真实姓名 | -| avatar | varchar | 256 | Y | | 头像 | -| email | varchar | 128 | Y | | 邮箱 | -| mobile | varchar | 20 | Y | | 手机号 | -| status | tinyint | 4 | N | 0 | 状态 | -| remark | varchar | 500 | Y | | 备注 | -| login_ip | varchar | | Y | | 最后登录IP | -| login_date | datetime | | Y | | 最后登录时间 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | -| creator | varchar | 64 | Y | | 创建者 | -| updater | varchar | 64 | Y | | 更新者 | -| deleted | bit | 1 | N | b'0' | 是否删除 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|------------|----------|-----|----------|--------|--------| +| id | bigint | 20 | N | | 用户编码 | +| username | varchar | 64 | N | | 用户名 | +| password | varchar | 64 | N | | 密码 | +| realname | varchar | 64 | Y | | 真实姓名 | +| avatar | varchar | 256 | Y | | 头像 | +| email | varchar | 128 | Y | | 邮箱 | +| mobile | varchar | 20 | Y | | 手机号 | +| status | tinyint | 4 | N | 0 | 状态 | +| remark | varchar | 500 | Y | | 备注 | +| login_ip | varchar | 20 | Y | | 最后登录IP | +| login_date | datetime | | Y | | 最后登录时间 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| update_time | datetime | | N | CURRENT_TIMESTAMP | 更新时间 | +| creator | varchar | 64 | Y | | 创建者 | +| updater | varchar | 64 | Y | | 更新者 | +| deleted | bit | 1 | N | b'0' | 是否删除 | ### **角色表** - `system_role` @@ -62,7 +62,7 @@ 在`system_menu`表中,`type`字段用于区分是菜单项还是按钮/权限标识。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | |-------------|----------|-----|----------|---------------------|--------------| | id | bigint | 20 | N | | 菜单ID | | parent_id | bigint | 20 | N | 0 | 父菜单ID | @@ -70,10 +70,10 @@ | path | varchar | 200 | Y | | 菜单路径 | | component | varchar | 255 | Y | | 前端组件地址 | | permission | varchar | 100 | Y | | 权限标识 | -| type | int | | N | | 菜单类型 | +| type | tinyint | 4 | N | | 菜单类型 | | sort | int | 10 | N | | 显示顺序 | | status | tinyint | 1 | N | 0 | 菜单状态 | -| remark | varchar | 500 | Y | | 备注 | +| remark | varchar | 500 | Y | | 备注 | | creator | bigint | 20 | Y | | 创建者 | | create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | | updater | bigint | 20 | Y | | 更新者 | @@ -100,18 +100,18 @@ 此表用于定义不同的字典类型,每种类型可以包含多个字典数据项。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-------------|-----------|------|----------|---------------------|--------------| -| id | bigint | 20 | N | | 类型主键ID | -| name | varchar | 100 | N | | 类型名称 | -| type | varchar | 100 | N | | 类型代码 | -| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | -| creator | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| updater | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | -| deleted | bit | 1 | N | b'0' | 是否删除 | -| remark | varchar | 255 | Y | | 备注 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-------------|-----------|-----|----------|---------------------|--------------| +| id | bigint | 20 | N | | 类型主键ID | +| name | varchar | 100 | N | | 类型名称 | +| type | varchar | 100 | N | | 类型代码 | +| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | +| remark | varchar | 500 | Y | | 备注 | ### **字典数据表** - `system_dict_data` @@ -123,7 +123,7 @@ | type_id | bigint | 20 | N | | 字典类型ID | | label | varchar | 100 | N | | 数据标签 | | value | varchar | 100 | N | | 数据值 | -| order_num | int | | N | | 排序号 | +| sort | int | | N | | 排序号 | | status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | | creator | bigint | 20 | Y | | 创建者 | | create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index f9ee15d..07483eb 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -119,7 +119,7 @@ INSERT INTO `system_user_role` (`user_id`, `role_id`) VALUES -- CREATE TABLE `system_menu` ( - `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `id` BIGINT(20) NOT NULL, `name` VARCHAR(50) NOT NULL, `permission` VARCHAR(100) DEFAULT NULL, `type` INT NOT NULL, diff --git a/ssadmin-server/pom.xml b/ssadmin-server/pom.xml index afe895c..1f8f8aa 100644 --- a/ssadmin-server/pom.xml +++ b/ssadmin-server/pom.xml @@ -21,6 +21,7 @@ ssadmin-common ssadmin-module-security + ssadmin-test diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java index 07a7bea..b4c305d 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java @@ -1,8 +1,10 @@ package edu.ssadmin.common.exception; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode(callSuper = true) public final class ServiceException extends RuntimeException { private Integer code; diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java index 07de039..59ad76a 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java @@ -5,4 +5,6 @@ import edu.ssadmin.common.pojo.AccessToken; public interface TokenService { AccessToken createAccessToken(String username,Long userId); + boolean isValidated(String token); + String getUsernameFromToken(String token); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java index 74c6682..7e03796 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java @@ -33,4 +33,10 @@ public class TokenServiceImpl implements TokenService { return token; } + public boolean isValidated(String token){ + return jwtTokenUtil.validateToken(token); + } + public String getUsernameFromToken(String token){ + return jwtTokenUtil.getUsernameFromToken(token); + } } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java index a33ea02..25ca933 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java @@ -1,9 +1,12 @@ package edu.ssadmin.server.enums.permission; +import edu.ssadmin.common.pojo.AccessToken; import lombok.AllArgsConstructor; import lombok.Getter; +import javax.validation.Valid; + /** * 菜单类型枚举类 * diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml index 011f2ec..caae154 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml @@ -45,6 +45,13 @@ compile + + org.springframework.boot + spring-boot-starter-test + test + + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java index c48e191..78521fe 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java @@ -23,7 +23,14 @@ public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); - LoginRespVO convert(AccessToken bean); + default LoginRespVO convert(AccessToken bean){ + return LoginRespVO.builder() + .userId(bean.getUserId()) + .accessToken(bean.getAccessToken()) + .refreshToken(bean.getRefreshToken()) + .expiresTime(bean.getExpiresTime()) + .build(); + } default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { return AuthPermissionInfoRespVO.builder() diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java index 1f5811a..a40ff85 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java @@ -23,6 +23,8 @@ public interface MenuConvert { MenuRespVO convert(MenuDO bean); + MenuSimpleRespVO map(MenuDO roleDO); + List convertList02(List list); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java index b5158a8..acfcb53 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java @@ -21,6 +21,8 @@ public interface RoleConvert { RoleDO convert(RoleCreateReqVO bean); + RoleSimpleRespVO map(RoleDO roleDO); + List convertList02(List list); // RoleDO convert(RoleCreateReqBO bean); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java index 5cd7bcc..24b8f6c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java @@ -27,6 +27,8 @@ public interface UserConvert { AdminUserDO convert(UserProfileUpdateReqVO bean); + UserSimpleRespVO map(AdminUserDO roleDO); + List convertList04(List list); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java index 84f7ace..ab3da4e 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java @@ -2,10 +2,12 @@ package edu.ssadmin.server.mapper.permission; import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; import edu.ssadmin.server.dataobject.permission.MenuDO; +import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; +@Mapper public interface MenuMapper { void insert(MenuDO menu); @@ -20,7 +22,7 @@ public interface MenuMapper { Long selectCountByParentId(Long parentId); - List selectList() ; + List selectListWithoutParas() ; List selectList(MenuListReqVO reqVO) ; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java index 1191329..44e5433 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java @@ -2,10 +2,12 @@ package edu.ssadmin.server.mapper.permission; import edu.ssadmin.server.dataobject.permission.RoleDO; +import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; +@Mapper public interface RoleMapper { void insert(RoleDO role); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java index af5f402..a512eec 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java @@ -29,12 +29,6 @@ public class AdminAuthServiceImpl implements AdminAuthService{ @Resource private TokenService tokenService; - @Resource - private AuthConvert authConvert; - - @Resource - private JwtTokenUtil jwtTokenUtil; - @Resource private Validator validator; @@ -58,11 +52,12 @@ public class AdminAuthServiceImpl implements AdminAuthService{ @Override public LoginRespVO refreshToken(String refreshToken) { - if (!jwtTokenUtil.validateToken(refreshToken)) { + + if (!tokenService.isValidated(refreshToken)) { throw exception(GlobalErrorCodeConstants.BAD_REQUEST); } // 获取用户名 - String username = jwtTokenUtil.getUsernameFromToken(refreshToken); + String username = tokenService.getUsernameFromToken(refreshToken); AdminUserDO user = userService.getUserByUsername(username); @@ -104,7 +99,7 @@ public class AdminAuthServiceImpl implements AdminAuthService{ AccessToken accessToken = tokenService.createAccessToken(username,userId); // 构建返回结果 - return authConvert.convert(accessToken); + return AuthConvert.INSTANCE.convert(accessToken); } void verifyCaptcha(LoginReqVO reqVO) { diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java index 3de32d0..e06aa16 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java @@ -86,7 +86,7 @@ public class MenuServiceImpl implements MenuService { @Override public List getMenuList() { - return menuMapper.selectList(); + return menuMapper.selectListWithoutParas(); } @Override diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml index 4d049f5..21919e1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml @@ -33,7 +33,7 @@ - SELECT * FROM system_menu WHERE deleted = 0 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java index 95c3ef5..0db0ce1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java @@ -1,2 +1,341 @@ -package edu.ssadmin.server.service.auth;public class AdminAuthServiceImplTest { +package edu.ssadmin.server.service.auth; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.ReflectUtil; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.server.service.user.AdminUserService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import javax.validation.ConstraintViolationException; +import javax.validation.Validation; +import javax.validation.Validator; + +import static cn.hutool.core.util.RandomUtil.randomEle; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@Import(AdminAuthServiceImpl.class) +public class AdminAuthServiceImplTest { + + @Resource + private AdminAuthServiceImpl authService; + + @MockBean + private AdminUserService userService; +// @MockBean +// private Validator validator; +// +// @BeforeEach +// public void setUp() { +// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +// // 注入一个 Validator 对象 +// ReflectUtil.setFieldValue(authService, "validator", +// Validation.buildDefaultValidatorFactory().getValidator()); +// } + +// @Test +// public void testAuthenticate_success() { +// // 准备参数 +// String username = RandomUtil.randomString(10); +// String password = RandomUtil.randomString(10); +// // mock user 数据 +// //单独pojo对象的随机生成和校验函数的实现 链式调用的实现 +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) +// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); +// when(userService.getUserByUsername(eq(username))).thenReturn(user); +// // mock password 匹配 +// when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); +// +// // 调用 +// AdminUserDO loginUser = authService.authenticate(username, password); +// // 校验 +// assertPojoEquals(user, loginUser); +// } + +// @Test +// public void testAuthenticate_userNotFound() { +// // 准备参数 +// String username = randomString(); +// String password = randomString(); +// +// // 调用, 并断言异常 +// assertServiceException(() -> authService.authenticate(username, password), +// AUTH_LOGIN_BAD_CREDENTIALS); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +// && o.getUserId() == null) +// ); +// } +// +// @Test +// public void testAuthenticate_badCredentials() { +// // 准备参数 +// String username = randomString(); +// String password = randomString(); +// // mock user 数据 +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) +// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); +// when(userService.getUserByUsername(eq(username))).thenReturn(user); +// +// // 调用, 并断言异常 +// assertServiceException(() -> authService.authenticate(username, password), +// AUTH_LOGIN_BAD_CREDENTIALS); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// } +// +// @Test +// public void testAuthenticate_userDisabled() { +// // 准备参数 +// String username = randomString(); +// String password = randomString(); +// // mock user 数据 +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) +// .setPassword(password).setStatus(CommonStatusEnum.DISABLE.getStatus())); +// when(userService.getUserByUsername(eq(username))).thenReturn(user); +// // mock password 匹配 +// when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); +// +// // 调用, 并断言异常 +// assertServiceException(() -> authService.authenticate(username, password), +// AUTH_LOGIN_USER_DISABLED); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// } +// +// @Test +// public void testLogin_success() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, o -> +// o.setUsername("test_username").setPassword("test_password") +// .setSocialType(randomEle(SocialTypeEnum.values()).getType())); +// +// // mock 验证码正确 +// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +// // mock user 数据 +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") +// .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); +// when(userService.getUserByUsername(eq("test_username"))).thenReturn(user); +// // mock password 匹配 +// when(userService.isPasswordMatch(eq("test_password"), eq(user.getPassword()))).thenReturn(true); +// // mock 缓存登录用户到 Redis +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) +// .thenReturn(accessTokenDO); +// +// // 调用,并校验 +// AuthLoginRespVO loginRespVO = authService.login(reqVO); +// assertPojoEquals(accessTokenDO, loginRespVO); +// // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( +// user.getId(), UserTypeEnum.ADMIN.getValue(), +// reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); +// } +// +// @Test +// public void testSendSmsCode() { +// // 准备参数 +// String mobile = randomString(); +// Integer scene = randomEle(SmsSceneEnum.values()).getScene(); +// AuthSmsSendReqVO reqVO = new AuthSmsSendReqVO(mobile, scene); +// // mock 方法(用户信息) +// AdminUserDO user = randomPojo(AdminUserDO.class); +// when(userService.getUserByMobile(eq(mobile))).thenReturn(user); +// +// // 调用 +// authService.sendSmsCode(reqVO); +// // 断言 +// verify(smsCodeApi).sendSmsCode(argThat(sendReqDTO -> { +// assertEquals(mobile, sendReqDTO.getMobile()); +// assertEquals(scene, sendReqDTO.getScene()); +// return true; +// })); +// } +// +// @Test +// public void testSmsLogin_success() { +// // 准备参数 +// String mobile = randomString(); +// String scene = randomString(); +// AuthSmsLoginReqVO reqVO = new AuthSmsLoginReqVO(mobile, scene); +// // mock 方法(用户信息) +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L)); +// when(userService.getUserByMobile(eq(mobile))).thenReturn(user); +// // mock 缓存登录用户到 Redis +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) +// .thenReturn(accessTokenDO); +// +// // 调用,并断言 +// AuthLoginRespVO loginRespVO = authService.smsLogin(reqVO); +// assertPojoEquals(accessTokenDO, loginRespVO); +// // 断言调用 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_MOBILE.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// } +// +// @Test +// public void testSocialLogin_success() { +// // 准备参数 +// AuthSocialLoginReqVO reqVO = randomPojo(AuthSocialLoginReqVO.class); +// // mock 方法(绑定的用户编号) +// Long userId = 1L; +// when(socialUserService.getSocialUser(eq(UserTypeEnum.ADMIN.getValue()), eq(reqVO.getType()), +// eq(reqVO.getCode()), eq(reqVO.getState()))).thenReturn(new SocialUserRespDTO(randomString(), userId)); +// // mock(用户) +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(userId)); +// when(userService.getUser(eq(userId))).thenReturn(user); +// // mock 缓存登录用户到 Redis +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) +// .thenReturn(accessTokenDO); +// +// // 调用,并断言 +// AuthLoginRespVO loginRespVO = authService.socialLogin(reqVO); +// assertPojoEquals(accessTokenDO, loginRespVO); +// // 断言调用 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_SOCIAL.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// } +// +// @Test +// public void testValidateCaptcha_successWithEnable() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// // mock 验证通过 +// when(captchaService.verification(argThat(captchaVO -> { +// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +// return true; +// }))).thenReturn(ResponseModel.success()); +// +// // 调用,无需断言 +// authService.validateCaptcha(reqVO); +// } +// +// @Test +// public void testValidateCaptcha_successWithDisable() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码关闭 +// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +// +// // 调用,无需断言 +// authService.validateCaptcha(reqVO); +// } +// +// @Test +// public void testValidateCaptcha_constraintViolationException() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class).setCaptchaVerification(null); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// +// // 调用,并断言异常 +// assertThrows(ConstraintViolationException.class, () -> authService.validateCaptcha(reqVO), +// "验证码不能为空"); +// } +// +// +// @Test +// public void testCaptcha_fail() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// // mock 验证通过 +// when(captchaService.verification(argThat(captchaVO -> { +// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +// return true; +// }))).thenReturn(ResponseModel.errorMsg("就是不对")); +// +// // 调用, 并断言异常 +// assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是不对"); +// // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) +// ); +// } +// +// @Test +// public void testRefreshToken() { +// // 准备参数 +// String refreshToken = randomString(); +// // mock 方法 +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); +// when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) +// .thenReturn(accessTokenDO); +// +// // 调用 +// AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); +// // 断言 +// assertPojoEquals(accessTokenDO, loginRespVO); +// } +// +// @Test +// public void testLogout_success() { +// // 准备参数 +// String token = randomString(); +// // mock +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); +// +// // 调用 +// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +// // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) +// ); +// // 调用,并校验 +// +// } +// +// @Test +// public void testLogout_fail() { +// // 准备参数 +// String token = randomString(); +// +// // 调用 +// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +// // 校验调用参数 +// verify(loginLogService, never()).createLoginLog(any()); +// } + } diff --git a/ssadmin-server/ssadmin-test/pom.xml b/ssadmin-server/ssadmin-test/pom.xml index 0159f29..c0a76a4 100644 --- a/ssadmin-server/ssadmin-test/pom.xml +++ b/ssadmin-server/ssadmin-test/pom.xml @@ -17,4 +17,11 @@ UTF-8 + + + org.springframework.boot + spring-boot-starter-test + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java index 8e139b8..f44d2be 100644 --- a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java @@ -1,2 +1,4 @@ -package edu.ssadmin.framework.test.core.ut;public class BaseDBTest { +package edu.ssadmin.framework.test.core.ut; + +public class BaseDBUnitTest { } -- Gitee From bc8881a657c6687d5ba148a5c9fb582f26e1d698 Mon Sep 17 00:00:00 2001 From: xyy Date: Wed, 13 Dec 2023 14:37:42 +0800 Subject: [PATCH 04/41] start ok, ready to test interface. --- docker-compose.yml | 48 +- sql/README.md | 40 +- sql/ssadmin_init.sql | 21 +- ssadmin-server/pom.xml | 1 + .../edu/ssadmin/common/pojo/CommonResult.java | 6 + .../ssadmin-module-security/pom.xml | 12 +- .../config/AuthorizeRequestsCustomizer.java | 36 + .../security/config/SecurityProperties.java | 2 + .../SsadminSecurityAutoConfiguration.java | 42 +- .../config/WebSecurityConfigurerAdapter.java | 190 ++ .../filter/TokenAuthenticationFilter.java | 2 +- .../handler/AccessDeniedHandlerImpl.java | 40 + .../handler/AuthenticationEntryPointImpl.java | 34 + .../service/SecurityFrameworkServiceImpl.java | 2 + ssadmin-server/ssadmin-module-web/pom.xml | 20 + .../config/SsadminWebAutoConfiguration.java | 46 + .../edu/ssadmin/web/config/WebProperties.java | 66 + .../core/handler/GlobalExceptionHandler.java | 230 +++ .../web/core/utils/WebFrameworkUtils.java | 126 ++ .../ssadmin/server/api/user/AdminUserApi.java | 33 + .../resources/mappers/AdminUserMapper.xml | 8 +- .../edu/ssadmin/server/ServerApplication.java | 4 +- .../server/api/user/AdminUserApiImpl.java | 22 + .../admin/auth/AdminAuthController.java | 2 + .../auth/vo/AuthPermissionInfoRespVO.java | 2 + .../controller/admin/auth/vo/LoginReqVO.java | 20 +- .../admin/permission/vo/menu/MenuBaseVO.java | 3 + .../controller/admin/user/UserController.java | 9 + .../admin/user/vo/user/UserBaseVO.java | 4 +- .../admin/user/vo/user/UserListRespVO.java | 23 + .../server/convert/user/UserConvert.java | 9 +- .../server/dataobject/permission/MenuDO.java | 6 + .../server/dataobject/user/AdminUserDO.java | 4 +- .../mapper/permission/RoleMenuMapper.java | 2 +- .../server/mapper/user/AdminUserMapper.java | 3 + .../service/auth/AdminAuthServiceImpl.java | 2 +- .../service/permission/MenuServiceImpl.java | 1 + .../permission/PermissionServiceImpl.java | 2 +- .../server/service/user/AdminUserService.java | 15 + .../service/user/AdminUserServiceImpl.java | 28 +- .../resources/mappers/AdminUserMapper.xml | 20 +- .../src/main/resources/mappers/MenuMapper.xml | 10 +- .../src/main/resources/mappers/RoleMapper.xml | 4 +- .../main/resources/mappers/RoleMenuMapper.xml | 2 +- ssadmin-web/src/api/login.js | 26 + ssadmin-web/src/api/system/permission.js | 44 + ssadmin-web/src/api/system/role.js | 75 + ssadmin-web/src/api/system/user.js | 110 ++ ssadmin-web/src/assets/images/profile.jpg | Bin 0 -> 7885 bytes ssadmin-web/src/assets/index.scss | 191 ++ ssadmin-web/src/directive/index.js | 16 + .../src/directive/permission/hasPermi.js | 27 + .../src/directive/permission/hasRole.js | 28 + ssadmin-web/src/layout/index.vue | 4 + ssadmin-web/src/main.js | 6 +- ssadmin-web/src/permission.js | 30 +- ssadmin-web/src/plugins/auth.js | 60 + ssadmin-web/src/plugins/index.js | 11 + ssadmin-web/src/plugins/modal.js | 83 + ssadmin-web/src/router/index.js | 10 + ssadmin-web/src/store/getters.js | 16 + ssadmin-web/src/store/index.js | 20 +- ssadmin-web/src/store/modules/permission.js | 1 + ssadmin-web/src/store/modules/user.js | 106 ++ ssadmin-web/src/utils/common.js | 9 + ssadmin-web/src/utils/constants.js | 24 + ssadmin-web/src/views/Login.vue | 21 +- ssadmin-web/src/views/system/user/index.vue | 354 ++++ .../src/views/system/user/profile/index.vue | 13 + ssadmin-web/yarn.lock | 1599 ++++++++--------- 70 files changed, 3140 insertions(+), 946 deletions(-) create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java create mode 100644 ssadmin-server/ssadmin-module-web/pom.xml create mode 100644 ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java create mode 100644 ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java create mode 100644 ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java create mode 100644 ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java create mode 100644 ssadmin-web/src/api/system/permission.js create mode 100644 ssadmin-web/src/api/system/role.js create mode 100644 ssadmin-web/src/api/system/user.js create mode 100755 ssadmin-web/src/assets/images/profile.jpg create mode 100644 ssadmin-web/src/assets/index.scss create mode 100644 ssadmin-web/src/directive/index.js create mode 100644 ssadmin-web/src/directive/permission/hasPermi.js create mode 100644 ssadmin-web/src/directive/permission/hasRole.js create mode 100644 ssadmin-web/src/plugins/auth.js create mode 100644 ssadmin-web/src/plugins/index.js create mode 100644 ssadmin-web/src/plugins/modal.js create mode 100644 ssadmin-web/src/store/getters.js create mode 100644 ssadmin-web/src/store/modules/permission.js create mode 100644 ssadmin-web/src/store/modules/user.js create mode 100644 ssadmin-web/src/utils/common.js create mode 100644 ssadmin-web/src/utils/constants.js create mode 100644 ssadmin-web/src/views/system/user/index.vue create mode 100644 ssadmin-web/src/views/system/user/profile/index.vue diff --git a/docker-compose.yml b/docker-compose.yml index aaffd7b..b82244d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,14 +15,14 @@ services: - mysql:/var/lib/mysql/ - ./sql/ssadmin_init.sql:/docker-entrypoint-initdb.d/ssadmin_init.sql:ro - redis: - container_name: ssadmin-redis - image: redis:6-alpine - restart: unless-stopped - ports: - - "6379:6379" - volumes: - - redis:/data +# redis: +# container_name: ssadmin-redis +# image: redis:6-alpine +# restart: unless-stopped +# ports: +# - "6379:6379" +# volumes: +# - redis:/data server: container_name: ssadmin-server @@ -49,23 +49,23 @@ services: - mysql - redis - web: - container_name: ssadmin-web - build: - context: ./ssadmin-web - args: - NODE_ENV: - ENV=${NODE_ENV:-production} - VUE_APP_TITLE=${VUE_APP_TITLE:-SSADMIN管理系统} - image: ssadmin-web - restart: unless-stopped - ports: - - "80:80" - depends_on: - - server +# web: +# container_name: ssadmin-web +# build: +# context: ./ssadmin-web +# args: +# NODE_ENV: +# ENV=${NODE_ENV:-production} +# VUE_APP_TITLE=${VUE_APP_TITLE:-SSADMIN管理系统} +# image: ssadmin-web +# restart: unless-stopped +# ports: +# - "80:80" +# depends_on: +# - server volumes: mysql: driver: local - redis: - driver: local +# redis: +# driver: local diff --git a/sql/README.md b/sql/README.md index bcd216d..5177102 100644 --- a/sql/README.md +++ b/sql/README.md @@ -11,7 +11,7 @@ | id | bigint | 20 | N | | 用户编码 | | username | varchar | 64 | N | | 用户名 | | password | varchar | 64 | N | | 密码 | -| realname | varchar | 64 | Y | | 真实姓名 | +| nickname | varchar | 64 | Y | | 用户昵称 | | avatar | varchar | 256 | Y | | 头像 | | email | varchar | 128 | Y | | 邮箱 | | mobile | varchar | 20 | Y | | 手机号 | @@ -62,23 +62,24 @@ 在`system_menu`表中,`type`字段用于区分是菜单项还是按钮/权限标识。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-------------|----------|-----|----------|---------------------|--------------| -| id | bigint | 20 | N | | 菜单ID | -| parent_id | bigint | 20 | N | 0 | 父菜单ID | -| name | varchar | 50 | N | | 菜单名称 | -| path | varchar | 200 | Y | | 菜单路径 | -| component | varchar | 255 | Y | | 前端组件地址 | -| permission | varchar | 100 | Y | | 权限标识 | -| type | tinyint | 4 | N | | 菜单类型 | -| sort | int | 10 | N | | 显示顺序 | -| status | tinyint | 1 | N | 0 | 菜单状态 | -| remark | varchar | 500 | Y | | 备注 | -| creator | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| updater | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | -| deleted | bit | 1 | Y | b'0' | 是否删除 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|----------------|----------|-----|----------|---------------------|--------| +| id | bigint | 20 | N | | 菜单ID | +| parent_id | bigint | 20 | N | 0 | 父菜单ID | +| name | varchar | 50 | N | | 菜单名称 | +| path | varchar | 200 | Y | | 菜单路径 | +| component | varchar | 255 | Y | | 前端组件地址 | +| component_name | varchar | 255 | Y | | 前端组件名 | +| permission | varchar | 100 | Y | | 权限标识 | +| type | tinyint | 4 | N | | 菜单类型 | +| sort | int | 10 | N | | 显示顺序 | +| status | tinyint | 1 | N | 0 | 菜单状态 | +| remark | varchar | 500 | Y | | 备注 | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | Y | b'0' | 是否删除 | ### **角色权限表** - `system_role_menu` @@ -190,7 +191,7 @@ CREATE TABLE `system_users` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, - `realname` varchar(255) DEFAULT NULL, + `nickname` varchar(255) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAULT NULL, @@ -246,6 +247,7 @@ CREATE TABLE `system_menu` ( `name` VARCHAR(50) NOT NULL, `path` VARCHAR(200) DEFAULT NULL, `component` VARCHAR(255) DEFAULT NULL, + `component_name` VARCHAR(255) DEFAULT NULL, `permission` VARCHAR(100) DEFAULT NULL, `type` INT NOT NULL, `sort` int(10) NOT NULL, diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index 07483eb..8a7cf12 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -34,7 +34,7 @@ CREATE TABLE `system_users` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, - `realname` varchar(255) DEFAULT NULL, + `nickname` varchar(255) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAULT NULL, @@ -55,7 +55,7 @@ CREATE TABLE `system_users` ( -- 转存用户表的初始数据 `system_users` -- -INSERT INTO `system_users` (`username`, `password`, `realname`) VALUES +INSERT INTO `system_users` (`username`, `password`, `nickname`) VALUES ('sysadmin', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'zhang'), ('user', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'wang'); @@ -127,6 +127,7 @@ CREATE TABLE `system_menu` ( `parent_id` BIGINT(20) NOT NULL DEFAULT '0', `path` VARCHAR(200) DEFAULT NULL, `component` VARCHAR(255) DEFAULT NULL, + `component_name` VARCHAR(255) DEFAULT NULL, `status` TINYINT(4) NOT NULL DEFAULT '0', `remark` VARCHAR(500) DEFAULT NULL, `creator` VARCHAR(64) DEFAULT NULL, @@ -141,11 +142,11 @@ CREATE TABLE `system_menu` ( -- 转存角色表的初始数据 `system_menu` -- -INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`) VALUES - (1,'系统管理', '',1,1,0,'/system',null), - (2,'用户管理', 'system:user:list',2,1,1,'user','system/user/index'), - (3,'角色管理', 'system:role:list',2,2,1,'role','system/role/index'), - (4,'菜单管理', 'system:menu:list',2,3,1,'menu','system/menu/index'), +INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`,`component_name`) VALUES + (1,'系统管理', '',1,1,0,'/system',null,null), + (2,'用户管理', '',2,1,1,'user','system/user/index','SystemUser'), + (3,'角色管理', '',2,2,1,'role','system/role/index','SystemRole'), + (4,'菜单管理', '',2,3,1,'menu','system/menu/index','SystemMenu'), (5,'用户新增', 'system:user:create',3,1,2,'',''), (6,'用户删除', 'system:user:delete',3,2,2,'',''), (7,'用户修改', 'system:user:update',3,3,2,'',''), @@ -161,6 +162,12 @@ INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, ` (17,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'',''), (18,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'',''); +-- +-- 使用表AUTO_INCREMENT `system_users` +-- +ALTER TABLE `system_menu` + MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19; +COMMIT; -- -- 角色菜单关联表的结构 `system_role_menu` diff --git a/ssadmin-server/pom.xml b/ssadmin-server/pom.xml index 1f8f8aa..1a300e6 100644 --- a/ssadmin-server/pom.xml +++ b/ssadmin-server/pom.xml @@ -22,6 +22,7 @@ ssadmin-module-security ssadmin-test + ssadmin-module-web diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java index b643298..79b84c9 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java @@ -1,5 +1,6 @@ package edu.ssadmin.common.pojo; +import edu.ssadmin.common.exception.ErrorCode; import lombok.Data; import java.io.Serializable; @@ -26,4 +27,9 @@ public class CommonResult implements Serializable { result.msg = message; return result; } + + public static CommonResult error(ErrorCode errorCode) { + return error(errorCode.getCode(), errorCode.getMsg()); + } + } diff --git a/ssadmin-server/ssadmin-module-security/pom.xml b/ssadmin-server/ssadmin-module-security/pom.xml index e79e121..aee4bcb 100644 --- a/ssadmin-server/ssadmin-module-security/pom.xml +++ b/ssadmin-server/ssadmin-module-security/pom.xml @@ -39,11 +39,21 @@ jbcrypt 0.4 + + + org.springframework.boot + spring-boot-configuration-processor + true + org.springframework.boot spring-boot-starter-security + + edu.ssadmin + ssadmin-module-web + - + diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java new file mode 100644 index 0000000..81027f6 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java @@ -0,0 +1,36 @@ +package edu.ssadmin.security.config; + +import edu.ssadmin.web.config.WebProperties; +import org.springframework.core.Ordered; +import org.springframework.security.config.Customizer; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +import javax.annotation.Resource; + +/** + * 自定义的 URL 的安全配置 + * 目的:每个 Maven Module 可以自定义规则! + * + * @author 芋道源码 + */ +public abstract class AuthorizeRequestsCustomizer + implements Customizer.ExpressionInterceptUrlRegistry>, Ordered { + + @Resource + private WebProperties webProperties; + + protected String buildAdminApi(String url) { + return webProperties.getAdminApi().getPrefix() + url; + } + + protected String buildAppApi(String url) { + return webProperties.getAppApi().getPrefix() + url; + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java index 3aaa1a6..1720793 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java @@ -1,5 +1,6 @@ package edu.ssadmin.security.config; import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; @@ -7,6 +8,7 @@ import javax.validation.constraints.NotNull; import java.util.Collections; import java.util.List; +@ConfigurationProperties(prefix = "ssadmin.security") @Validated @Data public class SecurityProperties { diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java index f2ab52f..8d59524 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java @@ -1,14 +1,18 @@ package edu.ssadmin.security.config; -import edu.ssadmin.common.handler.GlobalExceptionHandler; import edu.ssadmin.security.filter.TokenAuthenticationFilter; +import edu.ssadmin.security.handler.AccessDeniedHandlerImpl; +import edu.ssadmin.security.handler.AuthenticationEntryPointImpl; import edu.ssadmin.security.service.SecurityFrameworkService; import edu.ssadmin.security.service.SecurityFrameworkServiceImpl; import edu.ssadmin.server.api.permission.PermissionApi; +import edu.ssadmin.web.core.handler.GlobalExceptionHandler; import org.springframework.beans.factory.config.MethodInvokingFactoryBean; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; @@ -25,9 +29,12 @@ import javax.annotation.Resource; * * @author 芋道源码 */ -@AutoConfiguration +@Configuration @EnableConfigurationProperties(SecurityProperties.class) public class SsadminSecurityAutoConfiguration { +// static { +// System.out.println("auto configuration ok"); +// } @Resource private SecurityProperties securityProperties; @@ -40,21 +47,21 @@ public class SsadminSecurityAutoConfiguration { // return new PreAuthenticatedAspect(); // } // -// /** -// * 认证失败处理类 Bean -// */ -// @Bean -// public AuthenticationEntryPoint authenticationEntryPoint() { -// return new AuthenticationEntryPointImpl(); -// } -// -// /** -// * 权限不够处理器 Bean -// */ -// @Bean -// public AccessDeniedHandler accessDeniedHandler() { -// return new AccessDeniedHandlerImpl(); -// } + /** + * 认证失败处理类 Bean + */ + @Bean + public AuthenticationEntryPoint authenticationEntryPoint() { + return new AuthenticationEntryPointImpl(); + } + + /** + * 权限不够处理器 Bean + */ + @Bean + public AccessDeniedHandler accessDeniedHandler() { + return new AccessDeniedHandlerImpl(); + } /** * Spring Security 加密器 @@ -64,6 +71,7 @@ public class SsadminSecurityAutoConfiguration { */ @Bean public PasswordEncoder passwordEncoder() { + System.out.println("password bean ok"); return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength()); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java new file mode 100644 index 0000000..fb74967 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java @@ -0,0 +1,190 @@ +package edu.ssadmin.security.config; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import edu.ssadmin.security.filter.TokenAuthenticationFilter; +import edu.ssadmin.web.config.WebProperties; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import javax.annotation.Resource; +import javax.annotation.security.PermitAll; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 自定义的 Spring Security 配置适配器实现 + * + * @author 芋道源码 + */ +@AutoConfiguration +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +// @EnableWebSecurity //应对 Could not autowire. No beans of 'HttpSecurity' type found. +public class WebSecurityConfigurerAdapter { + + @Resource + private WebProperties webProperties; + @Resource + private SecurityProperties securityProperties; + + /** + * 认证失败处理类 Bean + */ + @Resource + private AuthenticationEntryPoint authenticationEntryPoint; + /** + * 权限不够处理器 Bean + */ + @Resource + private AccessDeniedHandler accessDeniedHandler; + /** + * Token 认证过滤器 Bean + */ + @Resource + private TokenAuthenticationFilter authenticationTokenFilter; + +// /** +// * 自定义的权限映射 Bean 们 +// * +// * @see #filterChain(HttpSecurity) +// */ +// @Resource +// private List authorizeRequestsCustomizers; + + @Resource + private ApplicationContext applicationContext; + + /** + * 由于 Spring Security 创建 AuthenticationManager 对象时,没声明 @Bean 注解,导致无法被注入 + * 通过覆写父类的该方法,添加 @Bean 注解,解决该问题 + */ + @Bean + public AuthenticationManager authenticationManagerBean(AuthenticationConfiguration authenticationConfiguration) throws Exception { + return authenticationConfiguration.getAuthenticationManager(); + } + + /** + * 配置 URL 的安全配置 + * + * anyRequest | 匹配所有请求路径 + * access | SpringEl表达式结果为true时可以访问 + * anonymous | 匿名可以访问 + * denyAll | 用户不能访问 + * fullyAuthenticated | 用户完全认证可以访问(非remember-me下自动登录) + * hasAnyAuthority | 如果有参数,参数表示权限,则其中任何一个权限可以访问 + * hasAnyRole | 如果有参数,参数表示角色,则其中任何一个角色可以访问 + * hasAuthority | 如果有参数,参数表示权限,则其权限可以访问 + * hasIpAddress | 如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问 + * hasRole | 如果有参数,参数表示角色,则其角色可以访问 + * permitAll | 用户可以任意访问 + * rememberMe | 允许通过remember-me登录的用户访问 + * authenticated | 用户登录后可访问 + */ + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { + // 登出 + httpSecurity + // 开启跨域 + .cors().and() + // CSRF 禁用,因为不使用 Session + .csrf().disable() + // 基于 token 机制,所以不需要 Session + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + .headers().frameOptions().disable().and() + // 一堆自定义的 Spring Security 处理器 + .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint) + .accessDeniedHandler(accessDeniedHandler); + // 登录、登录暂时不使用 Spring Security 的拓展点,主要考虑一方面拓展多用户、多种登录方式相对复杂,一方面用户的学习成本较高 + + // 获得 @PermitAll 带来的 URL 列表,免登录 + Multimap permitAllUrls = getPermitAllUrlsFromAnnotations(); + // 设置每个请求的权限 + httpSecurity + // ①:全局共享规则 + .authorizeRequests() + // 1.1 静态资源,可匿名访问 + .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js").permitAll() + // 1.2 设置 @PermitAll 无需认证 + .antMatchers(HttpMethod.GET, permitAllUrls.get(HttpMethod.GET).toArray(new String[0])).permitAll() + .antMatchers(HttpMethod.POST, permitAllUrls.get(HttpMethod.POST).toArray(new String[0])).permitAll() + .antMatchers(HttpMethod.PUT, permitAllUrls.get(HttpMethod.PUT).toArray(new String[0])).permitAll() + .antMatchers(HttpMethod.DELETE, permitAllUrls.get(HttpMethod.DELETE).toArray(new String[0])).permitAll() + // 1.3 基于 yudao.security.permit-all-urls 无需认证 + .antMatchers(securityProperties.getPermitAllUrls().toArray(new String[0])).permitAll() + // 1.4 设置 App API 无需认证 + .antMatchers(buildAppApi("/**")).permitAll() + // 1.5 验证码captcha 允许匿名访问 + .antMatchers("/captcha/get", "/captcha/check").permitAll() + // 1.6 webSocket 允许匿名访问 + .antMatchers("/websocket/message").permitAll() +// // ②:每个项目的自定义规则 +// .and().authorizeRequests(registry -> // 下面,循环设置自定义规则 +// authorizeRequestsCustomizers.forEach(customizer -> customizer.customize(registry))) + // ③:兜底规则,必须认证 +// .authorizeRequests() + .anyRequest().authenticated() + ; + + // 添加 Token Filter + httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); + return httpSecurity.build(); + } + + private String buildAppApi(String url) { + return webProperties.getAppApi().getPrefix() + url; + } + + private Multimap getPermitAllUrlsFromAnnotations() { + Multimap result = HashMultimap.create(); + // 获得接口对应的 HandlerMethod 集合 + RequestMappingHandlerMapping requestMappingHandlerMapping = (RequestMappingHandlerMapping) + applicationContext.getBean("requestMappingHandlerMapping"); + Map handlerMethodMap = requestMappingHandlerMapping.getHandlerMethods(); + // 获得有 @PermitAll 注解的接口 + for (Map.Entry entry : handlerMethodMap.entrySet()) { + HandlerMethod handlerMethod = entry.getValue(); + if (!handlerMethod.hasMethodAnnotation(PermitAll.class)) { + continue; + } + if (entry.getKey().getPatternsCondition() == null) { + continue; + } + Set urls = entry.getKey().getPatternsCondition().getPatterns(); + // 根据请求方法,添加到 result 结果 + entry.getKey().getMethodsCondition().getMethods().forEach(requestMethod -> { + switch (requestMethod) { + case GET: + result.putAll(HttpMethod.GET, urls); + break; + case POST: + result.putAll(HttpMethod.POST, urls); + break; + case PUT: + result.putAll(HttpMethod.PUT, urls); + break; + case DELETE: + result.putAll(HttpMethod.DELETE, urls); + break; + } + }); + } + return result; + } + +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java index 59a8073..8f915e7 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -2,12 +2,12 @@ package edu.ssadmin.security.filter; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import edu.ssadmin.common.handler.GlobalExceptionHandler; import edu.ssadmin.common.pojo.CommonResult; import edu.ssadmin.common.utils.ServletUtils; import edu.ssadmin.security.config.SecurityProperties; import edu.ssadmin.security.util.JwtTokenUtil; import edu.ssadmin.security.util.SecurityFrameworkUtils; +import edu.ssadmin.web.core.handler.GlobalExceptionHandler; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.AccessDeniedException; diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java new file mode 100644 index 0000000..40aa584 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java @@ -0,0 +1,40 @@ +package edu.ssadmin.security.handler; + +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.common.utils.ServletUtils; +import edu.ssadmin.security.util.SecurityFrameworkUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.access.ExceptionTranslationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static edu.ssadmin.common.exception.GlobalErrorCodeConstants.FORBIDDEN; + +/** + * 访问一个需要认证的 URL 资源,已经认证(登录)但是没有权限的情况下,返回 {@link GlobalErrorCodeConstants#FORBIDDEN} 错误码。 + * + * 补充:Spring Security 通过 {@link ExceptionTranslationFilter#handleAccessDeniedException(HttpServletRequest, HttpServletResponse, FilterChain, AccessDeniedException)} 方法,调用当前类 + * + * @author 芋道源码 + */ +@Slf4j +@SuppressWarnings("JavadocReference") +public class AccessDeniedHandlerImpl implements AccessDeniedHandler { + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) + throws IOException, ServletException { + // 打印 warn 的原因是,不定期合并 warn,看看有没恶意破坏 + log.warn("[commence][访问 URL({}) 时,用户({}) 权限不够]", request.getRequestURI(), + SecurityFrameworkUtils.getUserName(), e); + // 返回 403 + ServletUtils.writeJSON(response, CommonResult.error(FORBIDDEN)); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000..81bd0dc --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java @@ -0,0 +1,34 @@ +package edu.ssadmin.security.handler; + +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.common.utils.ServletUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.security.web.access.ExceptionTranslationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import static edu.ssadmin.common.exception.GlobalErrorCodeConstants.UNAUTHORIZED; + +/** + * 访问一个需要认证的 URL 资源,但是此时自己尚未认证(登录)的情况下,返回 {@link GlobalErrorCodeConstants#UNAUTHORIZED} 错误码,从而使前端重定向到登录页 + * + * 补充:Spring Security 通过 {@link ExceptionTranslationFilter#sendStartAuthentication(HttpServletRequest, HttpServletResponse, FilterChain, AuthenticationException)} 方法,调用当前类 + * + * @author ruoyi + */ +@Slf4j +@SuppressWarnings("JavadocReference") // 忽略文档引用报错 +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { + log.debug("[commence][访问 URL({}) 时,没有登录]", request.getRequestURI(), e); + // 返回 401 + ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); + } + +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java index 2c6efef..aab6d6b 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java @@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil; import lombok.AllArgsConstructor; import edu.ssadmin.server.api.permission.PermissionApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; import javax.annotation.Resource; diff --git a/ssadmin-server/ssadmin-module-web/pom.xml b/ssadmin-server/ssadmin-module-web/pom.xml new file mode 100644 index 0000000..c5ff38b --- /dev/null +++ b/ssadmin-server/ssadmin-module-web/pom.xml @@ -0,0 +1,20 @@ + + + + ssadmin-parrent-server + edu.ssadmin + 1.0 + + 4.0.0 + + ssadmin-module-web + + + 18 + 18 + UTF-8 + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java new file mode 100644 index 0000000..b3d7423 --- /dev/null +++ b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java @@ -0,0 +1,46 @@ +package edu.ssadmin.web.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.AntPathMatcher; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.annotation.Resource; +import javax.servlet.Filter; + +@Configuration +@EnableConfigurationProperties(WebProperties.class) +public class SsadminWebAutoConfiguration implements WebMvcConfigurer { + + @Resource + private WebProperties webProperties; + /** + * 应用名 + */ + @Value("${spring.application.name}") + private String applicationName; + + @Override + public void configurePathMatch(PathMatchConfigurer configurer) { + configurePathMatch(configurer, webProperties.getAdminApi()); + configurePathMatch(configurer, webProperties.getAppApi()); + } + + /** + * 设置 API 前缀,仅仅匹配 controller 包下的 + * + * @param configurer 配置 + * @param api API 配置 + */ + private void configurePathMatch(PathMatchConfigurer configurer, WebProperties.Api api) { + AntPathMatcher antPathMatcher = new AntPathMatcher("."); + configurer.addPathPrefix(api.getPrefix(), clazz -> clazz.isAnnotationPresent(RestController.class) + && antPathMatcher.match(api.getController(), clazz.getPackage().getName())); // 仅仅匹配 controller 包 + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java new file mode 100644 index 0000000..6011e77 --- /dev/null +++ b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java @@ -0,0 +1,66 @@ +package edu.ssadmin.web.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@ConfigurationProperties(prefix = "ssadmin.web") +@Validated +@Data +public class WebProperties { + + @NotNull(message = "APP API 不能为空") + private Api appApi = new Api("/app-api", "**.controller.app.**"); + @NotNull(message = "Admin API 不能为空") + private Api adminApi = new Api("/admin-api", "**.controller.admin.**"); + +// @NotNull(message = "Admin UI 不能为空") +// private Ui adminUi; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Valid + public static class Api { + + /** + * API 前缀,实现所有 Controller 提供的 RESTFul API 的统一前缀 + * + * + * 意义:通过该前缀,避免 Swagger、Actuator 意外通过 Nginx 暴露出来给外部,带来安全性问题 + * 这样,Nginx 只需要配置转发到 /api/* 的所有接口即可。 + * + * @see SsadminWebAutoConfiguration#configurePathMatch(PathMatchConfigurer) + */ + @NotEmpty(message = "API 前缀不能为空") + private String prefix; + + /** + * Controller 所在包的 Ant 路径规则 + * + * 主要目的是,给该 Controller 设置指定的 {@link #prefix} + */ + @NotEmpty(message = "Controller 所在包不能为空") + private String controller; + + } + + @Data + @Valid + public static class Ui { + + /** + * 访问地址 + */ + private String url; + + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java new file mode 100644 index 0000000..ddbee6b --- /dev/null +++ b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java @@ -0,0 +1,230 @@ +package edu.ssadmin.web.core.handler; + +import cn.hutool.core.exceptions.ExceptionUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import edu.ssadmin.common.exception.ServiceException; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.web.core.utils.WebFrameworkUtils; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; +import org.springframework.validation.BindException; +import org.springframework.validation.FieldError; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import org.springframework.web.servlet.NoHandlerFoundException; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.ValidationException; +import java.nio.file.AccessDeniedException; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.Objects; + +import static edu.ssadmin.common.exception.GlobalErrorCodeConstants.*; + +/** + * 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号 + * + * @author 芋道源码 + */ +@RestControllerAdvice +@AllArgsConstructor +@Slf4j +public class GlobalExceptionHandler { + + + /** + * 处理所有异常,主要是提供给 Filter 使用 + * 因为 Filter 不走 SpringMVC 的流程,但是我们又需要兜底处理异常,所以这里提供一个全量的异常处理过程,保持逻辑统一。 + * + * @param request 请求 + * @param ex 异常 + * @return 通用返回 + */ + public CommonResult allExceptionHandler(HttpServletRequest request, Throwable ex) { + if (ex instanceof MissingServletRequestParameterException) { + return missingServletRequestParameterExceptionHandler((MissingServletRequestParameterException) ex); + } + if (ex instanceof MethodArgumentTypeMismatchException) { + return methodArgumentTypeMismatchExceptionHandler((MethodArgumentTypeMismatchException) ex); + } + if (ex instanceof MethodArgumentNotValidException) { + return methodArgumentNotValidExceptionExceptionHandler((MethodArgumentNotValidException) ex); + } + if (ex instanceof BindException) { + return bindExceptionHandler((BindException) ex); + } + if (ex instanceof ConstraintViolationException) { + return constraintViolationExceptionHandler((ConstraintViolationException) ex); + } + if (ex instanceof ValidationException) { + return validationException((ValidationException) ex); + } + if (ex instanceof NoHandlerFoundException) { + return noHandlerFoundExceptionHandler(request, (NoHandlerFoundException) ex); + } + if (ex instanceof HttpRequestMethodNotSupportedException) { + return httpRequestMethodNotSupportedExceptionHandler((HttpRequestMethodNotSupportedException) ex); + } + if (ex instanceof ServiceException) { + return serviceExceptionHandler((ServiceException) ex); + } + if (ex instanceof AccessDeniedException) { + return accessDeniedExceptionHandler(request, (AccessDeniedException) ex); + } + return defaultExceptionHandler(request, ex); + } + + /** + * 处理 SpringMVC 请求参数缺失 + * + * 例如说,接口上设置了 @RequestParam("xx") 参数,结果并未传递 xx 参数 + */ + @ExceptionHandler(value = MissingServletRequestParameterException.class) + public CommonResult missingServletRequestParameterExceptionHandler(MissingServletRequestParameterException ex) { + log.warn("[missingServletRequestParameterExceptionHandler]", ex); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数缺失:%s", ex.getParameterName())); + } + + /** + * 处理 SpringMVC 请求参数类型错误 + * + * 例如说,接口上设置了 @RequestParam("xx") 参数为 Integer,结果传递 xx 参数类型为 String + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public CommonResult methodArgumentTypeMismatchExceptionHandler(MethodArgumentTypeMismatchException ex) { + log.warn("[missingServletRequestParameterExceptionHandler]", ex); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数类型错误:%s", ex.getMessage())); + } + + /** + * 处理 SpringMVC 参数校验不正确 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public CommonResult methodArgumentNotValidExceptionExceptionHandler(MethodArgumentNotValidException ex) { + log.warn("[methodArgumentNotValidExceptionExceptionHandler]", ex); + FieldError fieldError = ex.getBindingResult().getFieldError(); + assert fieldError != null; // 断言,避免告警 + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())); + } + + /** + * 处理 SpringMVC 参数绑定不正确,本质上也是通过 Validator 校验 + */ + @ExceptionHandler(BindException.class) + public CommonResult bindExceptionHandler(BindException ex) { + log.warn("[handleBindException]", ex); + FieldError fieldError = ex.getFieldError(); + assert fieldError != null; // 断言,避免告警 + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", fieldError.getDefaultMessage())); + } + + /** + * 处理 Validator 校验不通过产生的异常 + */ + @ExceptionHandler(value = ConstraintViolationException.class) + public CommonResult constraintViolationExceptionHandler(ConstraintViolationException ex) { + log.warn("[constraintViolationExceptionHandler]", ex); + ConstraintViolation constraintViolation = ex.getConstraintViolations().iterator().next(); + return CommonResult.error(BAD_REQUEST.getCode(), String.format("请求参数不正确:%s", constraintViolation.getMessage())); + } + + /** + * 处理 Dubbo Consumer 本地参数校验时,抛出的 ValidationException 异常 + */ + @ExceptionHandler(value = ValidationException.class) + public CommonResult validationException(ValidationException ex) { + log.warn("[constraintViolationExceptionHandler]", ex); + // 无法拼接明细的错误信息,因为 Dubbo Consumer 抛出 ValidationException 异常时,是直接的字符串信息,且人类不可读 + return CommonResult.error(BAD_REQUEST); + } + + /** + * 处理 SpringMVC 请求地址不存在 + * + * 注意,它需要设置如下两个配置项: + * 1. spring.mvc.throw-exception-if-no-handler-found 为 true + * 2. spring.mvc.static-path-pattern 为 /statics/** + */ + @ExceptionHandler(NoHandlerFoundException.class) + public CommonResult noHandlerFoundExceptionHandler(HttpServletRequest req, NoHandlerFoundException ex) { + log.warn("[noHandlerFoundExceptionHandler]", ex); + return CommonResult.error(NOT_FOUND.getCode(), String.format("请求地址不存在:%s", ex.getRequestURL())); + } + + /** + * 处理 SpringMVC 请求方法不正确 + * + * 例如说,A 接口的方法为 GET 方式,结果请求方法为 POST 方式,导致不匹配 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public CommonResult httpRequestMethodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException ex) { + log.warn("[httpRequestMethodNotSupportedExceptionHandler]", ex); + return CommonResult.error(METHOD_NOT_ALLOWED.getCode(), String.format("请求方法不正确:%s", ex.getMessage())); + } + + /** + * 处理 Resilience4j 限流抛出的异常 + */ + public CommonResult requestNotPermittedExceptionHandler(HttpServletRequest req, Throwable ex) { + log.warn("[requestNotPermittedExceptionHandler][url({}) 访问过于频繁]", req.getRequestURL(), ex); + return CommonResult.error(TOO_MANY_REQUESTS); + } + + /** + * 处理 Spring Security 权限不足的异常 + * + * 来源是,使用 @PreAuthorize 注解,AOP 进行权限拦截 + */ + @ExceptionHandler(value = AccessDeniedException.class) + public CommonResult accessDeniedExceptionHandler(HttpServletRequest req, AccessDeniedException ex) { + log.warn("[accessDeniedExceptionHandler][userId({}) 无法访问 url({})]", WebFrameworkUtils.getLoginUserId(req), + req.getRequestURL(), ex); + return CommonResult.error(FORBIDDEN); + } + + /** + * 处理业务异常 ServiceException + * + * 例如说,商品库存不足,用户手机号已存在。 + */ + @ExceptionHandler(value = ServiceException.class) + public CommonResult serviceExceptionHandler(ServiceException ex) { + log.info("[serviceExceptionHandler]", ex); + return CommonResult.error(ex.getCode(), ex.getMessage()); + } + + /** + * 处理系统异常,兜底处理所有的一切 + */ + @ExceptionHandler(value = Exception.class) + public CommonResult defaultExceptionHandler(HttpServletRequest req, Throwable ex) { + // 情况一:处理表不存在的异常 +// CommonResult tableNotExistsResult = handleTableNotExists(ex); +// if (tableNotExistsResult != null) { +// return tableNotExistsResult; +// } + + // 情况二:部分特殊的库的处理 + if (Objects.equals("io.github.resilience4j.ratelimiter.RequestNotPermitted", ex.getClass().getName())) { + return requestNotPermittedExceptionHandler(req, ex); + } + + // 情况三:处理异常 + log.error("[defaultExceptionHandler]", ex); + // 插入异常日志 + //this.createExceptionLog(req, ex); + // 返回 ERROR CommonResult + return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg()); + } + + +} diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java new file mode 100644 index 0000000..3e3a0a6 --- /dev/null +++ b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java @@ -0,0 +1,126 @@ +package edu.ssadmin.web.core.utils; + +import cn.hutool.core.util.NumberUtil; +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.web.config.WebProperties; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; + +/** + * 专属于 web 包的工具类 + * + * @author 芋道源码 + */ +public class WebFrameworkUtils { + + private static final String REQUEST_ATTRIBUTE_LOGIN_USER_ID = "login_user_id"; + private static final String REQUEST_ATTRIBUTE_LOGIN_USER_TYPE = "login_user_type"; + + private static final String REQUEST_ATTRIBUTE_COMMON_RESULT = "common_result"; + + public static final String HEADER_TENANT_ID = "tenant-id"; + + private static WebProperties properties; + + public WebFrameworkUtils(WebProperties webProperties) { + WebFrameworkUtils.properties = webProperties; + } + + /** + * 获得租户编号,从 header 中 + * 考虑到其它 framework 组件也会使用到租户编号,所以不得不放在 WebFrameworkUtils 统一提供 + * + * @param request 请求 + * @return 租户编号 + */ + public static Long getTenantId(HttpServletRequest request) { + String tenantId = request.getHeader(HEADER_TENANT_ID); + return NumberUtil.isNumber(tenantId) ? Long.valueOf(tenantId) : null; + } + + public static void setLoginUserId(ServletRequest request, Long userId) { + request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID, userId); + } + + /** + * 设置用户类型 + * + * @param request 请求 + * @param userType 用户类型 + */ + public static void setLoginUserType(ServletRequest request, Integer userType) { + request.setAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE, userType); + } + + /** + * 获得当前用户的编号,从请求中 + * 注意:该方法仅限于 framework 框架使用!!! + * + * @param request 请求 + * @return 用户编号 + */ + public static Long getLoginUserId(HttpServletRequest request) { + if (request == null) { + return null; + } + return (Long) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_ID); + } + +// /** +// * 获得当前用户的类型 +// * 注意:该方法仅限于 web 相关的 framework 组件使用!!! +// * +// * @param request 请求 +// * @return 用户编号 +// */ +// public static Integer getLoginUserType(HttpServletRequest request) { +// if (request == null) { +// return null; +// } +// // 1. 优先,从 Attribute 中获取 +// Integer userType = (Integer) request.getAttribute(REQUEST_ATTRIBUTE_LOGIN_USER_TYPE); +// if (userType != null) { +// return userType; +// } +// // 2. 其次,基于 URL 前缀的约定 +// if (request.getServletPath().startsWith(properties.getAdminApi().getPrefix())) { +// return UserTypeEnum.ADMIN.getValue(); +// } +// if (request.getServletPath().startsWith(properties.getAppApi().getPrefix())) { +// return UserTypeEnum.MEMBER.getValue(); +// } +// return null; +// } +// +// public static Integer getLoginUserType() { +// HttpServletRequest request = getRequest(); +// return getLoginUserType(request); +// } + + public static Long getLoginUserId() { + HttpServletRequest request = getRequest(); + return getLoginUserId(request); + } + + public static void setCommonResult(ServletRequest request, CommonResult result) { + request.setAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT, result); + } + + public static CommonResult getCommonResult(ServletRequest request) { + return (CommonResult) request.getAttribute(REQUEST_ATTRIBUTE_COMMON_RESULT); + } + + public static HttpServletRequest getRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (!(requestAttributes instanceof ServletRequestAttributes)) { + return null; + } + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; + return servletRequestAttributes.getRequest(); + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java new file mode 100644 index 0000000..36ddfe4 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java @@ -0,0 +1,33 @@ +package edu.ssadmin.server.api.user; + +import edu.ssadmin.common.utils.CollectionUtils; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * Admin 用户 API 接口 + * + * @author 芋道源码 + */ +public interface AdminUserApi { + + /** + * 通过用户 ID 查询用户 + * + * @param username 用户名 + * @return 用户id + */ + Long getUserId(String username); + + /** + * 校验用户们是否有效。如下情况,视为无效: + * 1. 用户编号不存在 + * 2. 用户被禁用 + * + * @param ids 用户编号数组 + */ + void validateUserList(Collection ids); + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml index 692c94b..efb578b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml @@ -9,7 +9,7 @@ - + @@ -46,15 +46,15 @@ - INSERT INTO system_users (id, username, password, realname,avatar,email,mobile,status,loginIp,loginDate) VALUES - (#{id}, #{username}, #{password}, #{realname},#{avatar},#{email},#{mobile},#{status},#{loginIp},#{loginDate}) + INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,loginIp,loginDate) VALUES + (#{id}, #{username}, #{password}, #{nickname},#{avatar},#{email},#{mobile},#{status},#{loginIp},#{loginDate}) UPDATE system_users username = #{username}, password = #{password}, - realname = #{realname}, + nickname = #{nickname}, avatar = #{avatar}, email = #{email}, mobile = #{mobile}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java index d191886..1c636ec 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java @@ -2,12 +2,12 @@ package edu.ssadmin.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(scanBasePackages = "edu.ssadmin") +@ComponentScan(basePackages = {"edu.ssadmin.security","edu.ssadmin.web","edu.ssadmin.server"}) public class ServerApplication { - public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); } - } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java new file mode 100644 index 0000000..15f1345 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java @@ -0,0 +1,22 @@ +package edu.ssadmin.server.api.user; + +import edu.ssadmin.server.service.user.AdminUserService; + +import javax.annotation.Resource; +import java.util.Collection; + +public class AdminUserApiImpl implements AdminUserApi{ + + @Resource + private AdminUserService userService; + + @Override + public Long getUserId(String username) { + return null; + } + + @Override + public void validateUserList(Collection ids) { + userService.validateUserList(ids); + } +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java index 52dfda6..9c740b1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java @@ -20,6 +20,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; @@ -50,6 +51,7 @@ public class AdminAuthController { @PostMapping("/login") @ApiOperation("使用账号密码登录") + @PermitAll public CommonResult login(@RequestBody @Valid LoginReqVO reqVO) { return success(authService.login(reqVO)); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index 8baf63e..3f2a3ad 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -52,6 +52,8 @@ public class AuthPermissionInfoRespVO { private String component; + private String componentName; + /** * 子路由 */ diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java index b0a76b0..0850687 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java @@ -29,14 +29,14 @@ public class LoginReqVO { private String password; - @ApiModelProperty(value = "验证码", required = true, - example = "abcd", - notes = "验证码开启时,需要传递") - @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) - private String captcha; - - /** - * 开启验证码的 Group - */ - public interface CodeEnableGroup {} +// @ApiModelProperty(value = "验证码", required = true, +// example = "abcd", +// notes = "验证码开启时,需要传递") +// @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) +// private String captcha; +// +// /** +// * 开启验证码的 Group +// */ +// public interface CodeEnableGroup {} } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java index 49c5410..0325b8c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -36,6 +36,9 @@ public class MenuBaseVO { @Size(max = 200, message = "组件路径不能超过255个字符") private String component; + @Size(max = 200, message = "组件名不能超过255个字符") + private String componentName; + @NotNull(message = "状态不能为空") private Integer status; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java index 00d9abe..ac21057 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java @@ -58,6 +58,15 @@ public class UserController { return success(true); } + @GetMapping("/get-list") + @ApiOperation("获取用户列表") + public CommonResult> getUserListForUserManage() { + // 获取用户管理中展示所需的用户列表 + List list = userService.getUserList(); + // 排序后,返回给前端 + return success(UserConvert.INSTANCE.convertList05(list)); + } + @GetMapping("/list-all-simple") @ApiOperation("获取用户精简信息列表") public CommonResult> getSimpleUserList() { diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java index ffaac66..2a72b06 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java @@ -17,8 +17,8 @@ public class UserBaseVO { @Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符") private String username; - @Size(max = 10, message = "用户真实姓名长度不能超过10个字符") - private String realname; + @Size(max = 10, message = "用户昵称长度不能超过10个字符") + private String nickname; private String remark; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java new file mode 100644 index 0000000..fc993fd --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java @@ -0,0 +1,23 @@ +package edu.ssadmin.server.controller.admin.user.vo.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserListRespVO { + + private Long id; + + private String username; + + private String mobile; + + private Integer status; + + private String creator; + +} + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java index 24b8f6c..c41cc09 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java @@ -2,10 +2,7 @@ package edu.ssadmin.server.convert.user; import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserRespVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserSimpleRespVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.server.controller.admin.user.vo.user.*; import edu.ssadmin.server.dataobject.user.AdminUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -29,6 +26,10 @@ public interface UserConvert { UserSimpleRespVO map(AdminUserDO roleDO); + UserListRespVO map1(AdminUserDO value); + List convertList04(List list); + List convertList05(List list); + } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java index d0b85f6..e416801 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java @@ -63,6 +63,12 @@ public class MenuDO extends BaseDO { * 组件路径 */ private String component; + + /** + * 组件名 + */ + private String componentName; + /** * 状态 * diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java index 11bff9f..ac39c31 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java @@ -30,9 +30,9 @@ public class AdminUserDO extends BaseDO { private String password; /** - * 用户真实姓名 + * 用户昵称 */ - private String realname; + private String nickname; /** * 用户头像 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java index 3f2faab..5ecf7ff 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java @@ -9,7 +9,7 @@ import java.util.List; @Mapper public interface RoleMenuMapper { - List selectListByRoleIds(Long roleId); + List selectListByRoleId(Long roleId); List selectListByRoleIds(Collection roleIds) ; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java index dff18cf..7f3671b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java @@ -4,6 +4,7 @@ import edu.ssadmin.server.dataobject.user.AdminUserDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; @Mapper @@ -14,6 +15,8 @@ public interface AdminUserMapper { AdminUserDO selectByMobile(String mobile); AdminUserDO selectByEmail(String email); List selectListByStatus(Integer status); + List selectList(); + List selectBatchIds(Collection ids); void insert(AdminUserDO user); void updateById(AdminUserDO user); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java index a512eec..deb6826 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java @@ -108,6 +108,6 @@ public class AdminAuthServiceImpl implements AdminAuthService{ return; } // 校验验证码,使用LoginReqVO.CodeEnableGroup.class - ValidationUtils.validate(validator, reqVO, LoginReqVO.CodeEnableGroup.class); + // ValidationUtils.validate(validator, reqVO, LoginReqVO.CodeEnableGroup.class); } } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java index e06aa16..6209a83 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java @@ -173,6 +173,7 @@ public class MenuServiceImpl implements MenuService { // 菜单为按钮类型时,无需 component、path 属性,进行置空 if (MenuTypeEnum.BUTTON.getType().equals(menu.getType())) { menu.setComponent(""); + menu.setComponentName(""); menu.setPath(""); } } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java index 28c9935..e7e151e 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java @@ -119,7 +119,7 @@ public class PermissionServiceImpl implements PermissionService { @Override public void assignRoleMenu(Long roleId, Set menuIds) { // 获得角色拥有菜单编号 - Set dbMenuIds = convertSet(roleMenuMapper.selectListByRoleIds(roleId), RoleMenuDO::getMenuId); + Set dbMenuIds = convertSet(roleMenuMapper.selectListByRoleId(roleId), RoleMenuDO::getMenuId); // 计算新增和删除的菜单编号 Collection createMenuIds = CollUtil.subtract(menuIds, dbMenuIds); Collection deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIds); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java index b696574..2a4823a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java @@ -107,6 +107,21 @@ public interface AdminUserService { */ List getUserListByStatus(Integer status); + /** + * 获得用户列表 + * + * @return 用户列表 + */ + List getUserList(); + + /** + * 校验用户们是否有效。如下情况,视为无效: + * 1. 用户编号不存在 + * 2. 用户被禁用 + * + * @param ids 用户编号数组 + */ + void validateUserList(Collection ids); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java index 8086107..913bb13 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java @@ -1,9 +1,9 @@ package edu.ssadmin.server.service.user; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.StrUtil; import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.utils.CollectionUtils; import edu.ssadmin.security.util.PasswordUtil; import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; @@ -25,6 +25,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import static edu.ssadmin.common.exception.ErrorCodeConstants.*; import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; @@ -37,6 +38,7 @@ public class AdminUserServiceImpl implements AdminUserService { @Resource private AdminUserMapper userMapper; + @Resource private PasswordEncoder passwordEncoder; @@ -140,6 +142,30 @@ public class AdminUserServiceImpl implements AdminUserService { public List getUserListByStatus(Integer status) { return userMapper.selectListByStatus(status); } + @Override + public List getUserList(){ + return userMapper.selectList(); + } + + @Override + public void validateUserList(Collection ids) { + if (CollUtil.isEmpty(ids)) { + return; + } + // 获得角色信息 + List users = userMapper.selectBatchIds(ids); + Map userMap = CollectionUtils.convertMap(users, AdminUserDO::getId); + // 校验 + ids.forEach(id -> { + AdminUserDO user = userMap.get(id); + if (user == null) { + throw exception(USER_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(user.getStatus())) { + throw exception(USER_IS_DISABLE); + } + }); + } private void validateUserForCreateOrUpdate(Long id, String username, String mobile, String email) { diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml index 7d928f9..9e801e6 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml @@ -9,7 +9,7 @@ - + @@ -45,17 +45,29 @@ FROM system_users WHERE status = #{status} AND deleted = 0 + + + - INSERT INTO system_users (id, username, password, realname,avatar,email,mobile,status,remark,loginIp,loginDate) VALUES - (#{id}, #{username}, #{password}, #{realname},#{avatar},#{email},#{mobile},#{status},#{remark},#{loginIp},#{loginDate}) + INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,remark,loginIp,loginDate) VALUES + (#{id}, #{username}, #{password}, #{nickname},#{avatar},#{email},#{mobile},#{status},#{remark},#{loginIp},#{loginDate}) UPDATE system_users username = #{username}, password = #{password}, - realname = #{realname}, + nickname = #{nickname}, avatar = #{avatar}, email = #{email}, mobile = #{mobile}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml index 21919e1..52a4a89 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml @@ -14,6 +14,7 @@ + @@ -51,19 +52,19 @@ - SELECT * FROM system_menu WHERE id IN #{id} - SELECT * FROM system_menu WHERE permission = #{permission} - INSERT INTO system_menu (name, permission,type,component,sort,parent_id,status,remark, path) VALUES - (#{name}, #{permission}, #{type},#{component},#{sort},#{parentId},#{status},#{remark},#{path}) + INSERT INTO system_menu (name, permission,type,component,component_name,sort,parent_id,status,remark, path) VALUES + (#{name}, #{permission}, #{type},#{component},#{componentName},#{sort},#{parentId},#{status},#{remark},#{path}) UPDATE system_menu @@ -75,6 +76,7 @@ parent_id = #{parentId}, path = #{path}, component = #{component}, + component_name = #{componentName}, status = #{status}, remark = #{remark}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml index 20f6c44..ceaa2b3 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml @@ -26,7 +26,7 @@ - SELECT * FROM system_role WHERE code = #{code} - SELECT * FROM system_role WHERE status IN #{status} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml index 1ded6e7..f0ea318 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml @@ -23,7 +23,7 @@ FROM system_role_menu WHERE deleted = 0 AND role_id = #{roleId} - SELECT * FROM system_role_menu WHERE deleted = 0 AND role_id IN diff --git a/ssadmin-web/src/api/login.js b/ssadmin-web/src/api/login.js index 60d8421..24c38f7 100644 --- a/ssadmin-web/src/api/login.js +++ b/ssadmin-web/src/api/login.js @@ -21,3 +21,29 @@ export function getInfo() { method: 'get' }) } + + +// 获取用户详细信息 +export function getPermissionInfo() { + return request({ + url: '/system/auth/get-permission-info', + method: 'get' + }) +} + +// 退出方法 +export function logout() { + return request({ + url: '/system/auth/logout', + method: 'post' + }) +} + + +// 刷新访问令牌 +// export function refreshToken() { +// return service({ +// url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken(), +// method: 'post' +// }) +// } diff --git a/ssadmin-web/src/api/system/permission.js b/ssadmin-web/src/api/system/permission.js new file mode 100644 index 0000000..fe01b12 --- /dev/null +++ b/ssadmin-web/src/api/system/permission.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询角色拥有的菜单数组 +export function listRoleMenus(roleId) { + return request({ + url: '/system/permission/list-role-menus?roleId=' + roleId, + method: 'get' + }) +} + +// 赋予角色菜单 +export function assignRoleMenu(data) { + return request({ + url: '/system/permission/assign-role-menu', + method: 'post', + data: data + }) +} + +// 查询用户拥有的角色数组 +export function listUserRoles(userId) { + return request({ + url: '/system/permission/list-user-roles?userId=' + userId, + method: 'get' + }) +} + +// 赋予用户角色 +export function assignUserRole(data) { + return request({ + url: '/system/permission/assign-user-role', + method: 'post', + data: data + }) +} + +// 赋予角色数据权限 +export function assignRoleDataScope(data) { + return request({ + url: '/system/permission/assign-role-data-scope', + method: 'post', + data: data + }) +} diff --git a/ssadmin-web/src/api/system/role.js b/ssadmin-web/src/api/system/role.js new file mode 100644 index 0000000..1df809a --- /dev/null +++ b/ssadmin-web/src/api/system/role.js @@ -0,0 +1,75 @@ +import request from '@/utils/request' + +// 查询角色列表 +export function listRole(query) { + return request({ + url: '/system/role/page', + method: 'get', + params: query + }) +} + +// 查询角色(精简)列表 +export function listSimpleRoles() { + return request({ + url: '/system/role/list-all-simple', + method: 'get' + }) +} + +// 查询角色详细 +export function getRole(roleId) { + return request({ + url: '/system/role/get?id=' + roleId, + method: 'get' + }) +} + +// 新增角色 +export function addRole(data) { + return request({ + url: '/system/role/create', + method: 'post', + data: data + }) +} + +// 修改角色 +export function updateRole(data) { + return request({ + url: '/system/role/update', + method: 'put', + data: data + }) +} + +// 角色状态修改 +export function changeRoleStatus(id, status) { + const data = { + id, + status + } + return request({ + url: '/system/role/update-status', + method: 'put', + data: data + }) +} + +// 删除角色 +export function delRole(roleId) { + return request({ + url: '/system/role/delete?id=' + roleId, + method: 'delete' + }) +} + +// 导出角色 +export function exportRole(query) { + return request({ + url: '/system/role/export', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/ssadmin-web/src/api/system/user.js b/ssadmin-web/src/api/system/user.js new file mode 100644 index 0000000..dea88f2 --- /dev/null +++ b/ssadmin-web/src/api/system/user.js @@ -0,0 +1,110 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/common"; + +// 获取用户精简信息列表 +export function listUsers() { + return request({ + url: '/system/user/get-list', + method: 'get' + }) +} + +// 查询用户详细 +export function getUser(userId) { + return request({ + url: '/system/user/get?id=' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 新增用户 +export function addUser(data) { + return request({ + url: '/system/user/create', + method: 'post', + data: data + }) +} + +// 修改用户 +export function updateUser(data) { + return request({ + url: '/system/user/update', + method: 'put', + data: data + }) +} + +// 删除用户 +export function delUser(userId) { + return request({ + url: '/system/user/delete?id=' + userId, + method: 'delete' + }) +} + + +// 用户密码重置 +export function resetUserPwd(id, password) { + const data = { + id, + password + } + return request({ + url: '/system/user/update-password', + method: 'put', + data: data + }) +} + +// 用户状态修改 +export function changeUserStatus(id, status) { + const data = { + id, + status + } + return request({ + url: '/system/user/update-status', + method: 'put', + data: data + }) +} + +// 查询用户个人信息 +export function getUserProfile() { + return request({ + url: '/system/user/profile/get', + method: 'get' + }) +} + +// 修改用户个人信息 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile/update', + method: 'put', + data: data + }) +} + +// 用户密码重置 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/update-password', + method: 'put', + data: data + }) +} + +// 用户头像上传 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/update-avatar', + method: 'put', + data: data + }) +} diff --git a/ssadmin-web/src/assets/images/profile.jpg b/ssadmin-web/src/assets/images/profile.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e4bcf879884f76657292f2e792bf9efbb4090f63 GIT binary patch literal 7885 zcmbuEWl$Vlx3*_+2sR8pKyW8G!Gl{E+$C6m;1)=L-~<%^^Y^UXf4aJQ@4l+;d#|-uKg>U@0*KX=RFwcgAOHY-9Ds*KKsW&F-@wMf z!N$YG#ls^cz{e*bBqJhz9AxyQl%$UrJuMRrH4PK3AUiWNyP$*suYiP#jEstjfr*b# zF7W?4!9zCygahaY^rHhA0B9f}ItcjC3!nu6(9qC<|9tCz0|N^k6NrWlz`=b$0dW5F zU~BN5Cs7V9yYHR&>nUuH`e`If0hiOFuWs1gt%FfSI5%4^rs_!KMZCtC5u3t}&@c;_ z^^f7sE&dPNVoV8wtCy;yeuY8Um6fe*;=A8Q>KEL9rLSBMYSx$zT*)=8Tj~g>g#1+q zX|XPEZg4l*`~+Q2TaWG{_C7RA&05y~w2-Txv#9UAgZ}(o%Dh7Ra0$0$CgLzu(*QEU{v4gh}1VC zB_K*~=s9vGC~tLwwMHB?d;TY9BW?ahqWojat7*qDilNTm=ZX%BB6UNrCVr1ecUib? z8;Wu=Ia%=v9tY*mkbyqBQ9;i(*_0Mzy`T6E4k5-~uLQIx73{RPO@H`$nfswXpmZFI zYu?4SgDxOreH%XQvwUwV?Ia&C{xu}iZ#~F(q}hv<2AS?(5T244Od8lVi<>9VZT)fS z%g2~3PmTesNqXzKz{#Ul78eE?q!nN5&K*)7qk+vcHmCg;l{c)r=R`m`x?TJRsLtwT z4_~BZF?AX!-0`)Zr$52qEFykwhjb8TjSFPuX=3+9!-gEjzs_Dge1FXCY|8{)akI0sFjW38jH&5sD zzz>3-7oez^fP`c_Z`mDhvPgu*aINr!hQ!g38N$wm&atRwnlM{aEkVetsWF*+dB1b! zqwwx9?`S#u?HoGp5Wwvx)z?-_Hd&_K7s#K+r+88ciLGvtQ)geqt+)K{g%-`e!kUiv zkCd}e2HW45rWXXVCR{!c?>nn4DY&vIm#v`^GM?eq>PT3*BL48A`MWUCTd4yu8%Y*X zZve(lt>!2-LZ!Wv=kBwVpI1ca*2?%LQ0i7z%szpW+d{R8Qjgpa;3Me&;syXQFtM=z z1xNn}e1W~oK)vZ_%;k~zaN5WIQ^~P!9K>HN^Mk;>f30+wZv^SQPC66HO4fZ2={KII z&x~imcK2suK4~8+>i9id48znFqPG^;lXQgzO#kN_ zU#bh^Gye@=k+XKm&P6LP@pdQaSbnvICv-V^$vXOeg@SblPhP2*GVFMf(&H6QQ7apF zbMnM@OnHBDuxkjQgNZq&$!K!9=x}oCH^vpJ1tWNhO&o*C+dBlS_^f5UeR>i;ahdEN z6+dM+z^iC6e*iq9a}hs+q5;v-G0*|%|L!l3HyD@zED#Bp0h^Scn2b??iCIucR_?!h z4Gv>|ZiV&*NmVMP58VwSakK^6IaS%AwFJYuT0fxP;#0%HGT}a+ZUIc$ z@=83A7;?_WX(UYmQ@{7w3#gCL$uB2vB_S+Y153sFinyzauR529T0Ro_vMARuBCERW zY_u~n0uZ#9g?Wd=X|s_`Z)`zD4G)pbdlA)$P2Azue$BC;&EPa=YL5`O+~2>8bFqM~7$-S+W5Pp>~zd$uX63z!5laO}sS zvq@U`?WYm8`O11B{vx0lr1*-Qszl6lAi47Lt!N`lnTcj-K%)5*KE*I&v!Xt;cQzUr zUFt8wy#}6Ay_fS4#|Bo{NA!4~aJNge-^Cwf!AS#Cd2C4SVd}q@50a)4S?e5yiAhf7 zT)OkxGWSovOdoh`p$@ZOrd6RC_Ib>rtn1aq02#TeDpi>e0CqEKnD;YBXOX|tVIuR1 z>myR)bMXWw?G0-!4v32nc#n4A286R_e+1rVJC3~5RW2}`eGcM5 zM$gw~i@H?w24_T_Cr^qJkc65A-+F6`x4QqDKE=RbBR#+At_i7?;ozSS-}<5@lVi_n z*23vyv{IGLJ7+quP*u|B?o>l1R5KB*13qe=HaTY*%3E)ypzF#k_=DyF%h=5YSgSG$ zR5b6F^*gFX@>)e}Ml>ejZE9v1WK;JyPHETW*nqMck{F(*Xd5%`54KFM9;E2t-(Wjc+Z6No zGobOY=)UFik0DL^srCG_lF@5G%T(f}YsVLj@#%EYxF!lS7vnz4M2d1uw}=A~wU@HX z3)Ml^bKV^>QO&~SWUfMz>q2cPB&9rL_e;byNS~s)9WzUrt%(IT?v>P6~PxvET#4xSWl3va`@?RUyU}K`o?SMskmIL~FmJ$eq64 z>t=5Bj4-#)+g{F4z&aL8ud#r{^=_KI*%w&6h*BSjYJc$r?pd0jS|Rc|X;K(7Kp=sV zYk!Y@kok?9$Q@g1eS#267_@ces@UWpdHwkuPYuDZeFWZk6q7jx=)mwsxUBFMR^DI+ zE^5$`#S}bD7w5d7E4Kk&dq46DM~Yoczg>FS+p>wX*3rKOpE{%uu9_m7K5b$j`i7vY zVNy6yPw+Y8Z&w^-D?iR0Z&<#?bx$PAw-)sEDzlrfcU3hrQcY)5f0)G^`5hVDLq8NG z+o}sk8GztqZ715g`17$t3JR!aO8N)nD&y9SmW^SdSJip14Y>zbX)NC(6(U zkhCP@d_C^SCckb;g|?3IZ6AZSldX-DSr}5A>g!?BpbEQLMRfz*Y3~Nx^=QUQdBp%p zw&~i$SCHKAK8C~w`M>`94Jla`I>XV*(x;bIhzao0luAT;Ez8#X^~TgIW`<6Q`s7c% zF`FH;_iW#L^oOIcfDlsVoliH(tGuT!v@Rp_FhllnlB!m+`irQU-|`Mzh38eyvJ@ua zD`Kb~nZ8}K^L}~^(zBS=fXejxHX4^6@-YC$*;=88GVosSCB^C(5?-2 zz!3)*E3@uj1~rx!c$A&nG`ifEtZkP&Pp~r1)M1IcM%TW&NrqG~yb5?Jrx`~&LDpH= z2H?*d&Fcri>Dce~E+4Z$sgp@SV>_DNxZxT%UFjih-(FZ@7$yazicF>wpL%t>t}>Sqre7DEg9F;4}IVW%r?a4Sug%>?8GJZ#f-EnpCm=sw_E* z^gI9#$CBZyD`YI)Iy*_d+!z=N+M^yI@!$}C_4k-Nl$b3YrS8-*9I_-_Zx%Ibbn`ce zRv%vsLIq`i+Z`J|zt@xN+t-uZ9bL6{H)5A$d*dG0NrJCPHiRorf@$t)Fe4*GveCwM z(R;dj_nBzo16QEzZ;T1A6vNcx@{%YRJh_jgOTlalMAoGvPo~fOogb8j5a{=`QIolF zM|@p-_Ixu8u5b1<|E}RiGHQ0kNUZ0tZ#O50yVG>VV~&;}emnsH(Sev)XgHXd|0HQ3 z8UP)H!N5;K43^cl!lY*u@CecIBxMqm3r$MSCzH4Kn!wVvsq6Z0&c=EHnDWLa@h6fQ z{-Js@b37JWRghRL!^H3Pl&?kB_LUV^Eqqj6)CTw)QsewvfF^0v((u{@JVPqgMVd2Q z)reYikcxfK*{t8NLuoG0YV3-a{|^tJ;dX@hfugGszNr}lcJW?S_XsaRsap?Hq)xC5lD zewU%O(nS#FtUCFe$4z`rA}>$MNeGS2g#JE6x*ijKRBPbf1~uXL%^@dWjLQcYgv>5! z!l5uY?kPtO`7EhC#=MKjwsih@m9vN|A4Z$dtiebc3t?}(Po(|UKBYCeca}|NR@X35>gy^JuWM`U&LmCj z=sfu(6~Re_`GQ&T(l7ep)yv?8oT+9#+^Q-#W|i`lpkeVlZjQF`0Mc7zLq=8%@%*fj zPI+X4CQE1faL>0^%JI5JYsilW(4T8vVOKw1bp0g{RmkKdh##mh}TZ zn$g?KtV*s>Lzj|*4hW*X-gIoK>yW8V-;f&#fIe>s*?XIBp?C0upjGjL)x9iul?b?Z zPBM6KEqMCknN(o6)1hPNO4j5c@~)YwEFgBbJOr9X&n@|+hCXCt(_Y^8iKkc>4dtpH zG4>KKuu}%!^QRbWI|}DE0bLl_B)92|C!Rm@_VB4*$xF1B~9%hUCna7n<&b z2|ZHrI?XfEqzLD(RZT6Uq2r*I-E^0X?k4++14-V~fdWINihfgc+KJA;zKswSl$OfM zX_zavy>EU(O7zpZVi%*ji8*Pi7G`Gk(-YrL#xLE2VEP`F-a|waf@vZpD7=@fp^tVB zUrkmIwi${x| zdrU}YU1Vm|Wjy|`)Ic47&l1c2uHHRq+BEj#s-WgG#k9XBbGFERjc&$yGb6s;>JB~- zEiSEmF0WD6OUKK!DoA_`d84z}B;Y4WZ=P8@)Wv+u`Y^(e&%=xcre z*qfvV7kwMXo+FuN`tb4_|CK-~maFJV=1C}5-D3W!^ppt|x^YQ;?YE=$2f&X=t;RA- zvG1QQjzvC(dVM`p(n6atDe@yEx=ihlNcv?4>IF5`A1%sZKHkjM@Gq?C#PBP7tM2QW`>_1_ z6Y~ro2>VTnxUk>LH_k`1t=PN%qKEXb6(ujK&h*<1gwuKzG@ysX2O}re&np7k18xrz z8p!jfx!YG($xh<4{UYnRIIq<=xCvo^b5mu~Rmm znZAy)sAl<=IFw+`$$(FIwt&*KUm6G)yEUJ?u<@~p@+mwYn=D5jP?o;rzO14yU)pn> zhUicDwVQ@<6v{#Smd(DYb_0K<^G;zpBgl+o23-$v)au*Uc+?qa?RrH z44S^1H-iRGragXP&N)G#(}K&hA&2O55;#v)k9e%xL1~RlHA{f{3gK5X{t_#gLLZ+_ z_m0`@z0DHWxjiJZ9nL>uH$`7}KD5bKJMK-Hs!N?K-6h*0N3YvMqP-K3|D*T^5bPi_x;CJVOcIyJfm6b(gR*3;P3DpmP zQmB65?HhP1@Y{*dRJu;hGQ##$bcyP4Yjj7Oo%@4=dnq$)br6{tb|95nIqt9^B(7fL z?XdFe%8ut*g{pC-6B<*4C#VfAfU!lpE35^oLRsInvTzY}O^haD1!l{Zd%Cv5B>Jbm zXII^A=(wjP7NjBaeZ}7G)kwrO(k|QFysbQzC-t5fxdYa~J&mN(9>y*T9M$_7&2eIY z{RjFirk!02;a1-5$x7;iZ5N}0HH$*`qhBsHcy1&90KmTtg^>q2`7skdE23d2w~mr{$A|6x{z1bBz8U!Hk$3`+*i|U{z0*ta(TN*V zG5!nYZ+rTi&L0vev)-D0;^ME%E+ak+_TouNwfx+3@tMhkJ>jq?%Z>!%&Z^^Q=ytCN> z6NpfOJ+P*>a=E9by303*xSw+7Ay;(6ZX<8|ESR1MTIsz`p+4oq?IvP5qzx5~mtwf- zqD+F9kAw>^mty#a;7q>i`at}fB<9?HO@eQUDp6|K#{}zW5*uX!lpIrGFS|#WV%)Pn z076I!0aqS7{G@)DM1yRCQEA$?zX%NIRnS4^}ok*w!?)V2~gWKP-b(ldkFdI@P&jW z?O<<(hYdFktgb>6-dyS3(DhoJlMKm($oV_{%Ewt@bQe=AH927U}; zMgdt5u;4#crd&uJDU*DXXXwO#`hh^;3qYQmx?C4$vVHXD`U);$g%alo0w$A*_aUtZ zXk>3j*9(HvbrB!q4ae0S%{wx(1uy{z?4l;d=cyU*!!*ish^rK2r(&P!gnoRJiN~3LU(M$AbXFS=m z*-MgY5kkNgAVV=jeyhj-JC&>fIsLAUQ!8Z9ti(m{0pR}SYevE5&q>SLLFa*pjMO+q zX3k|ZfM#(aEyL*=Ggu_9B<^i##99v|lv}2e+q7LE(6CC_4KxdR`;FwULUj zTjzA@PNA|Y;_ox2$92MUSfEL@61HzIX9M%9z$zsQp^%c6=doVFgV>>T3~%PF(Mre=Hyv= zB307?hoIhje({W%?(^+blc5!%Jkh9lQAne95p~om`E!vNRRd&MYKWsV2Ga>-2n_1< zGm5^!8ALJ>@N=-#a5^ke*;rbt_n%d@h^~^18(`YZWE4wIBPV$od+%@vH!7W@;<5#g+QO*5IziCUS57RWtJm|P5{=bccfA2iFlNDm3BwJ z7%nWn<9N{SyQYyQ39Ma6%KA-1St==o>+wprEzcKmpD>k3a9z|8VFYVf=K-fzOTg^q zif~kAnX|;8S*7(Zn><*v^QJJ=y!fjuu+h1ncb`>neXmVOa6eW<@J--L*uvUx$}ng^ zxELc$Xeq~XJ6?1x{STIXZ4RkFa+mQJRGoSdKAt`Nl+i)!HiRNWJ~O6dYn#uD@@^;S z(f-dK?f>ZiNB2MeY5ITm2ciGtei8vpMp@{PpEL52M~w0tF&vbbQPEElrA6=QuL~yc=sjRq_(PqW` zW}X(?72&a5m(vxoCiSq#ae|?X91-675Ap=>U4_@Se$rE;!B2ABqznDkbH>LC1~U#P zB$RtLxd|7)b8EzxU~LcS_O*s|7uc~Iak1tujomfGd{`jDC$?&TRopw>6CPXPZ)46r7mRYl1+Hu-*2ij|dgr9)lkKbm%=DdsMyA*qM zWt7Pu02`2`mDj)E(s2I!ZCdyPKo>$74fid^Y9gc`Gz-xk&*+HK{`mRB*5p!F{?EVD=i6o!Ger8l%J zsvcIXyIh#11*ozbupbd@F_5q9FCQ+-Q7|uXWf_H#tNX$v^e}Pv>O2he1|_GSyxo*P zw4wK2DO>K@e!=?scTftyz=dIzY+Y3AR!p>P>f4FF5Axyg9+o>82BZD&FxB97#rsD`G){<%aO^A z>cOSq!5_sU6`2GJU!}X@ebIy+{d$%rMsxY%`)On{azhwdA zI&%BFm7<6ya)zSa*&y~M$HAfNjOC9=dY36|1@YZya(jUjImq%i0_0_*b=C8YHL~%8 z;t@^7A+`6@>B4FIO{^=LgarO NvOP|&09Jii_#cBOpN9Yd literal 0 HcmV?d00001 diff --git a/ssadmin-web/src/assets/index.scss b/ssadmin-web/src/assets/index.scss new file mode 100644 index 0000000..3237033 --- /dev/null +++ b/ssadmin-web/src/assets/index.scss @@ -0,0 +1,191 @@ +//@import './variables.scss'; +//@import './mixin.scss'; +//@import './transition.scss'; +//@import './element-ui.scss'; +//@import './sidebar.scss'; +//@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container全局样式 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} + +//refine vue-multiselect plugin +.multiselect { + line-height: 16px; +} + +.multiselect--active { + z-index: 1000 !important; +} diff --git a/ssadmin-web/src/directive/index.js b/ssadmin-web/src/directive/index.js new file mode 100644 index 0000000..49f995d --- /dev/null +++ b/ssadmin-web/src/directive/index.js @@ -0,0 +1,16 @@ +import hasRole from './permission/hasRole' +import hasPermi from './permission/hasPermi' + +// Vue:自定义指令:https://v2.cn.vuejs.org/v2/guide/custom-directive.html +const install = function(Vue) { + Vue.directive('hasRole', hasRole) + Vue.directive('hasPermi', hasPermi) +} + +if (window.Vue) { + window['hasRole'] = hasRole + window['hasPermi'] = hasPermi + Vue.use(install); // eslint-disable-line +} + +export default install diff --git a/ssadmin-web/src/directive/permission/hasPermi.js b/ssadmin-web/src/directive/permission/hasPermi.js new file mode 100644 index 0000000..2266655 --- /dev/null +++ b/ssadmin-web/src/directive/permission/hasPermi.js @@ -0,0 +1,27 @@ +/** + * 操作权限处理 + * Copyright (c) 2019 ruoyi + */ +import store from '@/store' + +export default { + inserted(el, binding, vnode) { + const { value } = binding + const all_permission = "*:*:*"; // 全部权限 + const permissions = store.getters && store.getters.permissions // 用户拥有的权限标识的数组 + + if (value && value instanceof Array && value.length > 0) { + // 判断是否有权限 + const permissionFlag = value + const hasPermissions = permissions.some(permission => { + return all_permission === permission || permissionFlag.includes(permission) + }) + // 如果没有权限,则移除元素 + if (!hasPermissions) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error(`请设置操作权限标签值`) + } + } +} diff --git a/ssadmin-web/src/directive/permission/hasRole.js b/ssadmin-web/src/directive/permission/hasRole.js new file mode 100644 index 0000000..ed5cd96 --- /dev/null +++ b/ssadmin-web/src/directive/permission/hasRole.js @@ -0,0 +1,28 @@ +/** + * 角色权限处理 + * Copyright (c) 2019 ruoyi + */ + +import store from '@/store' + +export default { + inserted(el, binding, vnode) { + const { value } = binding + const super_admin = "admin"; + const roles = store.getters && store.getters.roles // 用户拥有的角色标识的数组 + + if (value && value instanceof Array && value.length > 0) { + // 判断是否有角色 + const roleFlag = value + const hasRole = roles.some(role => { + return super_admin === role || roleFlag.includes(role) + }) + // 如果没有角色,则移除元素 + if (!hasRole) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error(`请设置角色权限标签值"`) + } + } +} diff --git a/ssadmin-web/src/layout/index.vue b/ssadmin-web/src/layout/index.vue index 65e49fb..14e1e99 100644 --- a/ssadmin-web/src/layout/index.vue +++ b/ssadmin-web/src/layout/index.vue @@ -14,6 +14,10 @@ 添加用户 + + + 用户管理 + 退出 diff --git a/ssadmin-web/src/main.js b/ssadmin-web/src/main.js index 33fddd2..75c6860 100644 --- a/ssadmin-web/src/main.js +++ b/ssadmin-web/src/main.js @@ -4,9 +4,13 @@ import router from './router' import store from './store' import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; -import './permission' +import './permission' +import directive from "@/directive"; +import plugins from "@/plugins"; Vue.use(ElementUI); +Vue.use(directive) +Vue.use(plugins) Vue.config.productionTip = false diff --git a/ssadmin-web/src/permission.js b/ssadmin-web/src/permission.js index 1ac2a02..9ffd9ae 100644 --- a/ssadmin-web/src/permission.js +++ b/ssadmin-web/src/permission.js @@ -1,21 +1,21 @@ import router from './router' import { getAccessToken } from '@/utils/auth' -router.beforeEach((to, from, next) => { - if (getAccessToken()) { // 如果有token - if (to.path === '/login') { - next({ path: '/' }) // 如果是去登录页,重定向到首页 - } else { - next() // 正常跳转 - } - } else { // 没有token - if (to.path === '/login') { - next() // 如果是去登录页,正常跳转 - } else { - next('/login') // 否则重定向到登录页 - } - } -}) +// router.beforeEach((to, from, next) => { +// if (getAccessToken()) { // 如果有token +// if (to.path === '/login') { +// next({ path: '/' }) // 如果是去登录页,重定向到首页 +// } else { +// next() // 正常跳转 +// } +// } else { // 没有token +// if (to.path === '/login') { +// next() // 如果是去登录页,正常跳转 +// } else { +// next('/login') // 否则重定向到登录页 +// } +// } +// }) router.afterEach(() => { // 这里可以添加一些在路由跳转后需要执行的代码 diff --git a/ssadmin-web/src/plugins/auth.js b/ssadmin-web/src/plugins/auth.js new file mode 100644 index 0000000..8eaf52f --- /dev/null +++ b/ssadmin-web/src/plugins/auth.js @@ -0,0 +1,60 @@ +import store from '@/store' + +function authPermission(permission) { + const all_permission = "*:*:*"; + const permissions = store.getters && store.getters.permissions + if (permission && permission.length > 0) { + return permissions.some(v => { + return all_permission === v || v === permission + }) + } else { + return false + } +} + +function authRole(role) { + const super_admin = "admin"; + const roles = store.getters && store.getters.roles + if (role && role.length > 0) { + return roles.some(v => { + return super_admin === v || v === role + }) + } else { + return false + } +} + +export default { + // 验证用户是否具备某权限 + hasPermi(permission) { + return authPermission(permission); + }, + // 验证用户是否含有指定权限,只需包含其中一个 + hasPermiOr(permissions) { + return permissions.some(item => { + return authPermission(item) + }) + }, + // 验证用户是否含有指定权限,必须全部拥有 + hasPermiAnd(permissions) { + return permissions.every(item => { + return authPermission(item) + }) + }, + // 验证用户是否具备某角色 + hasRole(role) { + return authRole(role); + }, + // 验证用户是否含有指定角色,只需包含其中一个 + hasRoleOr(roles) { + return roles.some(item => { + return authRole(item) + }) + }, + // 验证用户是否含有指定角色,必须全部拥有 + hasRoleAnd(roles) { + return roles.every(item => { + return authRole(item) + }) + } +} diff --git a/ssadmin-web/src/plugins/index.js b/ssadmin-web/src/plugins/index.js new file mode 100644 index 0000000..4a8229e --- /dev/null +++ b/ssadmin-web/src/plugins/index.js @@ -0,0 +1,11 @@ +import auth from './auth' +import modal from './modal' + +export default { + install(Vue) { + // 认证对象 + Vue.prototype.$auth = auth + // 模态框对象 + Vue.prototype.$modal = modal + } +} diff --git a/ssadmin-web/src/plugins/modal.js b/ssadmin-web/src/plugins/modal.js new file mode 100644 index 0000000..e3c03cf --- /dev/null +++ b/ssadmin-web/src/plugins/modal.js @@ -0,0 +1,83 @@ +import { Message, MessageBox, Notification, Loading } from 'element-ui' + +let loadingInstance; + +export default { + // 消息提示 + msg(content) { + Message.info(content) + }, + // 错误消息 + msgError(content) { + Message.error(content) + }, + // 成功消息 + msgSuccess(content) { + Message.success(content) + }, + // 警告消息 + msgWarning(content) { + Message.warning(content) + }, + // 弹出提示 + alert(content) { + MessageBox.alert(content, "系统提示") + }, + // 错误提示 + alertError(content) { + MessageBox.alert(content, "系统提示", { type: 'error' }) + }, + // 成功提示 + alertSuccess(content) { + MessageBox.alert(content, "系统提示", { type: 'success' }) + }, + // 警告提示 + alertWarning(content) { + MessageBox.alert(content, "系统提示", { type: 'warning' }) + }, + // 通知提示 + notify(content) { + Notification.info(content) + }, + // 错误通知 + notifyError(content) { + Notification.error(content); + }, + // 成功通知 + notifySuccess(content) { + Notification.success(content) + }, + // 警告通知 + notifyWarning(content) { + Notification.warning(content) + }, + // 确认窗体 + confirm(content) { + return MessageBox.confirm(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 提交内容 + prompt(content) { + return MessageBox.prompt(content, "系统提示", { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning", + }) + }, + // 打开遮罩层 + loading(content) { + loadingInstance = Loading.service({ + lock: true, + text: content, + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 关闭遮罩层 + closeLoading() { + loadingInstance.close(); + } +} diff --git a/ssadmin-web/src/router/index.js b/ssadmin-web/src/router/index.js index e431dc9..94b08f3 100644 --- a/ssadmin-web/src/router/index.js +++ b/ssadmin-web/src/router/index.js @@ -31,6 +31,16 @@ const routes = [ } ] }, + { + path: '/system', + component: Layout, + children: [ + { + path: 'user', + component:() => import( '../views/system/user/index.vue') + } + ] + }, { path: '/login', name: 'login', diff --git a/ssadmin-web/src/store/getters.js b/ssadmin-web/src/store/getters.js new file mode 100644 index 0000000..c104976 --- /dev/null +++ b/ssadmin-web/src/store/getters.js @@ -0,0 +1,16 @@ +const getters = { + userId: state => state.user.id, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + nickname: state => state.user.nickname, + introduction: state => state.user.introduction, + roles: state => state.user.roles, + permissions: state => state.user.permissions, + permission_routes: state => state.permission.routes, + // 工具栏 + topbarRouters:state => state.permission.topbarRouters, + defaultRoutes:state => state.permission.defaultRoutes, + sidebarRouters:state => state.permission.sidebarRouters +} +export default getters diff --git a/ssadmin-web/src/store/index.js b/ssadmin-web/src/store/index.js index ceffa8e..c7a2979 100644 --- a/ssadmin-web/src/store/index.js +++ b/ssadmin-web/src/store/index.js @@ -1,17 +1,17 @@ import Vue from 'vue' import Vuex from 'vuex' +import user from './modules/user' +import permission from './modules/permission' +import getters from './getters' Vue.use(Vuex) -export default new Vuex.Store({ - state: { - }, - getters: { - }, - mutations: { - }, - actions: { - }, +const store = new Vuex.Store({ modules: { - } + user, + permission, + }, + getters }) + +export default store diff --git a/ssadmin-web/src/store/modules/permission.js b/ssadmin-web/src/store/modules/permission.js new file mode 100644 index 0000000..f26a10b --- /dev/null +++ b/ssadmin-web/src/store/modules/permission.js @@ -0,0 +1 @@ +//处理动态路由问题 diff --git a/ssadmin-web/src/store/modules/user.js b/ssadmin-web/src/store/modules/user.js new file mode 100644 index 0000000..5e796e9 --- /dev/null +++ b/ssadmin-web/src/store/modules/user.js @@ -0,0 +1,106 @@ +import {login, logout, getPermissionInfo} from '@/api/login' +import {setToken, removeToken} from '@/utils/auth' + +const user = { + state: { + id: 0, // 用户编号 + name: '', + avatar: '', + roles: [], + permissions: [] + }, + + mutations: { + SET_ID: (state, id) => { + state.id = id + }, + SET_NAME: (state, name) => { + state.name = name + }, + // SET_NICKNAME: (state, nickname) => { + // state.nickname = nickname + // }, + // SET_AVATAR: (state, avatar) => { + // state.avatar = avatar + // }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + SET_PERMISSIONS: (state, permissions) => { + state.permissions = permissions + } + }, + + actions: { + // 登录 + Login({ commit }, userInfo) { + const username = userInfo.username.trim() + const password = userInfo.password + return new Promise((resolve, reject) => { + login(username, password).then(res => { + res = res.data; + // 设置 token + setToken(res) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 获取用户信息 + GetInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getPermissionInfo().then(res => { + // 没有 data 数据,赋予个默认值 + if (!res) { + res = { + data: { + roles: [], + user: { + id: '', + avatar: '', + userName: '', + nickname: '' + } + } + } + } + + res = res.data; // 读取 data 数据 + const user = res.user + const avatar = ( user.avatar === "" || user.avatar == null ) ? require("@/assets/images/profile.jpg") : user.avatar; + if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 + commit('SET_ROLES', res.roles) + commit('SET_PERMISSIONS', res.permissions) + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']) + } + commit('SET_ID', user.id) + commit('SET_NAME', user.userName) + commit('SET_NICKNAME', user.nickname) + commit('SET_AVATAR', avatar) + resolve(res) + }).catch(error => { + reject(error) + }) + }) + }, + + // 退出系统 + LogOut({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + removeToken() + resolve() + }).catch(error => { + reject(error) + }) + }) + } + } +} + +export default user diff --git a/ssadmin-web/src/utils/common.js b/ssadmin-web/src/utils/common.js new file mode 100644 index 0000000..174ecf0 --- /dev/null +++ b/ssadmin-web/src/utils/common.js @@ -0,0 +1,9 @@ + + +// 转换字符串,undefined,null等转化为"" +export function parseStrEmpty(str) { + if (!str || str === "undefined" || str === "null") { + return ""; + } + return str; +} diff --git a/ssadmin-web/src/utils/constants.js b/ssadmin-web/src/utils/constants.js new file mode 100644 index 0000000..bddc34b --- /dev/null +++ b/ssadmin-web/src/utils/constants.js @@ -0,0 +1,24 @@ +/** + * Created by 芋道源码 + * + * 枚举类 + */ + +// ========== 静态变量 ========== + +/** + * 全局通用状态枚举 + */ +export const CommonStatusEnum = { + ENABLE: 0, // 开启 + DISABLE: 1 // 禁用 +} + +/** + * 菜单的类型枚举 + */ +export const SystemMenuTypeEnum = { + DIR: 1, // 目录 + MENU: 2, // 菜单 + BUTTON: 3 // 按钮 +} diff --git a/ssadmin-web/src/views/Login.vue b/ssadmin-web/src/views/Login.vue index a85c592..e7e2d4c 100644 --- a/ssadmin-web/src/views/Login.vue +++ b/ssadmin-web/src/views/Login.vue @@ -46,17 +46,18 @@ export default { this.$refs.form.validate(valid => { if (valid) { this.loading = true + this.$router.push({ path: '/' }) // 登录处理逻辑中增加网络请求 - login(this.loginForm.username,this.loginForm.password).then(res =>{ - // 假设res.data.token是从后端接口返回的token - console.log(res.data.accessToken) - setToken(res.data.accessToken) - this.$router.push({ path: '/' }) - }).catch(() => { - // 登录失败,显示错误提示 - this.$message.error('用户名或密码错误') - this.loading = false - }) + // login(this.loginForm.username,this.loginForm.password).then(res =>{ + // // 假设res.data.token是从后端接口返回的token + // console.log(res.data.accessToken) + // setToken(res.data.accessToken) + // this.$router.push({ path: '/' }) + // }).catch(() => { + // // 登录失败,显示错误提示 + // this.$message.error('用户名或密码错误') + // this.loading = false + // }) } }) } diff --git a/ssadmin-web/src/views/system/user/index.vue b/ssadmin-web/src/views/system/user/index.vue new file mode 100644 index 0000000..c395633 --- /dev/null +++ b/ssadmin-web/src/views/system/user/index.vue @@ -0,0 +1,354 @@ + + + diff --git a/ssadmin-web/src/views/system/user/profile/index.vue b/ssadmin-web/src/views/system/user/profile/index.vue new file mode 100644 index 0000000..54b19c1 --- /dev/null +++ b/ssadmin-web/src/views/system/user/profile/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/ssadmin-web/yarn.lock b/ssadmin-web/yarn.lock index 98d4753..c1ce355 100644 --- a/ssadmin-web/yarn.lock +++ b/ssadmin-web/yarn.lock @@ -4,7 +4,7 @@ "@achrinza/node-ipc@^9.2.5": version "9.2.8" - resolved "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz#aabfe9fe84406c90bfb7319d5e68b5b517dd8686" + resolved "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz" integrity sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg== dependencies: "@node-ipc/js-queue" "2.0.3" @@ -13,7 +13,7 @@ "@ampproject/remapping@^2.2.0": version "2.2.1" - resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" @@ -21,7 +21,7 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": version "7.22.13" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: "@babel/highlight" "^7.22.13" @@ -29,12 +29,12 @@ "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.2.tgz" integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== "@babel/core@^7.12.16": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.23.2.tgz" integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== dependencies: "@ampproject/remapping" "^2.2.0" @@ -55,7 +55,7 @@ "@babel/generator@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.0.tgz" integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== dependencies: "@babel/types" "^7.23.0" @@ -65,21 +65,21 @@ "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" "@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: "@babel/compat-data" "^7.22.9" @@ -90,7 +90,7 @@ "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -105,7 +105,7 @@ "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -114,7 +114,7 @@ "@babel/helper-define-polyfill-provider@^0.4.3": version "0.4.3" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" + resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz" integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: "@babel/helper-compilation-targets" "^7.22.6" @@ -125,12 +125,12 @@ "@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: "@babel/template" "^7.22.15" @@ -138,28 +138,28 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" "@babel/helper-member-expression-to-functions@^7.22.15": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz" integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -170,19 +170,19 @@ "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: "@babel/types" "^7.22.5" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -191,7 +191,7 @@ "@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -200,43 +200,43 @@ "@babel/helper-simple-access@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: "@babel/types" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: "@babel/types" "^7.22.5" "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== "@babel/helper-validator-option@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== "@babel/helper-wrap-function@^7.22.20": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: "@babel/helper-function-name" "^7.22.5" @@ -245,7 +245,7 @@ "@babel/helpers@^7.23.2": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.2.tgz" integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== dependencies: "@babel/template" "^7.22.15" @@ -254,7 +254,7 @@ "@babel/highlight@^7.22.13": version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz" integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: "@babel/helper-validator-identifier" "^7.22.20" @@ -263,19 +263,19 @@ "@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz" integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz" integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -284,7 +284,7 @@ "@babel/plugin-proposal-class-properties@^7.12.13": version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" @@ -292,7 +292,7 @@ "@babel/plugin-proposal-decorators@^7.12.13": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz#0b345a5754f48309fa50b7cd99075ef0295b12c8" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz" integrity sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.15" @@ -303,145 +303,145 @@ "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-decorators@^7.22.10": version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz" integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-assertions@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz" integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-attributes@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz" integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" @@ -449,14 +449,14 @@ "@babel/plugin-transform-arrow-functions@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz" integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-async-generator-functions@^7.23.2": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz" integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" @@ -466,7 +466,7 @@ "@babel/plugin-transform-async-to-generator@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz" integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== dependencies: "@babel/helper-module-imports" "^7.22.5" @@ -475,21 +475,21 @@ "@babel/plugin-transform-block-scoped-functions@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz" integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-block-scoping@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz" integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-class-properties@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz" integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.5" @@ -497,7 +497,7 @@ "@babel/plugin-transform-class-static-block@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz" integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.11" @@ -506,7 +506,7 @@ "@babel/plugin-transform-classes@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz" integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -521,7 +521,7 @@ "@babel/plugin-transform-computed-properties@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz" integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -529,14 +529,14 @@ "@babel/plugin-transform-destructuring@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz" integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dotall-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz" integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" @@ -544,14 +544,14 @@ "@babel/plugin-transform-duplicate-keys@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz" integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dynamic-import@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz" integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -559,7 +559,7 @@ "@babel/plugin-transform-exponentiation-operator@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz" integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" @@ -567,7 +567,7 @@ "@babel/plugin-transform-export-namespace-from@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz" integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -575,14 +575,14 @@ "@babel/plugin-transform-for-of@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz" integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-function-name@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz" integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: "@babel/helper-compilation-targets" "^7.22.5" @@ -591,7 +591,7 @@ "@babel/plugin-transform-json-strings@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz" integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -599,14 +599,14 @@ "@babel/plugin-transform-literals@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz" integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-logical-assignment-operators@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz" integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -614,14 +614,14 @@ "@babel/plugin-transform-member-expression-literals@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz" integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-modules-amd@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz" integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== dependencies: "@babel/helper-module-transforms" "^7.23.0" @@ -629,7 +629,7 @@ "@babel/plugin-transform-modules-commonjs@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz" integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== dependencies: "@babel/helper-module-transforms" "^7.23.0" @@ -638,7 +638,7 @@ "@babel/plugin-transform-modules-systemjs@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz" integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== dependencies: "@babel/helper-hoist-variables" "^7.22.5" @@ -648,7 +648,7 @@ "@babel/plugin-transform-modules-umd@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz" integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: "@babel/helper-module-transforms" "^7.22.5" @@ -656,7 +656,7 @@ "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" @@ -664,14 +664,14 @@ "@babel/plugin-transform-new-target@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz" integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz" integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -679,7 +679,7 @@ "@babel/plugin-transform-numeric-separator@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz" integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -687,7 +687,7 @@ "@babel/plugin-transform-object-rest-spread@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz" integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== dependencies: "@babel/compat-data" "^7.22.9" @@ -698,7 +698,7 @@ "@babel/plugin-transform-object-super@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz" integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -706,7 +706,7 @@ "@babel/plugin-transform-optional-catch-binding@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz" integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -714,7 +714,7 @@ "@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz" integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -723,14 +723,14 @@ "@babel/plugin-transform-parameters@^7.22.15": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz" integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-private-methods@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz" integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.5" @@ -738,7 +738,7 @@ "@babel/plugin-transform-private-property-in-object@^7.22.11": version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz" integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" @@ -748,14 +748,14 @@ "@babel/plugin-transform-property-literals@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz" integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-regenerator@^7.22.10": version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz" integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -763,14 +763,14 @@ "@babel/plugin-transform-reserved-words@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz" integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.12.15": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz#c956a3f8d1aa50816ff6c30c6288d66635c12990" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz" integrity sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA== dependencies: "@babel/helper-module-imports" "^7.22.15" @@ -782,14 +782,14 @@ "@babel/plugin-transform-shorthand-properties@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz" integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-spread@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz" integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -797,35 +797,35 @@ "@babel/plugin-transform-sticky-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz" integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-template-literals@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz" integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typeof-symbol@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz" integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-unicode-escapes@^7.22.10": version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz" integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-unicode-property-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz" integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" @@ -833,7 +833,7 @@ "@babel/plugin-transform-unicode-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz" integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" @@ -841,7 +841,7 @@ "@babel/plugin-transform-unicode-sets-regex@^7.22.5": version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz" integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.5" @@ -849,7 +849,7 @@ "@babel/preset-env@^7.12.16": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059" + resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.2.tgz" integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== dependencies: "@babel/compat-data" "^7.23.2" @@ -935,7 +935,7 @@ "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" - resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -944,19 +944,19 @@ "@babel/regjsgen@^0.8.0": version "0.8.0" - resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.2.tgz" integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: regenerator-runtime "^0.14.0" "@babel/template@^7.22.15", "@babel/template@^7.22.5": version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: "@babel/code-frame" "^7.22.13" @@ -965,7 +965,7 @@ "@babel/traverse@^7.22.5", "@babel/traverse@^7.23.2": version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.2.tgz" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== dependencies: "@babel/code-frame" "^7.22.13" @@ -981,7 +981,7 @@ "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.0.tgz" integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== dependencies: "@babel/helper-string-parser" "^7.22.5" @@ -990,24 +990,24 @@ "@discoveryjs/json-ext@0.5.7": version "0.5.7" - resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== "@hapi/hoek@^9.0.0": version "9.3.0" - resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== "@hapi/topo@^5.0.0": version "5.1.0" - resolved "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + resolved "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz" integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: "@hapi/hoek" "^9.0.0" "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" @@ -1016,17 +1016,17 @@ "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" - resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": version "0.3.5" - resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz" integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" @@ -1034,12 +1034,12 @@ "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.20" - resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -1047,19 +1047,19 @@ "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" - resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== "@node-ipc/js-queue@2.0.3": version "2.0.3" - resolved "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz#ac7fe33d766fa53e233ef8fedaf3443a01c5a4cd" + resolved "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz" integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw== dependencies: easy-stack "1.0.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1067,12 +1067,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1080,29 +1080,29 @@ "@polka/url@^1.0.0-next.20": version "1.0.0-next.23" - resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c" + resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.23.tgz" integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== "@sideway/address@^4.1.3": version "4.1.4" - resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz" integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== dependencies: "@hapi/hoek" "^9.0.0" "@sideway/formula@^3.0.1": version "3.0.1" - resolved "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + resolved "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz" integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== "@sideway/pinpoint@^2.0.0": version "2.0.0" - resolved "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + resolved "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@soda/friendly-errors-webpack-plugin@^1.8.0": version "1.8.1" - resolved "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz#4d4fbb1108993aaa362116247c3d18188a2c6c85" + resolved "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz" integrity sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg== dependencies: chalk "^3.0.0" @@ -1112,17 +1112,17 @@ "@soda/get-current-script@^1.0.2": version "1.0.2" - resolved "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87" + resolved "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz" integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== "@trysound/sax@0.2.0": version "0.2.0" - resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/body-parser@*": version "1.19.4" - resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.4.tgz#78ad68f1f79eb851aa3634db0c7f57f6f601b462" + resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.4.tgz" integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA== dependencies: "@types/connect" "*" @@ -1130,14 +1130,14 @@ "@types/bonjour@^3.5.9": version "3.5.12" - resolved "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.12.tgz#49badafb988e6c433ca675a5fd769b93b7649fc8" + resolved "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.12.tgz" integrity sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": version "1.5.2" - resolved "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz#acf51e088b3bb6507f7b093bd2b0de20940179cc" + resolved "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz" integrity sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q== dependencies: "@types/express-serve-static-core" "*" @@ -1145,14 +1145,14 @@ "@types/connect@*": version "3.4.37" - resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.37.tgz#c66a96689fd3127c8772eb3e9e5c6028ec1a9af5" + resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.37.tgz" integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q== dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.3": version "3.7.6" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz#585578b368ed170e67de8aae7b93f54a1b2fdc26" + resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz" integrity sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ== dependencies: "@types/eslint" "*" @@ -1160,7 +1160,7 @@ "@types/eslint@*": version "8.44.6" - resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.6.tgz#60e564551966dd255f4c01c459f0b4fb87068603" + resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.6.tgz" integrity sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw== dependencies: "@types/estree" "*" @@ -1168,12 +1168,12 @@ "@types/estree@*", "@types/estree@^1.0.0": version "1.0.3" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.3.tgz#2be19e759a3dd18c79f9f436bd7363556c1a73dd" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.3.tgz" integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": version "4.17.39" - resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz#2107afc0a4b035e6cb00accac3bdf2d76ae408c8" + resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz" integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ== dependencies: "@types/node" "*" @@ -1183,7 +1183,7 @@ "@types/express@*", "@types/express@^4.17.13": version "4.17.20" - resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.20.tgz#e7c9b40276d29e38a4e3564d7a3d65911e2aa433" + resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.20.tgz" integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== dependencies: "@types/body-parser" "*" @@ -1193,76 +1193,71 @@ "@types/html-minifier-terser@^6.0.0": version "6.1.0" - resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-errors@*": version "2.0.3" - resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.3.tgz#c54e61f79b3947d040f150abd58f71efb422ff62" + resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.3.tgz" integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA== "@types/http-proxy@^1.17.8": version "1.17.13" - resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.13.tgz#dd3a4da550580eb0557d4c7128a2ff1d1a38d465" + resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.13.tgz" integrity sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw== dependencies: "@types/node" "*" "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.14" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" + resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.14.tgz" integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== -"@types/mime@*": - version "3.0.3" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-3.0.3.tgz#886674659ce55fe7c6c06ec5ca7c0eb276a08f91" - integrity sha512-i8MBln35l856k5iOhKk2XJ4SeAWg75mLIpZB4v6imOagKL6twsukBZGDMNhdOVk7yRFTMPpfILocMos59Q1otQ== - -"@types/mime@^1": +"@types/mime@*", "@types/mime@^1": version "1.3.4" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.4.tgz#a4ed836e069491414bab92c31fdea9e557aca0d9" + resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.4.tgz" integrity sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw== "@types/minimist@^1.2.0": version "1.2.4" - resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.4.tgz#81f886786411c45bba3f33e781ab48bd56bfca2e" + resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.4.tgz" integrity sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ== "@types/node@*": version "20.8.9" - resolved "https://registry.npmmirror.com/@types/node/-/node-20.8.9.tgz#646390b4fab269abce59c308fc286dcd818a2b08" + resolved "https://registry.npmmirror.com/@types/node/-/node-20.8.9.tgz" integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg== dependencies: undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": version "2.4.3" - resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c" + resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz" integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== "@types/parse-json@^4.0.0": version "4.0.1" - resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.1.tgz#27f7559836ad796cea31acb63163b203756a5b4e" + resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.1.tgz" integrity sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng== "@types/qs@*": version "6.9.9" - resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.9.tgz#66f7b26288f6799d279edf13da7ccd40d2fa9197" + resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.9.tgz" integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg== "@types/range-parser@*": version "1.2.6" - resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.6.tgz#7cb33992049fd7340d5b10c0098e104184dfcd2a" + resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.6.tgz" integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA== "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/send@*": version "0.17.3" - resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.3.tgz#81b2ea5a3a18aad357405af2d643ccbe5a09020b" + resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.3.tgz" integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug== dependencies: "@types/mime" "^1" @@ -1270,14 +1265,14 @@ "@types/serve-index@^1.9.1": version "1.9.3" - resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.3.tgz#af9403916eb6fbf7d6ec6f47b2a4c46eb3222cc9" + resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.3.tgz" integrity sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": version "1.15.4" - resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.4.tgz#44b5895a68ca637f06c229119e1c774ca88f81b2" + resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.4.tgz" integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw== dependencies: "@types/http-errors" "*" @@ -1286,31 +1281,31 @@ "@types/sockjs@^0.3.33": version "0.3.35" - resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.35.tgz#f4a568c73d2a8071944bd6ffdca0d4e66810cd21" + resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.35.tgz" integrity sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw== dependencies: "@types/node" "*" "@types/ws@^8.5.5": version "8.5.8" - resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.8.tgz#13efec7bd439d0bdf2af93030804a94f163b1430" + resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.8.tgz" integrity sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg== dependencies: "@types/node" "*" "@vue/babel-helper-vue-jsx-merge-props@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz#8d53a1e21347db8edbe54d339902583176de09f2" + resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz" integrity sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA== "@vue/babel-helper-vue-transform-on@^1.1.5": version "1.1.5" - resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz#a976486b21e108e545524fe41ffe3fc9bbc28c7f" + resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz" integrity sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w== "@vue/babel-plugin-jsx@^1.0.3": version "1.1.5" - resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz#5088bae7dbb83531d94df3742ff650c12fd54973" + resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz" integrity sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g== dependencies: "@babel/helper-module-imports" "^7.22.5" @@ -1325,7 +1320,7 @@ "@vue/babel-plugin-transform-vue-jsx@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz#4d4b3d46a39ea62b7467dd6e26ce47f7ceafb2fe" + resolved "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz" integrity sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA== dependencies: "@babel/helper-module-imports" "^7.0.0" @@ -1337,7 +1332,7 @@ "@vue/babel-preset-app@^5.0.8": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz#ce38f76314f5265d62a89756ef264c21f1d351a1" + resolved "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz" integrity sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg== dependencies: "@babel/core" "^7.12.16" @@ -1359,7 +1354,7 @@ "@vue/babel-preset-jsx@^1.1.2": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz#f4914ba314235ab097bc4372ed67473c0780bfcc" + resolved "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz" integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== dependencies: "@vue/babel-helper-vue-jsx-merge-props" "^1.4.0" @@ -1373,35 +1368,35 @@ "@vue/babel-sugar-composition-api-inject-h@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz#187e1389f8871d89ece743bb50aed713be9d6c85" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz" integrity sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-sugar-composition-api-render-instance@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz#2c1607ae6dffdab47e785bc01fa45ba756e992c1" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz" integrity sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-sugar-functional-vue@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz#60da31068567082287c7337c66ef4df04e0a1029" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz" integrity sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-sugar-inject-h@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz#bf39aa6631fb1d0399b1c49b4c59e1c8899b4363" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz" integrity sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" "@vue/babel-sugar-v-model@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz#a51d986609f430c4f70ada3a93cc560a2970f720" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz" integrity sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" @@ -1413,7 +1408,7 @@ "@vue/babel-sugar-v-on@^1.4.0": version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz#43b7106a9672d8cbeefc0eb8afe1d376edc6166e" + resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz" integrity sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA== dependencies: "@babel/plugin-syntax-jsx" "^7.2.0" @@ -1422,12 +1417,12 @@ "@vue/cli-overlay@^5.0.8": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz#b61477acdc43bbd42fce6326d228471201ecdcdd" + resolved "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz" integrity sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ== "@vue/cli-plugin-babel@~5.0.0": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz#54f9a07900f29baff54803dcfa916c602894feb7" + resolved "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz" integrity sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ== dependencies: "@babel/core" "^7.12.16" @@ -1439,19 +1434,19 @@ "@vue/cli-plugin-router@^5.0.8", "@vue/cli-plugin-router@~5.0.0": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz#a113ec626f3d4216d20496c42d35533bce9e889f" + resolved "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz" integrity sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg== dependencies: "@vue/cli-shared-utils" "^5.0.8" "@vue/cli-plugin-vuex@^5.0.8", "@vue/cli-plugin-vuex@~5.0.0": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz#0d4cb3020f9102bea9288d750729dde176c66ccd" + resolved "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz" integrity sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA== "@vue/cli-service@~5.0.0": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz#cf3f6f1b7bf0fba9cdab86b6bec4f9897f982dac" + resolved "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz" integrity sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw== dependencies: "@babel/helper-compilation-targets" "^7.12.16" @@ -1512,7 +1507,7 @@ "@vue/cli-shared-utils@^5.0.8": version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz#75fc96528eba2b1c7e33cb7e989a984ddef99c8a" + resolved "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz" integrity sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ== dependencies: "@achrinza/node-ipc" "^9.2.5" @@ -1530,7 +1525,7 @@ "@vue/compiler-sfc@2.7.15": version "2.7.15" - resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz#62135fb2f69559fc723fd9c56b8e8b0ac7864a0b" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz" integrity sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg== dependencies: "@babel/parser" "^7.18.4" @@ -1539,7 +1534,7 @@ "@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0": version "3.3.0" - resolved "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz#f9f5fb53464b0c37b2c8d2f3fbfe44df60f61dc9" + resolved "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz" integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== dependencies: consolidate "^0.15.1" @@ -1555,7 +1550,7 @@ "@vue/vue-loader-v15@npm:vue-loader@^15.9.7": version "15.11.1" - resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz#dee91169211276ed43c5715caef88a56b1f497b0" + resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz" integrity sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q== dependencies: "@vue/component-compiler-utils" "^3.1.0" @@ -1566,12 +1561,12 @@ "@vue/web-component-wrapper@^1.3.0": version "1.3.0" - resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" + resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz" integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== "@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz" integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== dependencies: "@webassemblyjs/helper-numbers" "1.11.6" @@ -1579,22 +1574,22 @@ "@webassemblyjs/floating-point-hex-parser@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== "@webassemblyjs/helper-api-error@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== "@webassemblyjs/helper-buffer@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== "@webassemblyjs/helper-numbers@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: "@webassemblyjs/floating-point-hex-parser" "1.11.6" @@ -1603,12 +1598,12 @@ "@webassemblyjs/helper-wasm-bytecode@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== "@webassemblyjs/helper-wasm-section@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1618,26 +1613,26 @@ "@webassemblyjs/ieee754@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" "@webassemblyjs/leb128@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" "@webassemblyjs/utf8@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== "@webassemblyjs/wasm-edit@^1.11.5": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1651,7 +1646,7 @@ "@webassemblyjs/wasm-gen@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1662,7 +1657,7 @@ "@webassemblyjs/wasm-opt@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1672,7 +1667,7 @@ "@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1684,7 +1679,7 @@ "@webassemblyjs/wast-printer@1.11.6": version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== dependencies: "@webassemblyjs/ast" "1.11.6" @@ -1692,17 +1687,17 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -1710,46 +1705,46 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: acorn-import-assertions@^1.9.0: version "1.9.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn-walk@^8.0.0, acorn-walk@^8.0.2: version "8.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.0.4, acorn@^8.0.5, acorn@^8.7.1, acorn@^8.8.2: version "8.10.0" - resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.1.2: version "1.2.2" - resolved "https://registry.npmmirror.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + resolved "https://registry.npmmirror.com/address/-/address-1.2.2.tgz" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== ajv-keywords@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== dependencies: fast-deep-equal "^3.1.3" ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1759,7 +1754,7 @@ ajv@^6.12.4, ajv@^6.12.5: ajv@^8.0.0, ajv@^8.9.0: version "8.12.0" - resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -1769,46 +1764,46 @@ ajv@^8.0.0, ajv@^8.9.0: ansi-escapes@^3.0.0: version "3.2.0" - resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-html-community@^0.0.8: version "0.0.8" - resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz" integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -1816,51 +1811,51 @@ anymatch@~3.1.2: arch@^2.1.1: version "2.2.0" - resolved "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + resolved "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-flatten@^2.1.2: version "2.1.2" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== async-validator@~1.8.1: version "1.8.5" - resolved "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz" integrity sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA== dependencies: babel-runtime "6.x" async@^2.6.4: version "2.6.4" - resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz" integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== autoprefixer@^10.2.4: version "10.4.16" - resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.16.tgz" integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== dependencies: browserslist "^4.21.10" @@ -1872,7 +1867,7 @@ autoprefixer@^10.2.4: axios@^1.6.0: version "1.6.0" - resolved "https://registry.npmmirror.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" + resolved "https://registry.npmmirror.com/axios/-/axios-1.6.0.tgz" integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== dependencies: follow-redirects "^1.15.0" @@ -1881,12 +1876,12 @@ axios@^1.6.0: babel-helper-vue-jsx-merge-props@^2.0.0: version "2.0.3" - resolved "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" + resolved "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz" integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== babel-loader@^8.2.2: version "8.3.0" - resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz" integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" @@ -1896,14 +1891,14 @@ babel-loader@^8.2.2: babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" - resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" babel-plugin-polyfill-corejs2@^0.4.6: version "0.4.6" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz" integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: "@babel/compat-data" "^7.22.6" @@ -1912,7 +1907,7 @@ babel-plugin-polyfill-corejs2@^0.4.6: babel-plugin-polyfill-corejs3@^0.8.5: version "0.8.6" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz" integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== dependencies: "@babel/helper-define-polyfill-provider" "^0.4.3" @@ -1920,14 +1915,14 @@ babel-plugin-polyfill-corejs3@^0.8.5: babel-plugin-polyfill-regenerator@^0.5.3: version "0.5.3" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz" integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: "@babel/helper-define-polyfill-provider" "^0.4.3" babel-runtime@6.x: version "6.26.0" - resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz" integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" @@ -1935,32 +1930,32 @@ babel-runtime@6.x: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== batch@0.6.1: version "0.6.1" - resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz" integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== big.js@^5.2.2: version "5.2.2" - resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1969,12 +1964,12 @@ bl@^4.1.0: bluebird@^3.1.1: version "3.7.2" - resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== body-parser@1.20.1: version "1.20.1" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -1992,7 +1987,7 @@ body-parser@1.20.1: bonjour-service@^1.0.11: version "1.1.1" - resolved "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + resolved "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz" integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== dependencies: array-flatten "^2.1.2" @@ -2002,12 +1997,12 @@ bonjour-service@^1.0.11: boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2015,14 +2010,14 @@ brace-expansion@^1.1.7: braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: version "4.22.1" - resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.1.tgz" integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== dependencies: caniuse-lite "^1.0.30001541" @@ -2032,12 +2027,12 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4 buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -2045,17 +2040,17 @@ buffer@^5.5.0: bytes@3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.5" - resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.5.tgz" integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: function-bind "^1.1.2" @@ -2064,12 +2059,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -2077,17 +2072,17 @@ camel-case@^4.1.2: camelcase@^5.0.0: version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.3.0: version "6.3.0" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-api@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz" integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== dependencies: browserslist "^4.0.0" @@ -2097,17 +2092,17 @@ caniuse-api@^3.0.0: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: version "1.0.30001554" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz#ba80d88dff9acbc0cd4b7535fc30e0191c5e2e2a" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz" integrity sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ== case-sensitive-paths-webpack-plugin@^2.3.0: version "2.4.0" - resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== chalk@^2.1.0, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -2116,7 +2111,7 @@ chalk@^2.1.0, chalk@^2.4.2: chalk@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + resolved "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" @@ -2124,7 +2119,7 @@ chalk@^3.0.0: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2132,7 +2127,7 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.5.3" - resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -2147,33 +2142,33 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: chrome-trace-event@^1.0.2: version "1.0.3" - resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== clean-css@^5.2.2: version "5.3.2" - resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz" integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== dependencies: source-map "~0.6.0" cli-cursor@^2.0.0: version "2.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz" integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== dependencies: restore-cursor "^2.0.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-highlight@^2.1.10: version "2.1.11" - resolved "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + resolved "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz" integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== dependencies: chalk "^4.0.0" @@ -2185,12 +2180,12 @@ cli-highlight@^2.1.10: cli-spinners@^2.5.0: version "2.9.1" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" + resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz" integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== clipboardy@^2.3.0: version "2.3.0" - resolved "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + resolved "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz" integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== dependencies: arch "^2.1.1" @@ -2199,7 +2194,7 @@ clipboardy@^2.3.0: cliui@^7.0.2, cliui@^7.0.4: version "7.0.4" - resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -2208,7 +2203,7 @@ cliui@^7.0.2, cliui@^7.0.4: clone-deep@^4.0.1: version "4.0.1" - resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -2217,80 +2212,80 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: version "2.9.3" - resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10: version "2.0.20" - resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz" 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" + resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.20.0: version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^7.2.0: version "7.2.0" - resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commander@^8.3.0: version "8.3.0" - resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compressible@~2.0.16: version "2.0.18" - resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -2303,51 +2298,51 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== connect-history-api-fallback@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consolidate@^0.15.1: version "0.15.1" - resolved "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + resolved "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz" integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== dependencies: bluebird "^3.1.1" content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.5" - resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== copy-webpack-plugin@^9.0.1: version "9.1.0" - resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz#2d2c460c4c4695ec0a58afb2801a1205256c4e6b" + resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz" integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== dependencies: fast-glob "^3.2.7" @@ -2359,29 +2354,29 @@ copy-webpack-plugin@^9.0.1: core-js-compat@^3.31.0, core-js-compat@^3.33.1, core-js-compat@^3.8.3: version "3.33.1" - resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.33.1.tgz#debe80464107d75419e00c2ee29f35982118ff84" + resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.33.1.tgz" integrity sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ== dependencies: browserslist "^4.22.1" core-js@^2.4.0: version "2.6.12" - resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.8.3: version "3.33.1" - resolved "https://registry.npmmirror.com/core-js/-/core-js-3.33.1.tgz#ef3766cfa382482d0a2c2bc5cb52c6d88805da52" + resolved "https://registry.npmmirror.com/core-js/-/core-js-3.33.1.tgz" integrity sha512-qVSq3s+d4+GsqN0teRCJtM6tdEEXyWxjzbhVrCHmBS5ZTM0FS2MOS0D13dUXAWDUN6a+lHI/N1hF9Ytz6iLl9Q== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig@^7.0.0: version "7.1.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -2392,7 +2387,7 @@ cosmiconfig@^7.0.0: cross-spawn@^6.0.0: version "6.0.5" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -2403,7 +2398,7 @@ cross-spawn@^6.0.0: cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -2412,12 +2407,12 @@ cross-spawn@^7.0.3: css-declaration-sorter@^6.3.1: version "6.4.1" - resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz" integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== css-loader@^6.5.0: version "6.8.1" - resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz" integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== dependencies: icss-utils "^5.1.0" @@ -2431,7 +2426,7 @@ css-loader@^6.5.0: css-minimizer-webpack-plugin@^3.0.2: version "3.4.1" - resolved "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz#ab78f781ced9181992fe7b6e4f3422e76429878f" + resolved "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== dependencies: cssnano "^5.0.6" @@ -2443,7 +2438,7 @@ css-minimizer-webpack-plugin@^3.0.2: css-select@^4.1.3: version "4.3.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -2454,7 +2449,7 @@ css-select@^4.1.3: css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" - resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" @@ -2462,17 +2457,17 @@ css-tree@^1.1.2, css-tree@^1.1.3: css-what@^6.0.1: version "6.1.0" - resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssnano-preset-default@^5.2.14: version "5.2.14" - resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== dependencies: css-declaration-sorter "^6.3.1" @@ -2507,12 +2502,12 @@ cssnano-preset-default@^5.2.14: cssnano-utils@^3.1.0: version "3.1.0" - resolved "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + resolved "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.0.0, cssnano@^5.0.6: version "5.1.15" - resolved "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + resolved "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz" integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== dependencies: cssnano-preset-default "^5.2.14" @@ -2521,64 +2516,64 @@ cssnano@^5.0.0, cssnano@^5.0.6: csso@^4.2.0: version "4.2.0" - resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" csstype@^3.1.0: version "3.1.2" - resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== de-indent@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz" integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== debug@2.6.9: version "2.6.9" - resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.1.0, debug@^4.1.1: version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" deepmerge@^1.2.0, deepmerge@^1.5.2: version "1.5.2" - resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz" integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== default-gateway@^6.0.3: version "6.0.3" - resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz" integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: execa "^5.0.0" defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" define-data-property@^1.0.1, define-data-property@^1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz" integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" @@ -2587,12 +2582,12 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: define-lazy-prop@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.4: version "1.2.1" - resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -2601,58 +2596,58 @@ define-properties@^1.1.4: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-node@^2.0.4: version "2.1.0" - resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dns-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + resolved "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz" integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^5.2.2: version "5.6.1" - resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" dom-serializer@^1.0.1: version "1.4.1" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz" integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" @@ -2661,19 +2656,19 @@ dom-serializer@^1.0.1: domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -2682,7 +2677,7 @@ domutils@^2.5.2, domutils@^2.8.0: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -2690,37 +2685,37 @@ dot-case@^3.0.4: dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== dotenv@^10.0.0: version "10.0.0" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== duplexer@^0.1.2: version "0.1.2" - resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== easy-stack@1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" + resolved "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz" integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.535: version "1.4.567" - resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz#c92e8fbc2bd15df3068d92571733a218a5413add" + resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz" integrity sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w== element-ui@^2.15.14: version "2.15.14" - resolved "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz#3c34df79467636592812d720d2e6784e7a6ec2ea" + resolved "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz" integrity sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA== dependencies: async-validator "~1.8.1" @@ -2732,29 +2727,29 @@ element-ui@^2.15.14: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" enhanced-resolve@^5.15.0: version "5.15.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" @@ -2762,51 +2757,51 @@ enhanced-resolve@^5.15.0: entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: version "2.1.4" - resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz" integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: stackframe "^1.3.4" es-module-lexer@^1.2.1: version "1.3.1" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" + resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz" integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-scope@5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -2814,49 +2809,49 @@ eslint-scope@5.1.1: esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-pubsub@4.3.0: version "4.3.0" - resolved "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" + resolved "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz" integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: version "3.3.0" - resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -2869,7 +2864,7 @@ execa@^1.0.0: execa@^5.0.0: version "5.1.1" - resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2884,7 +2879,7 @@ execa@^5.0.0: express@^4.17.3: version "4.18.2" - resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -2921,12 +2916,12 @@ express@^4.17.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.3.1" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2937,40 +2932,40 @@ fast-glob@^3.2.7, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" faye-websocket@^0.11.3: version "0.11.4" - resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" figures@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz" integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -2983,7 +2978,7 @@ finalhandler@1.2.0: find-cache-dir@^3.3.1: version "3.3.2" - resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" @@ -2992,7 +2987,7 @@ find-cache-dir@^3.3.1: find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -3000,17 +2995,17 @@ find-up@^4.0.0, find-up@^4.1.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== follow-redirects@^1.0.0, follow-redirects@^1.15.0: version "1.15.3" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz" integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -3019,22 +3014,22 @@ form-data@^4.0.0: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fraction.js@^4.3.6: version "4.3.7" - resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -3044,37 +3039,37 @@ fs-extra@^9.1.0: fs-monkey@^1.0.4: version "1.0.5" - resolved "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" + resolved "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.5.tgz" integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: version "1.2.2" - resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz" integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: function-bind "^1.1.2" @@ -3084,38 +3079,38 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@ get-stream@^4.0.0: version "4.1.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.1: version "6.0.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob-to-regexp@^0.4.1: version "0.4.1" - resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^7.1.3: version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -3127,12 +3122,12 @@ glob@^7.1.3: globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^11.0.2, globby@^11.0.3: version "11.1.0" - resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -3144,90 +3139,90 @@ globby@^11.0.2, globby@^11.0.3: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== gzip-size@^6.0.0: version "6.0.0" - resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz" integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== dependencies: duplexer "^0.1.2" handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== hash-sum@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz" integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== hash-sum@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz" integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== hasown@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz" integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: function-bind "^1.1.2" he@^1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== highlight.js@^10.7.1: version "10.7.3" - resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz" integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" @@ -3237,12 +3232,12 @@ hpack.js@^2.1.6: html-entities@^2.3.2: version "2.4.0" - resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz" integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== html-minifier-terser@^6.0.2: version "6.1.0" - resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: camel-case "^4.1.2" @@ -3255,17 +3250,17 @@ html-minifier-terser@^6.0.2: html-tags@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + resolved "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz" integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== html-tags@^3.3.1: version "3.3.1" - resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== html-webpack-plugin@^5.1.0: version "5.5.3" - resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" + resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz" integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== dependencies: "@types/html-minifier-terser" "^6.0.0" @@ -3276,7 +3271,7 @@ html-webpack-plugin@^5.1.0: htmlparser2@^6.1.0: version "6.1.0" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz" integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" @@ -3286,12 +3281,12 @@ htmlparser2@^6.1.0: http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -3302,7 +3297,7 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz" integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" @@ -3312,12 +3307,12 @@ http-errors@~1.6.2: http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-middleware@^2.0.3: version "2.0.6" - resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== dependencies: "@types/http-proxy" "^1.17.8" @@ -3328,7 +3323,7 @@ http-proxy-middleware@^2.0.3: http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" @@ -3337,39 +3332,39 @@ http-proxy@^1.18.1: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.2.4" - resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immutable@^4.0.0: version "4.3.4" - resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" + resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz" integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3377,7 +3372,7 @@ import-fresh@^3.2.1: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -3385,149 +3380,149 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: version "2.1.0" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz" integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-core-module@^2.13.0: version "2.13.1" - resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-file-esm@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz#987086b0f5a5318179e9d30f4f2f8d37321e1b5f" + resolved "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz" integrity sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA== dependencies: read-pkg-up "^7.0.1" is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-stream@^1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz" integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@~1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" - resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== javascript-stringify@^2.0.1: version "2.1.0" - resolved "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + resolved "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz" integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== jest-worker@^27.0.2, jest-worker@^27.4.5: version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" @@ -3536,7 +3531,7 @@ jest-worker@^27.0.2, jest-worker@^27.4.5: joi@^17.4.0: version "17.11.0" - resolved "https://registry.npmmirror.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" + resolved "https://registry.npmmirror.com/joi/-/joi-17.11.0.tgz" integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== dependencies: "@hapi/hoek" "^9.0.0" @@ -3547,59 +3542,59 @@ joi@^17.4.0: js-message@1.0.7: version "1.0.7" - resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" + resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz" integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-better-errors@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json5@^1.0.1: version "1.0.2" - resolved "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.1.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -3608,24 +3603,24 @@ jsonfile@^6.0.1: kind-of@^6.0.2: version "6.0.3" - resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klona@^2.0.4, klona@^2.0.5: version "2.0.6" - resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== launch-editor-middleware@^2.2.1: version "2.6.1" - resolved "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz#7f2f400d8dda2283b69d02e9d83b1d272fef2bfb" + resolved "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz" integrity sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g== dependencies: launch-editor "^2.6.1" launch-editor@^2.2.1, launch-editor@^2.6.0, launch-editor@^2.6.1: version "2.6.1" - resolved "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + resolved "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.1.tgz" integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== dependencies: picocolors "^1.0.0" @@ -3633,22 +3628,22 @@ launch-editor@^2.2.1, launch-editor@^2.6.0, launch-editor@^2.6.1: lilconfig@^2.0.3: version "2.1.0" - resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== loader-runner@^4.1.0, loader-runner@^4.2.0: version "4.3.0" - resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.4.2" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== dependencies: big.js "^5.2.2" @@ -3657,7 +3652,7 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: loader-utils@^2.0.0: version "2.0.4" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" @@ -3666,74 +3661,74 @@ loader-utils@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.defaultsdeep@^4.6.1: version "4.6.1" - resolved "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" + resolved "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== lodash.escape@^4.0.1: version "4.0.1" - resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz" integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== lodash.flatten@^4.4.0: version "4.4.0" - resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz" integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.invokemap@^4.6.0: version "4.6.0" - resolved "https://registry.npmmirror.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62" + resolved "https://registry.npmmirror.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz" integrity sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w== lodash.kebabcase@^4.1.1: version "4.1.1" - resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.mapvalues@^4.6.0: version "4.6.0" - resolved "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + resolved "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz" integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== lodash.memoize@^4.1.2: version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.pullall@^4.2.0: version "4.2.0" - resolved "https://registry.npmmirror.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz#9d98b8518b7c965b0fae4099bd9fb7df8bbf38ba" + resolved "https://registry.npmmirror.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz" integrity sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg== lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash.uniqby@^4.7.0: version "4.7.0" - resolved "https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + resolved "https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz" integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -3741,7 +3736,7 @@ log-symbols@^4.1.0: log-update@^2.3.0: version "2.3.0" - resolved "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + resolved "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz" integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== dependencies: ansi-escapes "^3.0.0" @@ -3750,14 +3745,14 @@ log-update@^2.3.0: lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^4.1.2: version "4.1.5" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" @@ -3765,72 +3760,72 @@ lru-cache@^4.1.2: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" mdn-data@2.0.14: version "2.0.14" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.4.3: version "3.6.0" - resolved "https://registry.npmmirror.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + resolved "https://registry.npmmirror.com/memfs/-/memfs-3.6.0.tgz" integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: fs-monkey "^1.0.4" merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-source-map@^1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + resolved "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz" integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== dependencies: source-map "^0.6.1" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -3838,97 +3833,97 @@ micromatch@^4.0.2, micromatch@^4.0.4: 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" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^1.0.0: version "1.2.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mini-css-extract-plugin@^2.5.3: version "2.7.6" - resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz" integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== dependencies: schema-utils "^4.0.0" minimalistic-assert@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^3.1.1: version "3.3.6" - resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" module-alias@^2.2.2: version "2.2.3" - resolved "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221" + resolved "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz" integrity sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q== mrmime@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + resolved "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz" integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== ms@2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: +ms@2.1.2, ms@^2.1.1: version "2.1.2" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3: version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multicast-dns@^7.2.5: version "7.2.5" - resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: dns-packet "^5.2.2" @@ -3936,7 +3931,7 @@ multicast-dns@^7.2.5: mz@^2.4.0: version "2.7.0" - resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -3945,27 +3940,27 @@ mz@^2.4.0: nanoid@^3.3.6: version "3.3.6" - resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -3973,24 +3968,24 @@ no-case@^3.0.4: node-fetch@^2.6.7: version "2.7.0" - resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" node-forge@^1: version "1.3.1" - resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-releases@^2.0.13: version "2.0.13" - resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -4000,63 +3995,63 @@ normalize-package-data@^2.5.0: normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== normalize-wheel@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" + resolved "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz" integrity sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA== npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz" integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" object-assign@^4.0.1: version "4.1.1" - resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.9.0: version "1.13.1" - resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.0: version "4.1.4" - resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -4066,45 +4061,45 @@ object.assign@^4.1.0: obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" - resolved "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + resolved "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz" integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== dependencies: mimic-fn "^1.0.0" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.0.2, open@^8.0.9: version "8.4.2" - resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: define-lazy-prop "^2.0.0" @@ -4113,12 +4108,12 @@ open@^8.0.2, open@^8.0.9: opener@^1.5.2: version "1.5.2" - resolved "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + resolved "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== ora@^5.3.0: version "5.4.1" - resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -4133,26 +4128,26 @@ ora@^5.3.0: p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-retry@^4.5.0: version "4.6.2" - resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -4160,12 +4155,12 @@ p-retry@^4.5.0: p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -4173,14 +4168,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -4190,29 +4185,29 @@ parse-json@^5.0.0: parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" - resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" parse5@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + resolved "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parse5@^6.0.1: version "6.0.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -4220,64 +4215,64 @@ pascal-case@^3.1.2: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^0.2.1: version "0.2.1" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pkg-dir@^4.1.0: version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" portfinder@^1.0.26: version "1.0.32" - resolved "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" + resolved "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz" integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== dependencies: async "^2.6.4" @@ -4286,7 +4281,7 @@ portfinder@^1.0.26: postcss-calc@^8.2.3: version "8.2.4" - resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz" integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== dependencies: postcss-selector-parser "^6.0.9" @@ -4294,7 +4289,7 @@ postcss-calc@^8.2.3: postcss-colormin@^5.3.1: version "5.3.1" - resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz" integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== dependencies: browserslist "^4.21.4" @@ -4304,7 +4299,7 @@ postcss-colormin@^5.3.1: postcss-convert-values@^5.1.3: version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== dependencies: browserslist "^4.21.4" @@ -4312,27 +4307,27 @@ postcss-convert-values@^5.1.3: postcss-discard-comments@^5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== postcss-discard-duplicates@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== postcss-discard-empty@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== postcss-discard-overridden@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== postcss-loader@^6.1.1: version "6.2.1" - resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" + resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz" integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== dependencies: cosmiconfig "^7.0.0" @@ -4341,7 +4336,7 @@ postcss-loader@^6.1.1: postcss-merge-longhand@^5.1.7: version "5.1.7" - resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== dependencies: postcss-value-parser "^4.2.0" @@ -4349,7 +4344,7 @@ postcss-merge-longhand@^5.1.7: postcss-merge-rules@^5.1.4: version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== dependencies: browserslist "^4.21.4" @@ -4359,14 +4354,14 @@ postcss-merge-rules@^5.1.4: postcss-minify-font-values@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: postcss-value-parser "^4.2.0" postcss-minify-gradients@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: colord "^2.9.1" @@ -4375,7 +4370,7 @@ postcss-minify-gradients@^5.1.1: postcss-minify-params@^5.1.4: version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== dependencies: browserslist "^4.21.4" @@ -4384,19 +4379,19 @@ postcss-minify-params@^5.1.4: postcss-minify-selectors@^5.2.1: version "5.2.1" - resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: postcss-selector-parser "^6.0.5" postcss-modules-extract-imports@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== postcss-modules-local-by-default@^4.0.3: version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz" integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== dependencies: icss-utils "^5.0.0" @@ -4405,61 +4400,61 @@ postcss-modules-local-by-default@^4.0.3: postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + resolved "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: postcss-selector-parser "^6.0.4" postcss-modules-values@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + resolved "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: icss-utils "^5.0.0" postcss-normalize-charset@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== postcss-normalize-display-values@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-positions@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-repeat-style@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-string@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-timing-functions@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: postcss-value-parser "^4.2.0" postcss-normalize-unicode@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== dependencies: browserslist "^4.21.4" @@ -4467,7 +4462,7 @@ postcss-normalize-unicode@^5.1.1: postcss-normalize-url@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: normalize-url "^6.0.1" @@ -4475,14 +4470,14 @@ postcss-normalize-url@^5.1.0: postcss-normalize-whitespace@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: postcss-value-parser "^4.2.0" postcss-ordered-values@^5.1.3: version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: cssnano-utils "^3.1.0" @@ -4490,7 +4485,7 @@ postcss-ordered-values@^5.1.3: postcss-reduce-initial@^5.1.2: version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== dependencies: browserslist "^4.21.4" @@ -4498,14 +4493,14 @@ postcss-reduce-initial@^5.1.2: postcss-reduce-transforms@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.13" - resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" @@ -4513,7 +4508,7 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector postcss-svgo@^5.1.0: version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz" integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: postcss-value-parser "^4.2.0" @@ -4521,19 +4516,19 @@ postcss-svgo@^5.1.0: postcss-unique-selectors@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: postcss-selector-parser "^6.0.5" postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== postcss@^7.0.36: version "7.0.39" - resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz" integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== dependencies: picocolors "^0.2.1" @@ -4541,7 +4536,7 @@ postcss@^7.0.36: postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21: version "8.4.31" - resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: nanoid "^3.3.6" @@ -4550,12 +4545,12 @@ postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21: "prettier@^1.18.2 || ^2.0.0": version "2.8.8" - resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-error@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz" integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" @@ -4563,12 +4558,12 @@ pretty-error@^4.0.0: process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress-webpack-plugin@^1.0.12: version "1.0.16" - resolved "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz#278f5c1afd21af783aad72c5ec95241520230fe5" + resolved "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz" integrity sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA== dependencies: chalk "^2.1.0" @@ -4577,7 +4572,7 @@ progress-webpack-plugin@^1.0.12: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -4585,17 +4580,17 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pseudomap@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -4603,36 +4598,36 @@ pump@^3.0.0: punycode@^2.1.0: version "2.3.0" - resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== qs@6.11.0: version "6.11.0" - resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -4642,7 +4637,7 @@ raw-body@2.5.1: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -4651,7 +4646,7 @@ read-pkg-up@^7.0.1: read-pkg@^5.1.1, read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -4661,7 +4656,7 @@ read-pkg@^5.1.1, read-pkg@^5.2.0: readable-stream@^2.0.1: version "2.3.8" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -4674,7 +4669,7 @@ readable-stream@^2.0.1: readable-stream@^3.0.6, readable-stream@^3.4.0: version "3.6.2" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4683,43 +4678,43 @@ readable-stream@^3.0.6, readable-stream@^3.4.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerate-unicode-properties@^10.1.0: version "10.1.1" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.11.0: version "0.11.1" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.14.0: version "0.14.0" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== regenerator-transform@^0.15.2: version "0.15.2" - resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz" integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" regexpu-core@^5.3.1: version "5.3.2" - resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz" integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: "@babel/regjsgen" "^0.8.0" @@ -4731,19 +4726,19 @@ regexpu-core@^5.3.1: regjsparser@^0.9.1: version "0.9.1" - resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== renderkid@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz" integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: css-select "^4.1.3" @@ -4754,32 +4749,32 @@ renderkid@^3.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resize-observer-polyfill@^1.5.0: version "1.5.1" - resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^1.10.0, resolve@^1.14.2: version "1.22.8" - resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" @@ -4788,7 +4783,7 @@ resolve@^1.10.0, resolve@^1.14.2: restore-cursor@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz" integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== dependencies: onetime "^2.0.0" @@ -4796,7 +4791,7 @@ restore-cursor@^2.0.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -4804,46 +4799,46 @@ restore-cursor@^3.1.0: retry@^0.13.1: version "0.13.1" - resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" 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" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-loader@^12.0.0: version "12.6.0" - resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" + resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz" integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== dependencies: klona "^2.0.4" @@ -4851,7 +4846,7 @@ sass-loader@^12.0.0: sass@^1.32.7: version "1.69.5" - resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" + resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz" integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -4860,7 +4855,7 @@ sass@^1.32.7: schema-utils@^2.6.5: version "2.7.1" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== dependencies: "@types/json-schema" "^7.0.5" @@ -4869,7 +4864,7 @@ schema-utils@^2.6.5: schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" @@ -4878,7 +4873,7 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: schema-utils@^4.0.0: version "4.2.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" @@ -4888,36 +4883,36 @@ schema-utils@^4.0.0: select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz" integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== dependencies: node-forge "^1" "semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.0.0, semver@^6.3.1: version "6.3.1" - resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: version "7.5.4" - resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -4936,14 +4931,14 @@ send@0.18.0: serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: version "6.0.1" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz" integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz" integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" @@ -4956,7 +4951,7 @@ serve-index@^1.9.1: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -4966,7 +4961,7 @@ serve-static@1.15.0: set-function-length@^1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.1.1.tgz" integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== dependencies: define-data-property "^1.1.1" @@ -4976,53 +4971,53 @@ set-function-length@^1.1.1: setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.8.1: version "1.8.1" - resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -5031,12 +5026,12 @@ side-channel@^1.0.4: signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== sirv@^2.0.3: version "2.0.3" - resolved "https://registry.npmmirror.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" + resolved "https://registry.npmmirror.com/sirv/-/sirv-2.0.3.tgz" integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== dependencies: "@polka/url" "^1.0.0-next.20" @@ -5045,12 +5040,12 @@ sirv@^2.0.3: slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== sockjs@^0.3.24: version "0.3.24" - resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" @@ -5059,12 +5054,12 @@ sockjs@^0.3.24: "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -5072,12 +5067,12 @@ source-map-support@~0.5.20: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -5085,12 +5080,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -5098,12 +5093,12 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.16" - resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + resolved "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -5115,7 +5110,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + resolved "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -5126,34 +5121,34 @@ spdy@^4.0.2: ssri@^8.0.1: version "8.0.1" - resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: minipass "^3.1.1" stable@^0.1.8: version "0.1.8" - resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stackframe@^1.3.4: version "1.3.4" - resolved "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + resolved "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz" integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== "statuses@>= 1.4.0 < 2": version "1.5.0" - resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== string-width@^2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + resolved "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" @@ -5161,7 +5156,7 @@ string-width@^2.1.1: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -5170,45 +5165,45 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz" integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz" integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== stylehacks@^5.1.1: version "5.1.1" - resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz" integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== dependencies: browserslist "^4.21.4" @@ -5216,38 +5211,38 @@ stylehacks@^5.1.1: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-tags@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== svgo@^2.7.0: version "2.8.0" - resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== dependencies: "@trysound/sax" "0.2.0" @@ -5260,12 +5255,12 @@ svgo@^2.7.0: tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.3.7: version "5.3.9" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== dependencies: "@jridgewell/trace-mapping" "^0.3.17" @@ -5276,7 +5271,7 @@ terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.3.7: terser@^5.10.0, terser@^5.16.8: version "5.22.0" - resolved "https://registry.npmmirror.com/terser/-/terser-5.22.0.tgz#4f18103f84c5c9437aafb7a14918273310a8a49d" + resolved "https://registry.npmmirror.com/terser/-/terser-5.22.0.tgz" integrity sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw== dependencies: "@jridgewell/source-map" "^0.3.3" @@ -5286,21 +5281,21 @@ terser@^5.10.0, terser@^5.16.8: thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" thread-loader@^3.0.0: version "3.0.4" - resolved "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz#c392e4c0241fbc80430eb680e4886819b504a31b" + resolved "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz" integrity sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA== dependencies: json-parse-better-errors "^1.0.2" @@ -5311,59 +5306,59 @@ thread-loader@^3.0.0: throttle-debounce@^1.0.1: version "1.1.0" - resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz#51853da37be68a155cb6e827b3514a3c422e89cd" + resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz" integrity sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg== thunky@^1.0.2: version "1.1.0" - resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== totalist@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tslib@^2.0.3: version "2.6.2" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -5371,17 +5366,17 @@ type-is@~1.6.18: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -5389,27 +5384,27 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.0.13: version "1.0.13" - resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: escalade "^3.1.1" @@ -5417,34 +5412,34 @@ update-browserslist-db@^1.0.13: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utila@~0.4: version "0.4.0" - resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz" integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -5452,17 +5447,17 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vue-hot-reload-api@^2.3.0: version "2.3.4" - resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" + resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz" integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== vue-loader@^17.0.0: version "17.3.0" - resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.3.0.tgz#15b8cb8bc5bab013d8861825c0ea78d3bca33aff" + resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.3.0.tgz" integrity sha512-VUURABiN0TIUz0yvJJ/V/rZjGUh10JZtD+IDI5bXFslzFi9mV6ebKkPzoqiSi8e0vh8Ip7JHJx+I0AzAG0KsCA== dependencies: chalk "^4.1.0" @@ -5471,12 +5466,12 @@ vue-loader@^17.0.0: vue-router@^3.5.1: version "3.6.5" - resolved "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz#95847d52b9a7e3f1361cb605c8e6441f202afad8" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz" integrity sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ== vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: version "4.1.3" - resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" + resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz" integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== dependencies: hash-sum "^1.0.2" @@ -5484,7 +5479,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: vue-template-compiler@^2.6.14: version "2.7.15" - resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz#ec88ba8ceafe0f17a528b89c57e01e02da92b0de" + resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz" integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== dependencies: de-indent "^1.0.2" @@ -5492,12 +5487,12 @@ vue-template-compiler@^2.6.14: vue-template-es2015-compiler@^1.9.0: version "1.9.1" - resolved "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" + resolved "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== vue@^2.6.14: version "2.7.15" - resolved "https://registry.npmmirror.com/vue/-/vue-2.7.15.tgz#94cd34e6e9f22cd2d35a02143f96a5beac1c1f54" + resolved "https://registry.npmmirror.com/vue/-/vue-2.7.15.tgz" integrity sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ== dependencies: "@vue/compiler-sfc" "2.7.15" @@ -5505,12 +5500,12 @@ vue@^2.6.14: vuex@^3.6.2: version "3.6.2" - resolved "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71" + resolved "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz" integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw== watchpack@^2.4.0: version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" @@ -5518,26 +5513,26 @@ watchpack@^2.4.0: wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + resolved "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@^4.4.0: version "4.9.1" - resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d" + resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz" integrity sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w== dependencies: "@discoveryjs/json-ext" "0.5.7" @@ -5560,7 +5555,7 @@ webpack-bundle-analyzer@^4.4.0: webpack-chain@^6.5.1: version "6.5.1" - resolved "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206" + resolved "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz" integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== dependencies: deepmerge "^1.5.2" @@ -5568,7 +5563,7 @@ webpack-chain@^6.5.1: webpack-dev-middleware@^5.3.1: version "5.3.3" - resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: colorette "^2.0.10" @@ -5579,7 +5574,7 @@ webpack-dev-middleware@^5.3.1: webpack-dev-server@^4.7.3: version "4.15.1" - resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz" integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== dependencies: "@types/bonjour" "^3.5.9" @@ -5615,7 +5610,7 @@ webpack-dev-server@^4.7.3: webpack-merge@^5.7.3: version "5.10.0" - resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" + resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz" integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== dependencies: clone-deep "^4.0.1" @@ -5624,17 +5619,17 @@ webpack-merge@^5.7.3: webpack-sources@^3.2.3: version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack-virtual-modules@^0.4.2: version "0.4.6" - resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45" + resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz" integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== webpack@^5.0.0, webpack@^5.54.0: version "5.89.0" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" + resolved "https://registry.npmmirror.com/webpack/-/webpack-5.89.0.tgz" integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== dependencies: "@types/eslint-scope" "^3.7.3" @@ -5664,7 +5659,7 @@ webpack@^5.0.0, webpack@^5.54.0: websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" - resolved "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + resolved "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -5673,17 +5668,17 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-fetch@^3.6.2: version "3.6.19" - resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" + resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz" integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -5691,26 +5686,26 @@ whatwg-url@^5.0.0: which@^1.2.9: version "1.3.1" - resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1: version "2.0.2" - resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wildcard@^2.0.0: version "2.0.1" - resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wrap-ansi@^3.0.1: version "3.0.1" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz" integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== dependencies: string-width "^2.1.1" @@ -5718,7 +5713,7 @@ wrap-ansi@^3.0.1: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -5727,52 +5722,52 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^7.3.1: version "7.5.9" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0: version "8.14.2" - resolved "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + resolved "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^2.1.2: version "2.1.2" - resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" - resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^16.0.0: version "16.2.0" - resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" -- Gitee From adc88c9a561d82dc51ac579afce026214a21cd24 Mon Sep 17 00:00:00 2001 From: xyy Date: Thu, 14 Dec 2023 21:31:31 +0800 Subject: [PATCH 05/41] for 1215presentation. --- docker-compose.yml | 2 +- sql/ssadmin_init.sql | 34 ++-- sql/ssadmin_init_application.sql | 25 +++ ssadmin-server/pom.xml | 1 + .../ssadmin-application-demo/pom.xml | 38 +++++ .../controller/app/ApplicationController.java | 50 ++++++ .../app/vo/ApplicationCreateReqVO.java | 15 ++ .../controller/app/vo/ApplicationRespVO.java | 17 ++ .../convert/ApplicationConvert.java | 36 ++++ .../application/dataobject/ApplicationDO.java | 44 +++++ .../application/mapper/ApplicationMapper.java | 16 ++ .../service/ApplicationService.java | 12 ++ .../service/ApplicationServiceImpl.java | 44 +++++ .../src/main/resources/application.yml | 2 + .../resources/mappers/ApplicationMapper.xml | 15 ++ .../ssadmin-module-security/pom.xml | 3 +- .../SsadminSecurityAutoConfiguration.java | 3 +- ssadmin-server/ssadmin-module-web/pom.xml | 14 ++ .../ssadmin-system/ssadmin-system-api/pom.xml | 1 + .../ssadmin/server/api/user/AdminUserApi.java | 20 ++- .../ssadmin-system/ssadmin-system-biz/pom.xml | 5 + .../edu/ssadmin/server/ServerApplication.java | 5 +- .../server/api/user/AdminUserApiImpl.java | 18 +- .../src/main/resources/application-dev.yml | 4 +- ssadmin-web/src/api/application/manage.js | 19 +++ ssadmin-web/src/layout/index.vue | 4 + ssadmin-web/src/router/index.js | 10 ++ .../application/applicationManagement.vue | 158 ++++++++++++++++++ 28 files changed, 584 insertions(+), 31 deletions(-) create mode 100644 sql/ssadmin_init_application.sql create mode 100644 ssadmin-server/ssadmin-application-demo/pom.xml create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml create mode 100644 ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml create mode 100644 ssadmin-web/src/api/application/manage.js create mode 100644 ssadmin-web/src/views/application/applicationManagement.vue diff --git a/docker-compose.yml b/docker-compose.yml index b82244d..c908698 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456} volumes: - mysql:/var/lib/mysql/ - - ./sql/ssadmin_init.sql:/docker-entrypoint-initdb.d/ssadmin_init.sql:ro + - ./sql/:/docker-entrypoint-initdb.d:ro # redis: # container_name: ssadmin-redis diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index 8a7cf12..a7f3703 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -21,7 +21,7 @@ SET time_zone = "+00:00"; -- 数据库: `ssadmin` -- -- 创建新数据库 ssadmin 并选择 -CREATE DATABASE IF NOT EXISTS `ssadmin` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; +CREATE DATABASE IF NOT EXISTS `ssadmin` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci; USE `ssadmin`; -- -------------------------------------------------------- @@ -49,7 +49,7 @@ CREATE TABLE `system_users` ( `deleted` BIT(1) NOT NULL DEFAULT b'0', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -- 转存用户表的初始数据 `system_users` @@ -147,20 +147,20 @@ INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, ` (2,'用户管理', '',2,1,1,'user','system/user/index','SystemUser'), (3,'角色管理', '',2,2,1,'role','system/role/index','SystemRole'), (4,'菜单管理', '',2,3,1,'menu','system/menu/index','SystemMenu'), - (5,'用户新增', 'system:user:create',3,1,2,'',''), - (6,'用户删除', 'system:user:delete',3,2,2,'',''), - (7,'用户修改', 'system:user:update',3,3,2,'',''), - (8,'用户查询', 'system:user:query',3,4,2,'',''), - (9,'角色新增', 'system:role:create',3,1,3,'',''), - (10,'角色删除', 'system:role:delete',3,2,3,'',''), - (11,'角色修改', 'system:role:update',3,3,3,'',''), - (12,'角色查询', 'system:role:query',3,4,3,'',''), - (13,'菜单新增', 'system:menu:create',3,1,4,'',''), - (14,'菜单删除', 'system:menu:delete',3,2,4,'',''), - (15,'菜单修改', 'system:menu:update',3,3,4,'',''), - (16,'菜单查询', 'system:menu:query',3,4,4,'',''); - (17,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'',''), - (18,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'',''); + (5,'用户新增', 'system:user:create',3,1,2,'','',''), + (6,'用户删除', 'system:user:delete',3,2,2,'','',''), + (7,'用户修改', 'system:user:update',3,3,2,'','',''), + (8,'用户查询', 'system:user:query',3,4,2,'','',''), + (9,'角色新增', 'system:role:create',3,1,3,'','',''), + (10,'角色删除', 'system:role:delete',3,2,3,'','',''), + (11,'角色修改', 'system:role:update',3,3,3,'','',''), + (12,'角色查询', 'system:role:query',3,4,3,'','',''), + (13,'菜单新增', 'system:menu:create',3,1,4,'','',''), + (14,'菜单删除', 'system:menu:delete',3,2,4,'','',''), + (15,'菜单修改', 'system:menu:update',3,3,4,'','',''), + (16,'菜单查询', 'system:menu:query',3,4,4,'','',''), + (17,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'','',''), + (18,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'','',''); -- -- 使用表AUTO_INCREMENT `system_users` @@ -182,7 +182,7 @@ CREATE TABLE `system_role_menu` ( `updater` VARCHAR(64) DEFAULT NULL, `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `deleted` BIT(1) DEFAULT b'0', - PRIMARY KEY (`role_id`,`menu_id`), + PRIMARY KEY (`id`), KEY `idx_role_id` (`role_id`), KEY `idx_menu_id` (`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/sql/ssadmin_init_application.sql b/sql/ssadmin_init_application.sql new file mode 100644 index 0000000..fe7a391 --- /dev/null +++ b/sql/ssadmin_init_application.sql @@ -0,0 +1,25 @@ + +USE `ssadmin`; + +-- -------------------------------------------------------- + +-- +-- 应用表的结构 `system_application` +-- + +CREATE TABLE `system_application` ( + `id` bigint NOT NULL, + `name` VARCHAR(255) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存应用表的初始数据 `system_application` +-- + +INSERT INTO `system_application` (`id`,`name`) VALUES('1','application1'),('2','application2'); diff --git a/ssadmin-server/pom.xml b/ssadmin-server/pom.xml index 1a300e6..369310d 100644 --- a/ssadmin-server/pom.xml +++ b/ssadmin-server/pom.xml @@ -23,6 +23,7 @@ ssadmin-module-security ssadmin-test ssadmin-module-web + ssadmin-application-demo diff --git a/ssadmin-server/ssadmin-application-demo/pom.xml b/ssadmin-server/ssadmin-application-demo/pom.xml new file mode 100644 index 0000000..133d798 --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/pom.xml @@ -0,0 +1,38 @@ + + + + ssadmin-parrent-server + edu.ssadmin + 1.0 + + 4.0.0 + + ssadmin-application-demo + + + 8 + 8 + UTF-8 + + + + + edu.ssadmin + ssadmin-common + 1.0 + + + edu.ssadmin + ssadmin-system-api + 1.0 + + + edu.ssadmin + ssadmin-module-security + 1.0 + + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java new file mode 100644 index 0000000..1f80faa --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java @@ -0,0 +1,50 @@ +package edu.ssadmin.application.controller.app; + +import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.app.vo.ApplicationRespVO; +import edu.ssadmin.application.convert.ApplicationConvert; +import edu.ssadmin.application.dataobject.ApplicationDO; +import edu.ssadmin.application.service.ApplicationService; +import edu.ssadmin.common.pojo.CommonResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@Api(tags = "应用模块") +@RestController +@RequestMapping("/application/manage") +public class ApplicationController { + + @Resource + private ApplicationService applicationService; + + @Resource + private ApplicationConvert applicationConvert; + + @PostMapping("/create") + @ApiOperation("新增应用") + //@PreAuthorize("@ss.hasPermission('application:manage:create')") + public CommonResult create(@Valid @RequestBody ApplicationCreateReqVO reqVO) { + applicationService.createApplication(reqVO); + return success(true); + } + + + @GetMapping("/get-list") + @ApiOperation("获取应用信息列表") + //@PreAuthorize("@ss.hasPermission('application:manage:get-list')") + public CommonResult> getList() { + // 获取列表信息 + List list = applicationService.getApplicationList(); + System.out.println(list.get(0).getName()); + // 排序后,返回给前端 + return success(applicationConvert.convert2(list)); + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java new file mode 100644 index 0000000..d1c3461 --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.application.controller.app.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ApplicationCreateReqVO { + private Long id; + private String name; +} diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java new file mode 100644 index 0000000..98efb33 --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.application.controller.app.vo; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ApplicationRespVO { + private Long id; + private String name; + private String creator; +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java new file mode 100644 index 0000000..2920ccb --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java @@ -0,0 +1,36 @@ +package edu.ssadmin.application.convert; + +import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.app.vo.ApplicationRespVO; +import edu.ssadmin.application.dataobject.ApplicationDO; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class ApplicationConvert { + public ApplicationDO convert1(ApplicationCreateReqVO bean){ + if ( bean == null ) { + return null; + } + ApplicationDO applicationDO = new ApplicationDO(); + applicationDO.setId(bean.getId()); + applicationDO.setName(bean.getName()); + return applicationDO; + } + + public List convert2(List list) { + return list.stream() + .map(this::convertToApplicationRespVO) + .collect(Collectors.toList()); + } + private ApplicationRespVO convertToApplicationRespVO(ApplicationDO applicationDO) { + ApplicationRespVO applicationRespVO = new ApplicationRespVO(); + applicationRespVO.setId(applicationDO.getId()); + applicationRespVO.setName(applicationDO.getName()); + // Assuming creator field is also present in ApplicationDO + applicationRespVO.setCreator(applicationDO.getCreator()); + return applicationRespVO; + } +} diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java new file mode 100644 index 0000000..d169b06 --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java @@ -0,0 +1,44 @@ +package edu.ssadmin.application.dataobject; + +import lombok.*; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ApplicationDO { + + private Long id; + + private String name; + + /** + * 创建时间 + */ + + private LocalDateTime createTime; + /** + * 最后更新时间 + */ + + private LocalDateTime updateTime; + /** + * 创建者 id 编号 + * + */ + + private String creator; + + /** + * 更新者 id 编号 + * + */ + private String updater; + + /** + * 是否删除 + */ + private Boolean deleted; +} diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java new file mode 100644 index 0000000..55ad651 --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java @@ -0,0 +1,16 @@ +package edu.ssadmin.application.mapper; + +import edu.ssadmin.application.dataobject.ApplicationDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface ApplicationMapper { + + void insert(ApplicationDO applicationDO); + + @Select("SELECT * FROM system_application") + List selectList(); +} diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java new file mode 100644 index 0000000..0b1653c --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java @@ -0,0 +1,12 @@ +package edu.ssadmin.application.service; + +import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.dataobject.ApplicationDO; + +import java.util.List; + +public interface ApplicationService { + List getApplicationList(); + + void createApplication(ApplicationCreateReqVO reqVO); +} diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java new file mode 100644 index 0000000..f760c8e --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java @@ -0,0 +1,44 @@ +package edu.ssadmin.application.service; + +import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.convert.ApplicationConvert; +import edu.ssadmin.application.dataobject.ApplicationDO; +import edu.ssadmin.application.mapper.ApplicationMapper; +import edu.ssadmin.server.api.user.AdminUserApi; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 菜单 Service 实现 + * + * @author 芋道源码 + */ +@Service +@Slf4j +public class ApplicationServiceImpl implements ApplicationService { + + @Resource + private ApplicationMapper applicationMapper; + + @Resource + private ApplicationConvert applicationConvert; + + @Resource + private AdminUserApi adminUserApi; + + @Override + public List getApplicationList() { + return applicationMapper.selectList(); + } + + @Override + public void createApplication(ApplicationCreateReqVO reqVO) { + ApplicationDO applicationDO = applicationConvert.convert1(reqVO); + //使用系统模块的api获取当前登录的用户名 + applicationDO.setCreator(adminUserApi.getLoginUserName()); + applicationMapper.insert(applicationDO); + } +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml b/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml new file mode 100644 index 0000000..e6371ca --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml @@ -0,0 +1,2 @@ +mybatis: + mapper-locations: classpath:mappers/*.xml \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml b/ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml new file mode 100644 index 0000000..721e95b --- /dev/null +++ b/ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml @@ -0,0 +1,15 @@ + + + + + + + INSERT INTO system_application (id, name) VALUES + (#{id}, #{name}) + + diff --git a/ssadmin-server/ssadmin-module-security/pom.xml b/ssadmin-server/ssadmin-module-security/pom.xml index aee4bcb..bf9e108 100644 --- a/ssadmin-server/ssadmin-module-security/pom.xml +++ b/ssadmin-server/ssadmin-module-security/pom.xml @@ -49,11 +49,12 @@ org.springframework.boot spring-boot-starter-security + edu.ssadmin ssadmin-module-web + 1.0 - diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java index 8d59524..305ea0e 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java @@ -71,7 +71,7 @@ public class SsadminSecurityAutoConfiguration { */ @Bean public PasswordEncoder passwordEncoder() { - System.out.println("password bean ok"); + // System.out.println("password bean ok"); return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength()); } @@ -87,5 +87,4 @@ public class SsadminSecurityAutoConfiguration { public SecurityFrameworkService securityFrameworkService(PermissionApi permissionApi) { return new SecurityFrameworkServiceImpl(permissionApi); } - } \ No newline at end of file diff --git a/ssadmin-server/ssadmin-module-web/pom.xml b/ssadmin-server/ssadmin-module-web/pom.xml index c5ff38b..e8b5388 100644 --- a/ssadmin-server/ssadmin-module-web/pom.xml +++ b/ssadmin-server/ssadmin-module-web/pom.xml @@ -17,4 +17,18 @@ UTF-8 + + + edu.ssadmin + ssadmin-common + 1.0 + + + + org.springframework.boot + spring-boot-starter-web + + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml index ee998a8..8645576 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml @@ -25,5 +25,6 @@ ssadmin-common 1.0 + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java index 36ddfe4..2b7c568 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java @@ -1,10 +1,6 @@ package edu.ssadmin.server.api.user; -import edu.ssadmin.common.utils.CollectionUtils; - import java.util.Collection; -import java.util.List; -import java.util.Map; /** * Admin 用户 API 接口 @@ -19,7 +15,21 @@ public interface AdminUserApi { * @param username 用户名 * @return 用户id */ - Long getUserId(String username); + Long getUserIdFromUsername(String username); + + /** + * 返回当前登录的用户名 + * + * @return 用户名 + */ + String getLoginUserName(); + + /** + * 返回当前登录的用户 ID + * + * @return 用户id + */ + Long getLoginUserId(); /** * 校验用户们是否有效。如下情况,视为无效: diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml index caae154..d4223df 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml @@ -44,6 +44,11 @@ 1.0 compile + + edu.ssadmin + ssadmin-application-demo + 1.0 + org.springframework.boot diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java index 1c636ec..aa7775a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java @@ -1,11 +1,14 @@ package edu.ssadmin.server; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(scanBasePackages = "edu.ssadmin") -@ComponentScan(basePackages = {"edu.ssadmin.security","edu.ssadmin.web","edu.ssadmin.server"}) +@ComponentScan(basePackages = {"edu.ssadmin.security","edu.ssadmin.web","edu.ssadmin.server","edu.ssadmin.application"}) +//@ComponentScan(basePackages = "edu.ssadmin.server.api.user") +@MapperScan({"edu.ssadmin.server.mapper","edu.ssadmin.application.mapper"}) public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java index 15f1345..7c87646 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java @@ -1,18 +1,32 @@ package edu.ssadmin.server.api.user; import edu.ssadmin.server.service.user.AdminUserService; +import org.springframework.stereotype.Service; + +import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; import javax.annotation.Resource; import java.util.Collection; +@Service public class AdminUserApiImpl implements AdminUserApi{ @Resource private AdminUserService userService; @Override - public Long getUserId(String username) { - return null; + public Long getUserIdFromUsername(String username) { + return userService.getUserId(username); + } + + @Override + public String getLoginUserName() { + return getUserName(); + } + + @Override + public Long getLoginUserId() { + return getUserIdFromUsername(getLoginUserName()); } @Override diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml index fee6cd3..b5673ac 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml @@ -2,8 +2,8 @@ spring: datasource: url: jdbc:mysql://localhost:3306/ssadmin - username: ssadmin - password: ssadmin + username: root + password: root #jwt jwt: diff --git a/ssadmin-web/src/api/application/manage.js b/ssadmin-web/src/api/application/manage.js new file mode 100644 index 0000000..a64bae7 --- /dev/null +++ b/ssadmin-web/src/api/application/manage.js @@ -0,0 +1,19 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/common"; + +// 获取信息列表 +export function applicationLists() { + return request({ + url: '/application/manage/get-list', + method: 'get' + }) +} + +// 新增 +export function addApplication(data) { + return request({ + url: '/application/manage/create', + method: 'post', + data: data + }) +} diff --git a/ssadmin-web/src/layout/index.vue b/ssadmin-web/src/layout/index.vue index 14e1e99..facc3cc 100644 --- a/ssadmin-web/src/layout/index.vue +++ b/ssadmin-web/src/layout/index.vue @@ -18,6 +18,10 @@ 用户管理 + + + 应用管理demo + 退出 diff --git a/ssadmin-web/src/router/index.js b/ssadmin-web/src/router/index.js index 94b08f3..32d6b78 100644 --- a/ssadmin-web/src/router/index.js +++ b/ssadmin-web/src/router/index.js @@ -41,6 +41,16 @@ const routes = [ } ] }, + { + path: '/application', + component: Layout, + children: [ + { + path: 'manage', + component:() => import( '../views/application/applicationManagement.vue') + } + ] + }, { path: '/login', name: 'login', diff --git a/ssadmin-web/src/views/application/applicationManagement.vue b/ssadmin-web/src/views/application/applicationManagement.vue new file mode 100644 index 0000000..01a8115 --- /dev/null +++ b/ssadmin-web/src/views/application/applicationManagement.vue @@ -0,0 +1,158 @@ + + + + + + -- Gitee From 01a32af06ad7bc8293aae3326217f0c61d20fcbc Mon Sep 17 00:00:00 2001 From: xyy Date: Sat, 16 Dec 2023 12:33:41 +0800 Subject: [PATCH 06/41] login 401. --- release/README.md | 68 +++++++++++++++++++ .../controller/app/ApplicationController.java | 5 +- .../application/mapper/ApplicationMapper.java | 2 + .../config/WebSecurityConfigurerAdapter.java | 5 ++ .../filter/TokenAuthenticationFilter.java | 2 +- .../handler/AccessDeniedHandlerImpl.java | 1 + .../handler/AuthenticationEntryPointImpl.java | 1 + ssadmin-web/src/directive/index.js | 1 + ssadmin-web/src/permission.js | 30 ++++---- ssadmin-web/src/views/Login.vue | 22 +++--- .../application/applicationManagement.vue | 2 +- 11 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 release/README.md diff --git a/release/README.md b/release/README.md new file mode 100644 index 0000000..4ca206a --- /dev/null +++ b/release/README.md @@ -0,0 +1,68 @@ + +## 快速启动 +### 前端(ssadmin-web) +1. views目录:vue文件--页面创建 +2. api目录:js文件--请求函数(可使用./utils/request) +3. router目录和layout目录:页面挂载,修改index文件,增加路由信息并在布局中显示 `(之后会优化为动态菜单)` + +### 数据库(sql) +1. 创建自己的.sql文件--建表并转存初始数据 + - 命名方式为ssadmin_init_xxx.sql + - 第一行加上 + ``` + USE `ssadmin`; + ``` +2. 开发调试前确认数据库已正确初始化 + - 本地mysql启动可使用命令行 + ``` + mysql -u root -p < ssadmin_init.sql + mysql -u root -p < ssadmin_init_xxx.sql + ``` + - 容器环境下可在上述命令前加上:docker exec -i mysql + +### 后端(ssadmin-server) +- 新建模块 + - 增加目录结构 + - 参考给定demo,修改pom.xml文件增加依赖信息 + - 实现业务逻辑代码 + - controller + - 建议再分两层目录:app与admin,请求发送的url会自动带上/admin-api和/app-api,前端会统一反向代理为/api开头的url + - sevice + - mapper(当前请使用注解方式)(xml文件方式需要一些设置 我再研究研究) + - 实体类相关:dataobject vo(Req/Resp) convert +- 包扫描路径的增加(system-biz下的启动类ServerApplication) + - @ComponentScan(basePackages = {...,"edu.ssadmin.xxx"}) + - @MapperScan({...,"edu.ssadmin.xxx.mapper"}) + + +## 本框架提供的功能 +### 后端 +#### system-api层 +- AdminUserApi接口(`使用方式`可参考demo模块中的ApplicationServiceImpl.createApplication) + - getLoginUserName()和getLoginUserId() + +#### 权限控制注解 +测试中 + +### 前端 +#### 自定义指令 +测试中 + + + +## 代码管理参考 +1. 将给定的地址fork到自己的仓库 +2. 本地clone自己的仓库(前期设置git的用户信息 公钥等) +3. 本地开发修改-新建本地分支, add commit +4. 当源仓库有修改时: 拉取并合并 + ``` + git fetch upstream + git checkout <你的目标分支> + git merge upstream/<远程分支> + ``` + - 确保在执行git pull之前,你的本地工作目录没有未提交的修改,以避免冲突 + - 如有合并冲突 + - 手动编辑并通过git add filename 标记已解决 + - 继续合并git merge --continue + - 提交合并后的代码 git commit -m "Merge remote changes" + diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java index 1f80faa..89c714b 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java @@ -8,6 +8,7 @@ import edu.ssadmin.application.service.ApplicationService; import edu.ssadmin.common.pojo.CommonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -29,7 +30,7 @@ public class ApplicationController { @PostMapping("/create") @ApiOperation("新增应用") - //@PreAuthorize("@ss.hasPermission('application:manage:create')") + @PreAuthorize("@ss.hasPermission('application:manage:create')") public CommonResult create(@Valid @RequestBody ApplicationCreateReqVO reqVO) { applicationService.createApplication(reqVO); return success(true); @@ -42,7 +43,7 @@ public class ApplicationController { public CommonResult> getList() { // 获取列表信息 List list = applicationService.getApplicationList(); - System.out.println(list.get(0).getName()); + //System.out.println(list.get(0).getName()); // 排序后,返回给前端 return success(applicationConvert.convert2(list)); } diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java index 55ad651..eb4ca96 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java @@ -1,6 +1,7 @@ package edu.ssadmin.application.mapper; import edu.ssadmin.application.dataobject.ApplicationDO; +import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -9,6 +10,7 @@ import java.util.List; @Mapper public interface ApplicationMapper { + @Insert("INSERT INTO system_application (id, name,creator) VALUES (#{id}, #{name}, #{creator})") void insert(ApplicationDO applicationDO); @Select("SELECT * FROM system_application") diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java index fb74967..8bdc6c4 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java @@ -131,6 +131,10 @@ public class WebSecurityConfigurerAdapter { .antMatchers(buildAppApi("/**")).permitAll() // 1.5 验证码captcha 允许匿名访问 .antMatchers("/captcha/get", "/captcha/check").permitAll() + + // 12.15 登录 允许访问 + .antMatchers("/auth/login").permitAll() + // 1.6 webSocket 允许匿名访问 .antMatchers("/websocket/message").permitAll() // // ②:每个项目的自定义规则 @@ -162,6 +166,7 @@ public class WebSecurityConfigurerAdapter { if (!handlerMethod.hasMethodAnnotation(PermitAll.class)) { continue; } + if (entry.getKey().getPatternsCondition() == null) { continue; } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java index 8f915e7..e89923f 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -52,12 +52,12 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { SecurityFrameworkUtils.setUserName(username, request); } } catch (Throwable ex) { + CommonResult result = globalExceptionHandler.allExceptionHandler(request, ex); ServletUtils.writeJSON(response, result); return; } } - // 继续过滤链 chain.doFilter(request, response); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java index 40aa584..5513f54 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java @@ -34,6 +34,7 @@ public class AccessDeniedHandlerImpl implements AccessDeniedHandler { log.warn("[commence][访问 URL({}) 时,用户({}) 权限不够]", request.getRequestURI(), SecurityFrameworkUtils.getUserName(), e); // 返回 403 + System.out.println("403 occur under "+SecurityFrameworkUtils.getUserName()); ServletUtils.writeJSON(response, CommonResult.error(FORBIDDEN)); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java index 81bd0dc..e80c6bd 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java @@ -28,6 +28,7 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) { log.debug("[commence][访问 URL({}) 时,没有登录]", request.getRequestURI(), e); // 返回 401 + System.out.println("401 occur"); ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); } diff --git a/ssadmin-web/src/directive/index.js b/ssadmin-web/src/directive/index.js index 49f995d..0d98125 100644 --- a/ssadmin-web/src/directive/index.js +++ b/ssadmin-web/src/directive/index.js @@ -1,5 +1,6 @@ import hasRole from './permission/hasRole' import hasPermi from './permission/hasPermi' +import Vue from "vue"; // Vue:自定义指令:https://v2.cn.vuejs.org/v2/guide/custom-directive.html const install = function(Vue) { diff --git a/ssadmin-web/src/permission.js b/ssadmin-web/src/permission.js index 9ffd9ae..1ac2a02 100644 --- a/ssadmin-web/src/permission.js +++ b/ssadmin-web/src/permission.js @@ -1,21 +1,21 @@ import router from './router' import { getAccessToken } from '@/utils/auth' -// router.beforeEach((to, from, next) => { -// if (getAccessToken()) { // 如果有token -// if (to.path === '/login') { -// next({ path: '/' }) // 如果是去登录页,重定向到首页 -// } else { -// next() // 正常跳转 -// } -// } else { // 没有token -// if (to.path === '/login') { -// next() // 如果是去登录页,正常跳转 -// } else { -// next('/login') // 否则重定向到登录页 -// } -// } -// }) +router.beforeEach((to, from, next) => { + if (getAccessToken()) { // 如果有token + if (to.path === '/login') { + next({ path: '/' }) // 如果是去登录页,重定向到首页 + } else { + next() // 正常跳转 + } + } else { // 没有token + if (to.path === '/login') { + next() // 如果是去登录页,正常跳转 + } else { + next('/login') // 否则重定向到登录页 + } + } +}) router.afterEach(() => { // 这里可以添加一些在路由跳转后需要执行的代码 diff --git a/ssadmin-web/src/views/Login.vue b/ssadmin-web/src/views/Login.vue index e7e2d4c..2fc2d68 100644 --- a/ssadmin-web/src/views/Login.vue +++ b/ssadmin-web/src/views/Login.vue @@ -47,17 +47,19 @@ export default { if (valid) { this.loading = true this.$router.push({ path: '/' }) + // 登录处理逻辑中增加网络请求 - // login(this.loginForm.username,this.loginForm.password).then(res =>{ - // // 假设res.data.token是从后端接口返回的token - // console.log(res.data.accessToken) - // setToken(res.data.accessToken) - // this.$router.push({ path: '/' }) - // }).catch(() => { - // // 登录失败,显示错误提示 - // this.$message.error('用户名或密码错误') - // this.loading = false - // }) + login(this.loginForm.username,this.loginForm.password).then(res =>{ + // 假设res.data.token是从后端接口返回的token + console.log(res.data.accessToken) + setToken(res.data.accessToken) + this.$router.push({ path: '/' }) + }).catch(() => { + // 登录失败,显示错误提示 + this.$message.error('用户名或密码错误') + this.loading = false + }) + } }) } diff --git a/ssadmin-web/src/views/application/applicationManagement.vue b/ssadmin-web/src/views/application/applicationManagement.vue index 01a8115..a5c41a9 100644 --- a/ssadmin-web/src/views/application/applicationManagement.vue +++ b/ssadmin-web/src/views/application/applicationManagement.vue @@ -107,7 +107,7 @@ export default { // ]; applicationLists().then(response => { - this.applicationList = response.data.list; + this.applicationList = response.data; this.loading = false; } ); -- Gitee From ad113a4f726fb6cbf02e58d99ffcbff0697db338 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 11:14:14 +0800 Subject: [PATCH 07/41] login ok. --- release/README.md | 4 +- .../{app => admin}/ApplicationController.java | 9 +- .../vo/ApplicationCreateReqVO.java | 2 +- .../{app => admin}/vo/ApplicationRespVO.java | 2 +- .../convert/ApplicationConvert.java | 4 +- .../application/mapper/ApplicationMapper.java | 4 +- .../service/ApplicationService.java | 2 +- .../service/ApplicationServiceImpl.java | 2 +- .../src/main/resources/application.yml | 2 - .../application/mapper}/ApplicationMapper.xml | 3 +- .../filter/TokenAuthenticationFilter.java | 1 + .../handler/AuthenticationEntryPointImpl.java | 1 - .../admin/auth/AdminAuthController.java | 1 + ssadmin-web/package.json | 2 +- ssadmin-web/src/api/system/dict/data.js | 70 ++++ ssadmin-web/src/api/system/dict/type.js | 62 ++++ ssadmin-web/src/views/system/dict/data.vue | 304 ++++++++++++++++++ ssadmin-web/src/views/system/dict/index.vue | 251 +++++++++++++++ ssadmin-web/vue.config.js | 9 +- 19 files changed, 713 insertions(+), 22 deletions(-) rename ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/{app => admin}/ApplicationController.java (85%) rename ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/{app => admin}/vo/ApplicationCreateReqVO.java (82%) rename ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/{app => admin}/vo/ApplicationRespVO.java (83%) delete mode 100644 ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml rename ssadmin-server/ssadmin-application-demo/src/main/resources/{mappers => edu/ssadmin/application/mapper}/ApplicationMapper.xml (84%) create mode 100644 ssadmin-web/src/api/system/dict/data.js create mode 100644 ssadmin-web/src/api/system/dict/type.js create mode 100644 ssadmin-web/src/views/system/dict/data.vue create mode 100644 ssadmin-web/src/views/system/dict/index.vue diff --git a/release/README.md b/release/README.md index 4ca206a..0d231b6 100644 --- a/release/README.md +++ b/release/README.md @@ -28,7 +28,9 @@ - controller - 建议再分两层目录:app与admin,请求发送的url会自动带上/admin-api和/app-api,前端会统一反向代理为/api开头的url - sevice - - mapper(当前请使用注解方式)(xml文件方式需要一些设置 我再研究研究) + - mapper 对应的sql注入方式请择其一,不能混用 + - 使用注解 + - xml文件,需要在resources目录下构建和mapper.java文件一致的目录结构,可参考demo模块 - 实体类相关:dataobject vo(Req/Resp) convert - 包扫描路径的增加(system-biz下的启动类ServerApplication) - @ComponentScan(basePackages = {...,"edu.ssadmin.xxx"}) diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java similarity index 85% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java rename to ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java index 89c714b..41004bc 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/ApplicationController.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java @@ -1,7 +1,7 @@ -package edu.ssadmin.application.controller.app; +package edu.ssadmin.application.controller.admin; -import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; -import edu.ssadmin.application.controller.app.vo.ApplicationRespVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationRespVO; import edu.ssadmin.application.convert.ApplicationConvert; import edu.ssadmin.application.dataobject.ApplicationDO; import edu.ssadmin.application.service.ApplicationService; @@ -30,8 +30,9 @@ public class ApplicationController { @PostMapping("/create") @ApiOperation("新增应用") - @PreAuthorize("@ss.hasPermission('application:manage:create')") + //@PreAuthorize("@ss.hasPermission('application:manage:create')") public CommonResult create(@Valid @RequestBody ApplicationCreateReqVO reqVO) { + applicationService.createApplication(reqVO); return success(true); } diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java similarity index 82% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java rename to ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java index d1c3461..2ef8fc6 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationCreateReqVO.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.application.controller.app.vo; +package edu.ssadmin.application.controller.admin.vo; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java similarity index 83% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java rename to ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java index 98efb33..e248f8f 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/app/vo/ApplicationRespVO.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.application.controller.app.vo; +package edu.ssadmin.application.controller.admin.vo; import lombok.AllArgsConstructor; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java index 2920ccb..0836453 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java @@ -1,7 +1,7 @@ package edu.ssadmin.application.convert; -import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; -import edu.ssadmin.application.controller.app.vo.ApplicationRespVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationRespVO; import edu.ssadmin.application.dataobject.ApplicationDO; import org.springframework.stereotype.Component; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java index eb4ca96..884b496 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java @@ -10,9 +10,9 @@ import java.util.List; @Mapper public interface ApplicationMapper { - @Insert("INSERT INTO system_application (id, name,creator) VALUES (#{id}, #{name}, #{creator})") + //@Insert("INSERT INTO system_application (id, name,creator) VALUES (#{id}, #{name}, #{creator})") void insert(ApplicationDO applicationDO); - @Select("SELECT * FROM system_application") + //@Select("SELECT * FROM system_application") List selectList(); } diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java index 0b1653c..8bc4ef7 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java @@ -1,6 +1,6 @@ package edu.ssadmin.application.service; -import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationCreateReqVO; import edu.ssadmin.application.dataobject.ApplicationDO; import java.util.List; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java index f760c8e..6895a00 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java +++ b/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java @@ -1,6 +1,6 @@ package edu.ssadmin.application.service; -import edu.ssadmin.application.controller.app.vo.ApplicationCreateReqVO; +import edu.ssadmin.application.controller.admin.vo.ApplicationCreateReqVO; import edu.ssadmin.application.convert.ApplicationConvert; import edu.ssadmin.application.dataobject.ApplicationDO; import edu.ssadmin.application.mapper.ApplicationMapper; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml b/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml deleted file mode 100644 index e6371ca..0000000 --- a/ssadmin-server/ssadmin-application-demo/src/main/resources/application.yml +++ /dev/null @@ -1,2 +0,0 @@ -mybatis: - mapper-locations: classpath:mappers/*.xml \ No newline at end of file diff --git a/ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml b/ssadmin-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml similarity index 84% rename from ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml rename to ssadmin-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml index 721e95b..8fc94a5 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/resources/mappers/ApplicationMapper.xml +++ b/ssadmin-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml @@ -9,7 +9,6 @@ WHERE deleted = 0 - INSERT INTO system_application (id, name) VALUES - (#{id}, #{name}) + INSERT INTO system_application (id, name,creator) VALUES (#{id}, #{name}, #{creator}) diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java index e89923f..72aff4c 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -37,6 +37,7 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); + //System.out.println(request.getRequestURI()); if (StrUtil.isNotEmpty(token)) { try { // 1.1 基于 token 获取登录用户名 diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java index e80c6bd..2261373 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java @@ -31,5 +31,4 @@ public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint { System.out.println("401 occur"); ServletUtils.writeJSON(response, CommonResult.error(UNAUTHORIZED)); } - } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java index 9c740b1..bfef9d8 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java @@ -53,6 +53,7 @@ public class AdminAuthController { @ApiOperation("使用账号密码登录") @PermitAll public CommonResult login(@RequestBody @Valid LoginReqVO reqVO) { + System.out.println(reqVO.getPassword()); return success(authService.login(reqVO)); } diff --git a/ssadmin-web/package.json b/ssadmin-web/package.json index afbfee5..605c958 100644 --- a/ssadmin-web/package.json +++ b/ssadmin-web/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "serve": "vue-cli-service serve", - "build": "vue-cli-service build", + "build": "vue-cli-service build ", "build:prod": "vue-cli-service build", "local": "vue-cli-service serve --mode local", "mock": "vue-cli-service serve --mode mock", diff --git a/ssadmin-web/src/api/system/dict/data.js b/ssadmin-web/src/api/system/dict/data.js new file mode 100644 index 0000000..cb2b9a0 --- /dev/null +++ b/ssadmin-web/src/api/system/dict/data.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +// 查询字典数据列表 +export function listData(query) { + return request({ + url: '/system/dict-data/page', + method: 'get', + params: query + }) +} + +// 查询字典数据详细 +export function getData(dictCode) { + return request({ + url: '/system/dict-data/get?id=' + dictCode, + method: 'get' + }) +} + +// 根据字典类型查询字典数据信息 +export function getDicts(dictType) { + return request({ + url: '/system/dict-data/type/' + dictType, + method: 'get' + }) +} + +// 新增字典数据 +export function addData(data) { + return request({ + url: '/system/dict-data/create', + method: 'post', + data: data + }) +} + +// 修改字典数据 +export function updateData(data) { + return request({ + url: '/system/dict-data/update', + method: 'put', + data: data + }) +} + +// 删除字典数据 +export function delData(dictCode) { + return request({ + url: '/system/dict-data/delete?id=' + dictCode, + method: 'delete' + }) +} + +// 导出字典数据 +export function exportData(query) { + return request({ + url: '/system/dict-data/export', + method: 'get', + params: query, + responseType: 'blob' + }) +} + +// 查询全部字典数据列表 +export function listSimpleDictDatas() { + return request({ + url: '/system/dict-data/list-all-simple', + method: 'get', + }) +} diff --git a/ssadmin-web/src/api/system/dict/type.js b/ssadmin-web/src/api/system/dict/type.js new file mode 100644 index 0000000..f2314d5 --- /dev/null +++ b/ssadmin-web/src/api/system/dict/type.js @@ -0,0 +1,62 @@ +import request from '@/utils/request' + +// 查询字典类型列表 +export function listType(query) { + return request({ + url: '/system/dict-type/page', + method: 'get', + params: query + }) +} + +// 查询字典类型详细 +export function getType(dictId) { + return request({ + url: '/system/dict-type/get?id=' + dictId, + method: 'get' + }) +} + +// 新增字典类型 +export function addType(data) { + return request({ + url: '/system/dict-type/create', + method: 'post', + data: data + }) +} + +// 修改字典类型 +export function updateType(data) { + return request({ + url: '/system/dict-type/update', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function delType(dictId) { + return request({ + url: '/system/dict-type/delete?id=' + dictId, + method: 'delete' + }) +} + +// 导出字典类型 +export function exportType(query) { + return request({ + url: '/system/dict-type/export', + method: 'get', + params: query, + responseType: 'blob' + }) +} + +// 获取字典选择框列表 +export function listAllSimple() { + return request({ + url: '/system/dict-type/list-all-simple', + method: 'get' + }) +} diff --git a/ssadmin-web/src/views/system/dict/data.vue b/ssadmin-web/src/views/system/dict/data.vue new file mode 100644 index 0000000..6d89623 --- /dev/null +++ b/ssadmin-web/src/views/system/dict/data.vue @@ -0,0 +1,304 @@ + + + diff --git a/ssadmin-web/src/views/system/dict/index.vue b/ssadmin-web/src/views/system/dict/index.vue new file mode 100644 index 0000000..6229f07 --- /dev/null +++ b/ssadmin-web/src/views/system/dict/index.vue @@ -0,0 +1,251 @@ + + + diff --git a/ssadmin-web/vue.config.js b/ssadmin-web/vue.config.js index 30aecb1..9bc182d 100644 --- a/ssadmin-web/vue.config.js +++ b/ssadmin-web/vue.config.js @@ -4,14 +4,17 @@ module.exports = defineConfig({ devServer: { proxy: { "/api": { - // target: "http://localhost:28080", + target: "http://localhost:28080", // target: "https://mock.apifox.cn", - target: process.env.VUE_APP_BASE_API, + // target: process.env.VUE_APP_BASE_API, changeOrigin: true, pathRewrite: { - "^/api": process.env.VUE_APP_PATH + //"^/api": process.env.VUE_APP_PATH + "^/api": "/admin-api" } } } } }) + + -- Gitee From 4f30afb078e1cbcb0443e23ff68ed2c3bbeb0b23 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 15:59:06 +0800 Subject: [PATCH 08/41] for deploy. --- docker-compose.yml | 48 +++++++++++++++++++++++----------------------- release/README.md | 15 ++++++++++++++- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c908698..944ae84 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -15,14 +15,14 @@ services: - mysql:/var/lib/mysql/ - ./sql/:/docker-entrypoint-initdb.d:ro -# redis: -# container_name: ssadmin-redis -# image: redis:6-alpine -# restart: unless-stopped -# ports: -# - "6379:6379" -# volumes: -# - redis:/data + redis: + container_name: ssadmin-redis + image: redis:6-alpine + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis:/data server: container_name: ssadmin-server @@ -49,23 +49,23 @@ services: - mysql - redis -# web: -# container_name: ssadmin-web -# build: -# context: ./ssadmin-web -# args: -# NODE_ENV: -# ENV=${NODE_ENV:-production} -# VUE_APP_TITLE=${VUE_APP_TITLE:-SSADMIN管理系统} -# image: ssadmin-web -# restart: unless-stopped -# ports: -# - "80:80" -# depends_on: -# - server + web: + container_name: ssadmin-web + build: + context: ./ssadmin-web + args: + NODE_ENV: + ENV=${NODE_ENV:-production} + VUE_APP_TITLE=${VUE_APP_TITLE:-SSADMIN管理系统} + image: ssadmin-web + restart: unless-stopped + ports: + - "80:80" + depends_on: + - server volumes: mysql: driver: local -# redis: -# driver: local + redis: + driver: local diff --git a/release/README.md b/release/README.md index 0d231b6..13a6d64 100644 --- a/release/README.md +++ b/release/README.md @@ -26,7 +26,7 @@ - 参考给定demo,修改pom.xml文件增加依赖信息 - 实现业务逻辑代码 - controller - - 建议再分两层目录:app与admin,请求发送的url会自动带上/admin-api和/app-api,前端会统一反向代理为/api开头的url + - 其下再加一层admin目录结构,请求发送的url会自动带上/admin-api,前端会统一处理为/api开头的url - sevice - mapper 对应的sql注入方式请择其一,不能混用 - 使用注解 @@ -68,3 +68,16 @@ - 继续合并git merge --continue - 提交合并后的代码 git commit -m "Merge remote changes" + +## 自动化部署参考 +https://gitee.com/sspku_admin/rbac-classroom-demo 此课程仓库的`四、项目部署`部分 + +可使用[阿里云服务器](https://developer.aliyun.com/adc/series/university-peking2)的`基于Docker搭建Zabbix`实验 +1. 卸载宝塔--获取一个干净的操作环境 + ``` + wget http://download.bt.cn/install/bt-uninstall.shsh + bt-uninstall.sh + ``` +2. clone代码 +3. 进入对应目录层级并执行./deploy.sh + -- Gitee From d92c60176f33039a0f6fe8d7d903862fa105b61b Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 16:07:58 +0800 Subject: [PATCH 09/41] change copy path. --- ssadmin-server/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssadmin-server/Dockerfile b/ssadmin-server/Dockerfile index 90c8e3e..4d6c9ae 100644 --- a/ssadmin-server/Dockerfile +++ b/ssadmin-server/Dockerfile @@ -4,7 +4,7 @@ RUN mkdir -p /ssadmin-server WORKDIR /ssadmin-server ## 将Jar 文件复制到镜像中 -COPY ./ssadmin-system/target/ssadmin-system.jar app.jar +COPY ./ssadmin-system/ssadmin-system-biz/target/ssadmin-system-biz.jar app.jar ## 设置 TZ 时区 ENV TZ=Asia/Shanghai -- Gitee From 911f1727acc38342d33529fb57a4f57d2724079b Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 16:24:36 +0800 Subject: [PATCH 10/41] 401 again in cloud server. --- .../edu/ssadmin/security/filter/TokenAuthenticationFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java index 72aff4c..a42e0d0 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -37,7 +37,7 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); - //System.out.println(request.getRequestURI()); + System.out.println(request.getRequestURI()); if (StrUtil.isNotEmpty(token)) { try { // 1.1 基于 token 获取登录用户名 -- Gitee From 1c739412b9a825fb5cba8c128ad631714412eb00 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 16:47:47 +0800 Subject: [PATCH 11/41] nginx config. --- ssadmin-web/nginx.conf | 4 ++-- ssadmin-web/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ssadmin-web/nginx.conf b/ssadmin-web/nginx.conf index 965115f..83be2a7 100644 --- a/ssadmin-web/nginx.conf +++ b/ssadmin-web/nginx.conf @@ -17,10 +17,10 @@ server { } location /api/ { ## 后端项目 - 管理后台 - proxy_pass http://ssadmin-server:28080/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP + proxy_pass http://ssadmin-server:28080/admin-api/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } -} \ No newline at end of file +} diff --git a/ssadmin-web/package.json b/ssadmin-web/package.json index 605c958..afbfee5 100644 --- a/ssadmin-web/package.json +++ b/ssadmin-web/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "serve": "vue-cli-service serve", - "build": "vue-cli-service build ", + "build": "vue-cli-service build", "build:prod": "vue-cli-service build", "local": "vue-cli-service serve --mode local", "mock": "vue-cli-service serve --mode mock", -- Gitee From 71403932e485e56d2ba8485d107f7dac94b826e8 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 17:36:52 +0800 Subject: [PATCH 12/41] add phpmyadmin. --- docker-compose.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 944ae84..2470281 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,16 @@ services: volumes: - mysql:/var/lib/mysql/ - ./sql/:/docker-entrypoint-initdb.d:ro - + + phpmyadmin: + container_name: test-phpmyadmin + image: phpmyadmin/phpmyadmin:4.9 + restart: always + ports: + - "8888:80" + environment: + PMA_HOST: ssadmin-mysql + redis: container_name: ssadmin-redis image: redis:6-alpine -- Gitee From 6a9dfcf12d39c93ec9cf81569bd384f6bbaf9a31 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 17:56:00 +0800 Subject: [PATCH 13/41] add network in docker-compose. --- docker-compose.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 2470281..1ed2c64 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,8 @@ services: volumes: - mysql:/var/lib/mysql/ - ./sql/:/docker-entrypoint-initdb.d:ro + networks: + - my_network phpmyadmin: container_name: test-phpmyadmin @@ -23,6 +25,8 @@ services: - "8888:80" environment: PMA_HOST: ssadmin-mysql + networks: + - my_network redis: container_name: ssadmin-redis @@ -30,6 +34,8 @@ services: restart: unless-stopped ports: - "6379:6379" + networks: + - my_network volumes: - redis:/data @@ -41,6 +47,8 @@ services: restart: unless-stopped ports: - "28080:28080" + networks: + - my_network environment: SPRING_PROFILES_ACTIVE: local JAVA_OPTS: @@ -70,6 +78,8 @@ services: restart: unless-stopped ports: - "80:80" + networks: + - my_network depends_on: - server @@ -78,3 +88,7 @@ volumes: driver: local redis: driver: local + +networks: + my_network: + driver: bridge -- Gitee From b7d2ca69ad18a83a796e53f01900873d55b23eb2 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 18:23:12 +0800 Subject: [PATCH 14/41] use one sql_init. --- sql/ssadmin_init.sql | 25 +++++++++++++++++++ sql/ssadmin_init_application.sql | 42 ++++++++++++++++---------------- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index a7f3703..7a8f5ab 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -194,6 +194,31 @@ CREATE TABLE `system_role_menu` ( INSERT INTO `system_role_menu` (`role_id`,`menu_id`) VALUES (1,1); + + + +-- +-- 应用表的结构 `system_application` +-- + +CREATE TABLE `system_application` ( + `id` bigint NOT NULL, + `name` VARCHAR(255) NOT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存应用表的初始数据 `system_application` +-- + +INSERT INTO `system_application` (`id`,`name`) VALUES('1','application1'),('2','application2'); + /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; + diff --git a/sql/ssadmin_init_application.sql b/sql/ssadmin_init_application.sql index fe7a391..d526232 100644 --- a/sql/ssadmin_init_application.sql +++ b/sql/ssadmin_init_application.sql @@ -1,25 +1,25 @@ - -USE `ssadmin`; - --- -------------------------------------------------------- - -- --- 应用表的结构 `system_application` +-- USE `ssadmin`; -- - -CREATE TABLE `system_application` ( - `id` bigint NOT NULL, - `name` VARCHAR(255) NOT NULL, - `creator` VARCHAR(64) DEFAULT NULL, - `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updater` VARCHAR(64) DEFAULT NULL, - `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `deleted` BIT(1) NOT NULL DEFAULT b'0', - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - +-- -- -------------------------------------------------------- -- --- 转存应用表的初始数据 `system_application` +-- -- +-- -- 应用表的结构 `system_application` +-- -- -- - -INSERT INTO `system_application` (`id`,`name`) VALUES('1','application1'),('2','application2'); +-- CREATE TABLE `system_application` ( +-- `id` bigint NOT NULL, +-- `name` VARCHAR(255) NOT NULL, +-- `creator` VARCHAR(64) DEFAULT NULL, +-- `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, +-- `updater` VARCHAR(64) DEFAULT NULL, +-- `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, +-- `deleted` BIT(1) NOT NULL DEFAULT b'0', +-- PRIMARY KEY (`id`) +-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +-- +-- -- +-- -- 转存应用表的初始数据 `system_application` +-- -- +-- +-- INSERT INTO `system_application` (`id`,`name`) VALUES('1','application1'),('2','application2'); -- Gitee From 02dc867260e3c376f01d2b03ab668424373f977f Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 18:51:36 +0800 Subject: [PATCH 15/41] demo test ok. --- release/README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/release/README.md b/release/README.md index 13a6d64..0242462 100644 --- a/release/README.md +++ b/release/README.md @@ -19,6 +19,7 @@ mysql -u root -p < ssadmin_init_xxx.sql ``` - 容器环境下可在上述命令前加上:docker exec -i mysql +3. 当前云服务器自动化部署时的目录挂载还未完全测试通过,所以在云服务器继承测试时需要将自己的建表语句`手动粘贴`到`ssadmin_init.sql`文件中 ### 后端(ssadmin-server) - 新建模块 @@ -75,9 +76,14 @@ https://gitee.com/sspku_admin/rbac-classroom-demo 此课程仓库的`四、项 可使用[阿里云服务器](https://developer.aliyun.com/adc/series/university-peking2)的`基于Docker搭建Zabbix`实验 1. 卸载宝塔--获取一个干净的操作环境 ``` - wget http://download.bt.cn/install/bt-uninstall.shsh - bt-uninstall.sh + wget http://download.bt.cn/install/bt-uninstall.sh + sh bt-uninstall.sh ``` 2. clone代码 -3. 进入对应目录层级并执行./deploy.sh - + ``` + git clone -b xyy_1109 https://gitee.com/xie-yiyue/ssadmin.git + ``` + 3. 进入对应目录层级并执行 + ``` + ./deploy.sh + ``` -- Gitee From b04ee2941f60db4999d6ab717965b27b9f37b5a2 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 18:52:58 +0800 Subject: [PATCH 16/41] demo test ok. --- release/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/README.md b/release/README.md index 0242462..642ca10 100644 --- a/release/README.md +++ b/release/README.md @@ -19,7 +19,7 @@ mysql -u root -p < ssadmin_init_xxx.sql ``` - 容器环境下可在上述命令前加上:docker exec -i mysql -3. 当前云服务器自动化部署时的目录挂载还未完全测试通过,所以在云服务器继承测试时需要将自己的建表语句`手动粘贴`到`ssadmin_init.sql`文件中 +3. 当前云服务器自动化部署时的目录挂载还未完全测试通过,所以在云服务器继承测试时需要将自己的建表语句**手动粘贴**到`ssadmin_init.sql`文件中 ### 后端(ssadmin-server) - 新建模块 -- Gitee From b5eb41f9753dbfc00a8285151fee503d929b250a Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 18:53:27 +0800 Subject: [PATCH 17/41] demo test ok. --- release/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release/README.md b/release/README.md index 642ca10..064f96e 100644 --- a/release/README.md +++ b/release/README.md @@ -19,7 +19,7 @@ mysql -u root -p < ssadmin_init_xxx.sql ``` - 容器环境下可在上述命令前加上:docker exec -i mysql -3. 当前云服务器自动化部署时的目录挂载还未完全测试通过,所以在云服务器继承测试时需要将自己的建表语句**手动粘贴**到`ssadmin_init.sql`文件中 +3. 当前云服务器自动化部署时的目录挂载还未完全测试通过,所以在云服务器集成测试时需要将自己的建表语句**手动粘贴**到`ssadmin_init.sql`文件中 ### 后端(ssadmin-server) - 新建模块 -- Gitee From 36e9fb617494dec114349bf1993d06f71e70cf31 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 21:13:08 +0800 Subject: [PATCH 18/41] demo test ok. --- release/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/release/README.md b/release/README.md index 064f96e..f8d9332 100644 --- a/release/README.md +++ b/release/README.md @@ -81,9 +81,9 @@ https://gitee.com/sspku_admin/rbac-classroom-demo 此课程仓库的`四、项 ``` 2. clone代码 ``` - git clone -b xyy_1109 https://gitee.com/xie-yiyue/ssadmin.git + git clone [-b ] https://gitee.com/OSABC/ssadmin.git ``` - 3. 进入对应目录层级并执行 +3. 进入对应目录层级并执行 ``` ./deploy.sh ``` -- Gitee From b0049683d9cf4e07e55b7a474dc6a894e95755f8 Mon Sep 17 00:00:00 2001 From: xyy Date: Sun, 17 Dec 2023 21:27:09 +0800 Subject: [PATCH 19/41] add tips. --- release/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/release/README.md b/release/README.md index f8d9332..378765e 100644 --- a/release/README.md +++ b/release/README.md @@ -81,7 +81,10 @@ https://gitee.com/sspku_admin/rbac-classroom-demo 此课程仓库的`四、项 ``` 2. clone代码 ``` - git clone [-b ] https://gitee.com/OSABC/ssadmin.git + // 后续合入课程仓库后可使用的命令 + git clone https://gitee.com/OSABC/ssadmin.git + // 当前部署可使用 + git clone -b xyy_1109 https://gitee.com/xie-yiyue/ssadmin.git ``` 3. 进入对应目录层级并执行 ``` -- Gitee From 001d3828f6a41fe6c503f897f58f2e8620f53524 Mon Sep 17 00:00:00 2001 From: xyy Date: Wed, 20 Dec 2023 10:55:04 +0800 Subject: [PATCH 20/41] back modified. --- sql/ssadmin_init.sql | 22 ++- .../exception/util/ServiceExceptionUtil.java | 42 +++++ .../annotations/PreAuthenticated.java | 17 ++ .../SsadminSecurityAutoConfiguration.java | 1 - .../filter/TokenAuthenticationFilter.java | 2 +- ssadmin-server/ssadmin-module-web/pom.xml | 4 + .../core/handler/GlobalExceptionHandler.java | 3 +- .../ssadmin-system/ssadmin-system-biz/pom.xml | 37 ++++- .../admin/auth/AdminAuthController.java | 3 +- .../admin/auth/vo/AuthMenuRespVO.java | 41 +++++ .../auth/vo/AuthPermissionInfoRespVO.java | 10 ++ .../admin/permission/vo/menu/MenuBaseVO.java | 8 + .../controller/admin/user/UserController.java | 3 +- .../admin/user/vo/user/UserListRespVO.java | 2 + .../admin/user/vo/user/UserSimpleRespVO.java | 2 + .../server/convert/auth/AuthConvert.java | 19 ++- .../server/convert/user/UserConvert.java | 11 +- .../server/dataobject/permission/MenuDO.java | 25 ++- .../server/mapper/permission/MenuMapper.java | 1 - .../service/permission/MenuServiceImpl.java | 1 + .../permission/PermissionServiceImpl.java | 1 - .../service/user/AdminUserServiceImpl.java | 1 + .../ssadmin/server/utils/AdminLoginInfo.java | 2 - .../resources/mappers/AdminUserMapper.xml | 6 +- .../src/main/resources/mappers/MenuMapper.xml | 14 +- .../src/main/resources/mappers/RoleMapper.xml | 2 +- .../main/resources/mappers/RoleMenuMapper.xml | 4 +- .../auth/AdminAuthServiceImplTest.java | 151 +++++------------- ssadmin-server/ssadmin-test/pom.xml | 20 +++ .../SqlInitializationTestConfiguration.java | 52 ++++++ .../test/core/ut/BaseDBUnitTest.java | 4 - .../test/core/ut/BaseDbUnitTest.java | 32 ++++ .../framework/test/core/util/AssertUtils.java | 101 ++++++++++++ .../framework/test/core/util/RandomUtils.java | 138 ++++++++++++++++ ssadmin-web/src/views/Login.vue | 2 +- ssadmin-web/src/views/system/user/index.vue | 31 +--- 36 files changed, 641 insertions(+), 174 deletions(-) create mode 100644 ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java create mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java create mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java delete mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java create mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java create mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java create mode 100644 ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index 7a8f5ab..07198c8 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -57,6 +57,7 @@ CREATE TABLE `system_users` ( INSERT INTO `system_users` (`username`, `password`, `nickname`) VALUES ('sysadmin', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'zhang'), +('admin','$2a$04$sRWWctXGKN4HShTkH/rx/eTp3Y6lxjgocIe2vg.1WTevlMXVrFAie','test'), ('user', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'wang'); -- @@ -112,7 +113,8 @@ CREATE TABLE `system_user_role` ( INSERT INTO `system_user_role` (`user_id`, `role_id`) VALUES (1,1), - (2,3); + (2,1), + (3,3); -- -- 菜单表的结构 `system_menu` @@ -121,13 +123,17 @@ INSERT INTO `system_user_role` (`user_id`, `role_id`) VALUES CREATE TABLE `system_menu` ( `id` BIGINT(20) NOT NULL, `name` VARCHAR(50) NOT NULL, - `permission` VARCHAR(100) DEFAULT NULL, + `permission` VARCHAR(100) DEFAULT '', `type` INT NOT NULL, - `sort` int(10) NOT NULL, + `sort` int(10) NOT NULL DEFAULT '0', `parent_id` BIGINT(20) NOT NULL DEFAULT '0', - `path` VARCHAR(200) DEFAULT NULL, + `path` VARCHAR(200) DEFAULT '', + `icon` varchar(100) DEFAULT '#', `component` VARCHAR(255) DEFAULT NULL, `component_name` VARCHAR(255) DEFAULT NULL, + `visible` bit NOT NULL DEFAULT TRUE, + `keep_alive` bit NOT NULL DEFAULT TRUE, + `always_show` bit NOT NULL DEFAULT TRUE, `status` TINYINT(4) NOT NULL DEFAULT '0', `remark` VARCHAR(500) DEFAULT NULL, `creator` VARCHAR(64) DEFAULT NULL, @@ -143,10 +149,10 @@ CREATE TABLE `system_menu` ( -- INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`,`component_name`) VALUES - (1,'系统管理', '',1,1,0,'/system',null,null), - (2,'用户管理', '',2,1,1,'user','system/user/index','SystemUser'), - (3,'角色管理', '',2,2,1,'role','system/role/index','SystemRole'), - (4,'菜单管理', '',2,3,1,'menu','system/menu/index','SystemMenu'), + (1,'系统管理', '',1,1,0,'/system','',''), + (2,'用户管理', 'system:user:list',2,1,1,'user','system/user/index','SystemUser'), + (3,'角色管理', 'system:role:list',2,2,1,'role','system/role/index','SystemRole'), + (4,'菜单管理', 'system:menu:list',2,3,1,'menu','system/menu/index','SystemMenu'), (5,'用户新增', 'system:user:create',3,1,2,'','',''), (6,'用户删除', 'system:user:delete',3,2,2,'','',''), (7,'用户修改', 'system:user:update',3,3,2,'','',''), diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java index b11a209..74c69b3 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java +++ b/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java @@ -1,8 +1,11 @@ package edu.ssadmin.common.exception.util; +import com.google.common.annotations.VisibleForTesting; import edu.ssadmin.common.exception.ErrorCode; import edu.ssadmin.common.exception.ServiceException; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class ServiceExceptionUtil { public static ServiceException exception(ErrorCode errorCode) { @@ -13,4 +16,43 @@ public class ServiceExceptionUtil { return new ServiceException(code, message); } + + // ========== 格式化方法 ========== + + /** + * 将错误编号对应的消息使用 params 进行格式化。 + * + * @param code 错误编号 + * @param messagePattern 消息模版 + * @param params 参数 + * @return 格式化后的提示 + */ + @VisibleForTesting + public static String doFormat(int code, String messagePattern, Object... params) { + StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50); + int i = 0; + int j; + int l; + for (l = 0; l < params.length; l++) { + j = messagePattern.indexOf("{}", i); + if (j == -1) { + log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + if (i == 0) { + return messagePattern; + } else { + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } + } else { + sbuf.append(messagePattern, i, j); + sbuf.append(params[l]); + i = j + 2; + } + } + if (messagePattern.indexOf("{}", i) != -1) { + log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params); + } + sbuf.append(messagePattern.substring(i)); + return sbuf.toString(); + } } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java new file mode 100644 index 0000000..df8d628 --- /dev/null +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java @@ -0,0 +1,17 @@ +package edu.ssadmin.security.annotations; + +import java.lang.annotation.*; + +/** + * 声明用户需要登录 + * + * 为什么不使用 {@link org.springframework.security.access.prepost.PreAuthorize} 注解,原因是不通过时,抛出的是认证不通过,而不是未登录 + * + * @author 芋道源码 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +public @interface PreAuthenticated { +} diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java index 305ea0e..09ba46a 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java @@ -71,7 +71,6 @@ public class SsadminSecurityAutoConfiguration { */ @Bean public PasswordEncoder passwordEncoder() { - // System.out.println("password bean ok"); return new BCryptPasswordEncoder(securityProperties.getPasswordEncoderLength()); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java index a42e0d0..275e966 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java +++ b/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java @@ -38,6 +38,7 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { throws ServletException, IOException { String token = SecurityFrameworkUtils.obtainAuthorization(request, securityProperties.getTokenHeader()); System.out.println(request.getRequestURI()); + System.out.println(token); if (StrUtil.isNotEmpty(token)) { try { // 1.1 基于 token 获取登录用户名 @@ -53,7 +54,6 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter { SecurityFrameworkUtils.setUserName(username, request); } } catch (Throwable ex) { - CommonResult result = globalExceptionHandler.allExceptionHandler(request, ex); ServletUtils.writeJSON(response, result); return; diff --git a/ssadmin-server/ssadmin-module-web/pom.xml b/ssadmin-server/ssadmin-module-web/pom.xml index e8b5388..71f07cf 100644 --- a/ssadmin-server/ssadmin-module-web/pom.xml +++ b/ssadmin-server/ssadmin-module-web/pom.xml @@ -28,6 +28,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.security + spring-security-core + diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java index ddbee6b..88d2f0c 100644 --- a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java +++ b/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java @@ -23,7 +23,7 @@ import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import javax.validation.ValidationException; -import java.nio.file.AccessDeniedException; +import org.springframework.security.access.AccessDeniedException; import java.time.LocalDateTime; import java.util.Map; import java.util.Objects; @@ -223,6 +223,7 @@ public class GlobalExceptionHandler { // 插入异常日志 //this.createExceptionLog(req, ex); // 返回 ERROR CommonResult + System.out.println("default"); return CommonResult.error(INTERNAL_SERVER_ERROR.getCode(), INTERNAL_SERVER_ERROR.getMsg()); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml index d4223df..c0139a9 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml @@ -33,11 +33,11 @@ mapstruct 1.5.0.Final - - org.mapstruct - mapstruct-processor - 1.5.0.Final - + + + + + edu.ssadmin ssadmin-common @@ -55,9 +55,15 @@ spring-boot-starter-test test + + edu.ssadmin + ssadmin-test + 1.0 + test + - + @@ -67,6 +73,25 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + + org.mapstruct + mapstruct-processor + 1.5.0.Final + + + org.projectlombok + lombok + ${lombok.version} + + + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java index bfef9d8..afa2cba 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java @@ -53,7 +53,7 @@ public class AdminAuthController { @ApiOperation("使用账号密码登录") @PermitAll public CommonResult login(@RequestBody @Valid LoginReqVO reqVO) { - System.out.println(reqVO.getPassword()); + //System.out.println(reqVO.getPassword()); return success(authService.login(reqVO)); } @@ -90,6 +90,7 @@ public class AdminAuthController { // 1.3 获得菜单列表 Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); List menuList = menuService.getMenuList(menuIds); + System.out.println(menuList.get(0).getVisible()); menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 // 2. 拼接结果返回 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java new file mode 100644 index 0000000..cfd61a7 --- /dev/null +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java @@ -0,0 +1,41 @@ +package edu.ssadmin.server.controller.admin.auth.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AuthMenuRespVO { + + private Long id; + + private Long parentId; + + private String name; + + private String path; + + private String component; + + private String componentName; + + private String icon; + + private Boolean visible; + + private Boolean keepAlive; + + private Boolean alwaysShow; + + /** + * 子路由 + */ + private List children; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index 3f2a3ad..26731a4 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -32,6 +32,8 @@ public class AuthPermissionInfoRespVO { private String username; + private String nickname; + private String avatar; } @@ -54,6 +56,14 @@ public class AuthPermissionInfoRespVO { private String componentName; + private String icon; + + private Boolean visible; + + private Boolean keepAlive; + + private Boolean alwaysShow; + /** * 子路由 */ diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java index 0325b8c..45d6c5b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -33,12 +33,20 @@ public class MenuBaseVO { @Size(max = 200, message = "路由地址不能超过200个字符") private String path; + private String icon; + @Size(max = 200, message = "组件路径不能超过255个字符") private String component; @Size(max = 200, message = "组件名不能超过255个字符") private String componentName; + private Boolean visible; + + private Boolean keepAlive; + + private Boolean alwaysShow; + @NotNull(message = "状态不能为空") private Integer status; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java index ac21057..c0388eb 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java @@ -35,7 +35,8 @@ public class UserController { } @PutMapping("update") - @ApiOperation("修改用户")@PreAuthorize("@ss.hasPermission('system:user:update')") + @ApiOperation("修改用户") + @PreAuthorize("@ss.hasPermission('system:user:update')") public CommonResult updateUser(@Valid @RequestBody UserUpdateReqVO reqVO) { userService.updateUser(reqVO); return success(true); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java index fc993fd..489417f 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java @@ -1,11 +1,13 @@ package edu.ssadmin.server.controller.admin.user.vo.user; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor +@Builder public class UserListRespVO { private Long id; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java index a5ab7a6..d7d2e7a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -1,6 +1,7 @@ package edu.ssadmin.server.controller.admin.user.vo.user; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -8,6 +9,7 @@ import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor +@Builder public class UserSimpleRespVO { private Long id; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java index 78521fe..5b1465d 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import edu.ssadmin.common.pojo.AccessToken; import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.controller.admin.user.vo.user.UserListRespVO; import edu.ssadmin.server.dataobject.permission.MenuDO; import edu.ssadmin.server.dataobject.permission.RoleDO; import edu.ssadmin.server.dataobject.user.AdminUserDO; @@ -43,7 +44,20 @@ public interface AuthConvert { .build(); } - AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO menu); + default AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO bean){ + return AuthPermissionInfoRespVO.MenuVO.builder() + .id(bean.getId()) + .parentId(bean.getParentId()) + .name(bean.getName()) + .path(bean.getPath()) + .component(bean.getComponent()) + .componentName(bean.getComponentName()) + .icon(bean.getIcon()) + .visible(bean.getVisible()) + .keepAlive(bean.getKeepAlive()) + .alwaysShow(bean.getAlwaysShow()) + .build(); + } /** * 将菜单列表,构建成菜单树 @@ -52,6 +66,7 @@ public interface AuthConvert { * @return 菜单树 */ default List buildMenuTree(List menuList) { + System.out.println(menuList.get(0).getVisible()); if (CollUtil.isEmpty(menuList)) { return Collections.emptyList(); } @@ -61,7 +76,7 @@ public interface AuthConvert { menuList.sort(Comparator.comparing(MenuDO::getSort)); // 构建菜单树 - // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 + // 使用 LinkedHashMap 的原因,是为了排序 Map treeNodeMap = new LinkedHashMap<>(); menuList.forEach(menu -> treeNodeMap.put(menu.getId(), AuthConvert.INSTANCE.convertTreeNode(menu))); // 处理父子关系 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java index c41cc09..4bde133 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java @@ -26,7 +26,16 @@ public interface UserConvert { UserSimpleRespVO map(AdminUserDO roleDO); - UserListRespVO map1(AdminUserDO value); + + default UserListRespVO map1(AdminUserDO bean){ + return UserListRespVO.builder() + .id(bean.getId()) + .username(bean.getUsername()) + .mobile(bean.getMobile()) + .status(bean.getStatus()) + .creator(bean.getCreator()) + .build(); + } List convertList04(List list); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java index e416801..55c3dcb 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java @@ -59,6 +59,10 @@ public class MenuDO extends BaseDO { * 如果 path 为 http(s) 时,则它是外链 */ private String path; + /** + * 菜单图标 + */ + private String icon; /** * 组件路径 */ @@ -68,7 +72,26 @@ public class MenuDO extends BaseDO { * 组件名 */ private String componentName; - + /** + * 是否可见 + * + * 只有菜单、目录使用 + * 当设置为 true 时,该菜单不会展示在侧边栏,但是路由还是存在。例如说,一些独立的编辑页面 /edit/1024 等等 + */ + private Boolean visible; + /** + * 是否缓存 + * + * 只有菜单、目录使用,否使用 Vue 路由的 keep-alive 特性 + * 注意:如果开启缓存,则必须填写 {@link #componentName} 属性,否则无法缓存 + */ + private Boolean keepAlive; + /** + * 是否总是显示 + * + * 如果为 false 时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单 + */ + private Boolean alwaysShow; /** * 状态 * diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java index ab3da4e..e50050a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java @@ -15,7 +15,6 @@ public interface MenuMapper { void deleteById(Long id); - MenuDO selectById(Long id); MenuDO selectByParentIdAndName(Long parentId, String name) ; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java index 6209a83..6a50f0f 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java @@ -173,6 +173,7 @@ public class MenuServiceImpl implements MenuService { // 菜单为按钮类型时,无需 component、path 属性,进行置空 if (MenuTypeEnum.BUTTON.getType().equals(menu.getType())) { menu.setComponent(""); + menu.setIcon(""); menu.setComponentName(""); menu.setPath(""); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java index e7e151e..a92e7cd 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java @@ -156,7 +156,6 @@ public class PermissionServiceImpl implements PermissionService { if (CollUtil.isEmpty(roleIds)) { return Collections.emptySet(); } - // 如果是管理员的情况下,获取全部菜单编号 if (roleService.hasAnySuperAdmin(roleIds)) { return convertSet(menuService.getMenuList(), MenuDO::getId); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java index 913bb13..9da9d22 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java @@ -59,6 +59,7 @@ public class AdminUserServiceImpl implements AdminUserService { AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 user.setPassword(encodePassword(reqVO.getPassword())); // 加密密码 + //System.out.println(user.getPassword()); userMapper.insert(user); return user.getId(); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java index 19799b8..84167ed 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java @@ -20,8 +20,6 @@ public class AdminLoginInfo { if (token != null && token.startsWith(AUTHORIZATION_BEARER)) { token = token.substring(AUTHORIZATION_BEARER.length()).trim(); } - System.out.println("token"); - System.out.println(token); return jwtTokenUtil.getUsernameFromToken(token); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml index 9e801e6..1a04f61 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml @@ -59,7 +59,7 @@ - INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,remark,loginIp,loginDate) VALUES + INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,remark,login_ip,login_date) VALUES (#{id}, #{username}, #{password}, #{nickname},#{avatar},#{email},#{mobile},#{status},#{remark},#{loginIp},#{loginDate}) @@ -73,8 +73,8 @@ mobile = #{mobile}, status = #{status}, remark = #{remark}, - loginIp = #{loginIp}, - loginDate = #{loginDate}, + login_ip = #{loginIp}, + login_date = #{loginDate}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml index 52a4a89..0c79918 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml @@ -13,8 +13,12 @@ + + + + @@ -54,7 +58,7 @@ @@ -63,8 +67,8 @@ - INSERT INTO system_menu (name, permission,type,component,component_name,sort,parent_id,status,remark, path) VALUES - (#{name}, #{permission}, #{type},#{component},#{componentName},#{sort},#{parentId},#{status},#{remark},#{path}) + INSERT INTO system_menu (name, permission,type,component,component_name,sort,parent_id,status,remark,path,icon,visible,keep_alive,always_show) VALUES + (#{name}, #{permission}, #{type},#{component},#{componentName},#{sort},#{parentId},#{status},#{remark},#{path},#{icon},#{visible},#{keepAlive},#{alwaysShow}) UPDATE system_menu @@ -75,8 +79,12 @@ sort = #{sort}, parent_id = #{parentId}, path = #{path}, + icon = #{icon}, component = #{component}, component_name = #{componentName}, + visible = #{visible}, + keep_alive = #{keepAlive}, + always_show = #{alwaysShow}, status = #{status}, remark = #{remark}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml index ceaa2b3..8daec53 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml @@ -36,7 +36,7 @@ diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml index f0ea318..1f6b35e 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml @@ -27,7 +27,7 @@ SELECT * FROM system_role_menu WHERE deleted = 0 AND role_id IN - + #{roleId} @@ -39,7 +39,7 @@ INSERT INTO system_role_menu (role_id, menu_id) VALUES - + (#{item.roleId}, #{item.menuId}) diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java index 0db0ce1..2f28221 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java @@ -1,35 +1,40 @@ -package edu.ssadmin.server.service.auth; - -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.ReflectUtil; -import edu.ssadmin.common.enums.CommonStatusEnum; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.service.user.AdminUserService; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.context.annotation.Import; - -import javax.annotation.Resource; -import javax.validation.ConstraintViolationException; -import javax.validation.Validation; -import javax.validation.Validator; - -import static cn.hutool.core.util.RandomUtil.randomEle; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; - -@Import(AdminAuthServiceImpl.class) -public class AdminAuthServiceImplTest { - - @Resource - private AdminAuthServiceImpl authService; - - @MockBean - private AdminUserService userService; +//package edu.ssadmin.server.service.auth; +// +//import cn.hutool.core.util.RandomUtil; +//import cn.hutool.core.util.ReflectUtil; +//import edu.ssadmin.common.enums.CommonStatusEnum; +//import edu.ssadmin.server.dataobject.user.AdminUserDO; +//import edu.ssadmin.server.service.user.AdminUserService; +//import org.junit.jupiter.api.BeforeEach; +//import org.junit.jupiter.api.Test; +//import org.springframework.boot.test.mock.mockito.MockBean; +//import org.springframework.context.annotation.Import; +// +//import javax.annotation.Resource; +//import javax.validation.ConstraintViolationException; +//import javax.validation.Validation; +//import javax.validation.Validator; +// +//import static cn.hutool.core.util.RandomUtil.randomEle; +//import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS; +//import static edu.ssadmin.framework.test.core.util.AssertUtils.assertPojoEquals; +//import static edu.ssadmin.framework.test.core.util.AssertUtils.assertServiceException; +//import static edu.ssadmin.framework.test.core.util.RandomUtils.randomPojo; +//import static edu.ssadmin.framework.test.core.util.RandomUtils.randomString; +//import static org.junit.jupiter.api.Assertions.assertEquals; +//import static org.junit.jupiter.api.Assertions.assertThrows; +//import static org.mockito.ArgumentMatchers.*; +//import static org.mockito.ArgumentMatchers.any; +//import static org.mockito.Mockito.*; +// +//@Import(AdminAuthServiceImpl.class) +//public class AdminAuthServiceImplTest { +// +// @Resource +// private AdminAuthServiceImpl authService; +// +// @MockBean +// private AdminUserService userService; // @MockBean // private Validator validator; // @@ -40,7 +45,7 @@ public class AdminAuthServiceImplTest { // ReflectUtil.setFieldValue(authService, "validator", // Validation.buildDefaultValidatorFactory().getValidator()); // } - +// // @Test // public void testAuthenticate_success() { // // 准备参数 @@ -59,7 +64,7 @@ public class AdminAuthServiceImplTest { // // 校验 // assertPojoEquals(user, loginUser); // } - +// // @Test // public void testAuthenticate_userNotFound() { // // 准备参数 @@ -154,80 +159,6 @@ public class AdminAuthServiceImplTest { // } // // @Test -// public void testSendSmsCode() { -// // 准备参数 -// String mobile = randomString(); -// Integer scene = randomEle(SmsSceneEnum.values()).getScene(); -// AuthSmsSendReqVO reqVO = new AuthSmsSendReqVO(mobile, scene); -// // mock 方法(用户信息) -// AdminUserDO user = randomPojo(AdminUserDO.class); -// when(userService.getUserByMobile(eq(mobile))).thenReturn(user); -// -// // 调用 -// authService.sendSmsCode(reqVO); -// // 断言 -// verify(smsCodeApi).sendSmsCode(argThat(sendReqDTO -> { -// assertEquals(mobile, sendReqDTO.getMobile()); -// assertEquals(scene, sendReqDTO.getScene()); -// return true; -// })); -// } -// -// @Test -// public void testSmsLogin_success() { -// // 准备参数 -// String mobile = randomString(); -// String scene = randomString(); -// AuthSmsLoginReqVO reqVO = new AuthSmsLoginReqVO(mobile, scene); -// // mock 方法(用户信息) -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L)); -// when(userService.getUserByMobile(eq(mobile))).thenReturn(user); -// // mock 缓存登录用户到 Redis -// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -// .setUserType(UserTypeEnum.ADMIN.getValue())); -// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) -// .thenReturn(accessTokenDO); -// -// // 调用,并断言 -// AuthLoginRespVO loginRespVO = authService.smsLogin(reqVO); -// assertPojoEquals(accessTokenDO, loginRespVO); -// // 断言调用 -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_MOBILE.getType()) -// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) -// && o.getUserId().equals(user.getId())) -// ); -// } -// -// @Test -// public void testSocialLogin_success() { -// // 准备参数 -// AuthSocialLoginReqVO reqVO = randomPojo(AuthSocialLoginReqVO.class); -// // mock 方法(绑定的用户编号) -// Long userId = 1L; -// when(socialUserService.getSocialUser(eq(UserTypeEnum.ADMIN.getValue()), eq(reqVO.getType()), -// eq(reqVO.getCode()), eq(reqVO.getState()))).thenReturn(new SocialUserRespDTO(randomString(), userId)); -// // mock(用户) -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(userId)); -// when(userService.getUser(eq(userId))).thenReturn(user); -// // mock 缓存登录用户到 Redis -// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -// .setUserType(UserTypeEnum.ADMIN.getValue())); -// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) -// .thenReturn(accessTokenDO); -// -// // 调用,并断言 -// AuthLoginRespVO loginRespVO = authService.socialLogin(reqVO); -// assertPojoEquals(accessTokenDO, loginRespVO); -// // 断言调用 -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_SOCIAL.getType()) -// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) -// && o.getUserId().equals(user.getId())) -// ); -// } -// -// @Test // public void testValidateCaptcha_successWithEnable() { // // 准备参数 // AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); @@ -337,5 +268,5 @@ public class AdminAuthServiceImplTest { // // 校验调用参数 // verify(loginLogService, never()).createLoginLog(any()); // } - -} +// +//} diff --git a/ssadmin-server/ssadmin-test/pom.xml b/ssadmin-server/ssadmin-test/pom.xml index c0a76a4..db43300 100644 --- a/ssadmin-server/ssadmin-test/pom.xml +++ b/ssadmin-server/ssadmin-test/pom.xml @@ -18,10 +18,30 @@ + + edu.ssadmin + ssadmin-common + 1.0 + compile + org.springframework.boot spring-boot-starter-test + + + uk.co.jemos.podam + podam + 8.0.0.RELEASE + test + + + uk.co.jemos.podam + podam + 7.2.11.RELEASE + compile + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java new file mode 100644 index 0000000..a9c6569 --- /dev/null +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java @@ -0,0 +1,52 @@ +package edu.ssadmin.framework.test.config; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; +import org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer; +import org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer; +import org.springframework.boot.sql.init.DatabaseInitializationSettings; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; + +import javax.sql.DataSource; + +/** + * SQL 初始化的测试 Configuration + * + * 为什么不使用 org.springframework.boot.autoconfigure.sql.init.DataSourceInitializationConfiguration 呢? + * 因为我们在单元测试会使用 spring.main.lazy-initialization 为 true,开启延迟加载。此时,会导致 DataSourceInitializationConfiguration 初始化 + * 不过呢,当前类的实现代码,基本是复制 DataSourceInitializationConfiguration 的哈! + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnMissingBean(AbstractScriptDatabaseInitializer.class) +@ConditionalOnSingleCandidate(DataSource.class) +@ConditionalOnClass(name = "org.springframework.jdbc.datasource.init.DatabasePopulator") +@Lazy(value = false) // 禁止延迟加载 +@EnableConfigurationProperties(SqlInitializationProperties.class) +public class SqlInitializationTestConfiguration { + + @Bean + public DataSourceScriptDatabaseInitializer dataSourceScriptDatabaseInitializer(DataSource dataSource, + SqlInitializationProperties initializationProperties) { + DatabaseInitializationSettings settings = createFrom(initializationProperties); + return new DataSourceScriptDatabaseInitializer(dataSource, settings); + } + + static DatabaseInitializationSettings createFrom(SqlInitializationProperties properties) { + DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); + settings.setSchemaLocations(properties.getSchemaLocations()); + settings.setDataLocations(properties.getDataLocations()); + settings.setContinueOnError(properties.isContinueOnError()); + settings.setSeparator(properties.getSeparator()); + settings.setEncoding(properties.getEncoding()); + settings.setMode(properties.getMode()); + return settings; + } + +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java deleted file mode 100644 index f44d2be..0000000 --- a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDBUnitTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package edu.ssadmin.framework.test.core.ut; - -public class BaseDBUnitTest { -} diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java new file mode 100644 index 0000000..ea4368d --- /dev/null +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java @@ -0,0 +1,32 @@ +package edu.ssadmin.framework.test.core.ut; + +import edu.ssadmin.framework.test.config.SqlInitializationTestConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.jdbc.Sql; + +/** + * 依赖内存 DB 的单元测试 + * + * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 + * + * @author 芋道源码 + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) +@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 +@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB +public class BaseDbUnitTest { + + @Import({ + // DB 配置类 + DataSourceAutoConfiguration.class, // Spring DB 自动配置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 + SqlInitializationTestConfiguration.class, // SQL 初始化 + }) + public static class Application { + } + +} diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java new file mode 100644 index 0000000..c23989a --- /dev/null +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java @@ -0,0 +1,101 @@ +package edu.ssadmin.framework.test.core.util; + +import edu.ssadmin.common.exception.ErrorCode; +import edu.ssadmin.common.exception.ServiceException; +import edu.ssadmin.common.exception.util.ServiceExceptionUtil; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.function.Executable; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.ArrayUtil; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * 单元测试,assert 断言工具类 + * + * @author 芋道源码 + */ +public class AssertUtils { + + /** + * 比对两个对象的属性是否一致 + * + * 注意,如果 expected 存在的属性,actual 不存在的时候,会进行忽略 + * + * @param expected 期望对象 + * @param actual 实际对象 + * @param ignoreFields 忽略的属性数组 + */ + public static void assertPojoEquals(Object expected, Object actual, String... ignoreFields) { + Field[] expectedFields = ReflectUtil.getFields(expected.getClass()); + Arrays.stream(expectedFields).forEach(expectedField -> { + // 忽略 jacoco 自动生成的 $jacocoData 属性的情况 + if (expectedField.isSynthetic()) { + return; + } + // 如果是忽略的属性,则不进行比对 + if (ArrayUtil.contains(ignoreFields, expectedField.getName())) { + return; + } + // 忽略不存在的属性 + Field actualField = ReflectUtil.getField(actual.getClass(), expectedField.getName()); + if (actualField == null) { + return; + } + // 比对 + Assertions.assertEquals( + ReflectUtil.getFieldValue(expected, expectedField), + ReflectUtil.getFieldValue(actual, actualField), + String.format("Field(%s) 不匹配", expectedField.getName()) + ); + }); + } + + /** + * 比对两个对象的属性是否一致 + * + * 注意,如果 expected 存在的属性,actual 不存在的时候,会进行忽略 + * + * @param expected 期望对象 + * @param actual 实际对象 + * @param ignoreFields 忽略的属性数组 + * @return 是否一致 + */ + public static boolean isPojoEquals(Object expected, Object actual, String... ignoreFields) { + Field[] expectedFields = ReflectUtil.getFields(expected.getClass()); + return Arrays.stream(expectedFields).allMatch(expectedField -> { + // 如果是忽略的属性,则不进行比对 + if (ArrayUtil.contains(ignoreFields, expectedField.getName())) { + return true; + } + // 忽略不存在的属性 + Field actualField = ReflectUtil.getField(actual.getClass(), expectedField.getName()); + if (actualField == null) { + return true; + } + return Objects.equals(ReflectUtil.getFieldValue(expected, expectedField), + ReflectUtil.getFieldValue(actual, actualField)); + }); + } + + /** + * 执行方法,校验抛出的 Service 是否符合条件 + * + * @param executable 业务异常 + * @param errorCode 错误码对象 + * @param messageParams 消息参数 + */ + public static void assertServiceException(Executable executable, ErrorCode errorCode, Object... messageParams) { + // 调用方法 + ServiceException serviceException = assertThrows(ServiceException.class, executable); + // 校验错误码 + Assertions.assertEquals(errorCode.getCode(), serviceException.getCode(), "错误码不匹配"); + String message = ServiceExceptionUtil.doFormat(errorCode.getCode(), errorCode.getMsg(), messageParams); + Assertions.assertEquals(message, serviceException.getMessage(), "错误提示不匹配"); + } + +} diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java new file mode 100644 index 0000000..5bee2db --- /dev/null +++ b/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java @@ -0,0 +1,138 @@ +package edu.ssadmin.framework.test.core.util; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; + +import uk.co.jemos.podam.api.PodamFactory; +import uk.co.jemos.podam.api.PodamFactoryImpl; +import edu.ssadmin.common.enums.CommonStatusEnum; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * 随机工具类 + * + * @author 芋道源码 + */ +public class RandomUtils { + + private static final int RANDOM_STRING_LENGTH = 10; + + private static final int TINYINT_MAX = 127; + + private static final int RANDOM_DATE_MAX = 30; + + private static final int RANDOM_COLLECTION_LENGTH = 5; + + private static final PodamFactory PODAM_FACTORY = new PodamFactoryImpl(); + + static { + // 字符串 + PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(String.class, + (dataProviderStrategy, attributeMetadata, map) -> randomString()); + // Integer + PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Integer.class, (dataProviderStrategy, attributeMetadata, map) -> { + // 如果是 status 的字段,返回 0 或 1 + if ("status".equals(attributeMetadata.getAttributeName())) { + return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); + } + // 如果是 type、status 结尾的字段,返回 tinyint 范围 + if (StrUtil.endWithAnyIgnoreCase(attributeMetadata.getAttributeName(), + "type", "status", "category", "scope", "result")) { + return RandomUtil.randomInt(0, TINYINT_MAX + 1); + } + return RandomUtil.randomInt(); + }); + // LocalDateTime + PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(LocalDateTime.class, + (dataProviderStrategy, attributeMetadata, map) -> randomLocalDateTime()); + // Boolean + PODAM_FACTORY.getStrategy().addOrReplaceTypeManufacturer(Boolean.class, (dataProviderStrategy, attributeMetadata, map) -> { + // 如果是 deleted 的字段,返回非删除 + if ("deleted".equals(attributeMetadata.getAttributeName())) { + return false; + } + return RandomUtil.randomBoolean(); + }); + } + + public static String randomString() { + return RandomUtil.randomString(RANDOM_STRING_LENGTH); + } + + public static Long randomLongId() { + return RandomUtil.randomLong(0, Long.MAX_VALUE); + } + + public static Integer randomInteger() { + return RandomUtil.randomInt(0, Integer.MAX_VALUE); + } + + public static Date randomDate() { + return RandomUtil.randomDay(0, RANDOM_DATE_MAX); + } + + public static LocalDateTime randomLocalDateTime() { + // 设置 Nano 为零的原因,避免 MySQL、H2 存储不到时间戳 + return LocalDateTimeUtil.of(randomDate()).withNano(0); + } + + public static Short randomShort() { + return (short) RandomUtil.randomInt(0, Short.MAX_VALUE); + } + + public static Set randomSet(Class clazz) { + return Stream.iterate(0, i -> i).limit(RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH)) + .map(i -> randomPojo(clazz)).collect(Collectors.toSet()); + } + + public static Integer randomCommonStatus() { + return RandomUtil.randomEle(CommonStatusEnum.values()).getStatus(); + } + + public static String randomEmail() { + return randomString() + "@qq.com"; + } + + public static String randomURL() { + return "https://www.iocoder.cn/" + randomString(); + } + + @SafeVarargs + public static T randomPojo(Class clazz, Consumer... consumers) { + T pojo = PODAM_FACTORY.manufacturePojo(clazz); + // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理 + if (ArrayUtil.isNotEmpty(consumers)) { + Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); + } + return pojo; + } + + @SafeVarargs + public static T randomPojo(Class clazz, Type type, Consumer... consumers) { + T pojo = PODAM_FACTORY.manufacturePojo(clazz, type); + // 非空时,回调逻辑。通过它,可以实现 Pojo 的进一步处理 + if (ArrayUtil.isNotEmpty(consumers)) { + Arrays.stream(consumers).forEach(consumer -> consumer.accept(pojo)); + } + return pojo; + } + + @SafeVarargs + public static List randomPojoList(Class clazz, Consumer... consumers) { + int size = RandomUtil.randomInt(1, RANDOM_COLLECTION_LENGTH); + return Stream.iterate(0, i -> i).limit(size).map(o -> randomPojo(clazz, consumers)) + .collect(Collectors.toList()); + } + +} diff --git a/ssadmin-web/src/views/Login.vue b/ssadmin-web/src/views/Login.vue index 2fc2d68..6e55382 100644 --- a/ssadmin-web/src/views/Login.vue +++ b/ssadmin-web/src/views/Login.vue @@ -51,7 +51,7 @@ export default { // 登录处理逻辑中增加网络请求 login(this.loginForm.username,this.loginForm.password).then(res =>{ // 假设res.data.token是从后端接口返回的token - console.log(res.data.accessToken) + this.$message.success('登录成功') setToken(res.data.accessToken) this.$router.push({ path: '/' }) }).catch(() => { diff --git a/ssadmin-web/src/views/system/user/index.vue b/ssadmin-web/src/views/system/user/index.vue index c395633..24f3e34 100644 --- a/ssadmin-web/src/views/system/user/index.vue +++ b/ssadmin-web/src/views/system/user/index.vue @@ -190,29 +190,14 @@ export default { }, /** 查询用户列表 */ getList() { - this.loading = false; - this.userList = [ - { - "id": 1, - "username": "zhangsan", - "mobile":"13834931111", - "status": 0, - "creator": "admin", - }, - { - "id": 2, - "username": "text", - "mobile":"13834932222", - "status": 1, - "creator": "admin", - }, - ]; - // - // listUsers().then(response => { - // this.userList = response.data.list; - // this.loading = false; - // } - // ); + listUsers().then(response => { + this.loading = true; + //console.log(111); + this.userList = response.data; + //console.log(this.userList); + this.loading = false; + } + ); }, // 用户状态修改 handleStatusChange(row) { -- Gitee From f2f6d6da75154d9a1a0b1d01a59d846e31f8f6a6 Mon Sep 17 00:00:00 2001 From: xyy Date: Thu, 21 Dec 2023 23:09:19 +0800 Subject: [PATCH 21/41] the convert and other things need to modify. --- .../admin/auth/AdminAuthController.java | 8 +- .../{LoginReqVO.java => AuthLoginReqVO.java} | 2 +- ...{LoginRespVO.java => AuthLoginRespVO.java} | 2 +- .../server/convert/auth/AuthConvert.java | 7 +- .../server/service/auth/AdminAuthService.java | 8 +- .../service/auth/AdminAuthServiceImpl.java | 14 +- .../auth/AdminAuthServiceImplTest.java | 332 +++++++++--------- 7 files changed, 193 insertions(+), 180 deletions(-) rename ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/{LoginReqVO.java => AuthLoginReqVO.java} (97%) rename ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/{LoginRespVO.java => AuthLoginRespVO.java} (96%) diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java index afa2cba..4f43598 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java @@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollUtil; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; -import edu.ssadmin.server.controller.admin.auth.vo.LoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; import edu.ssadmin.server.convert.auth.AuthConvert; import edu.ssadmin.server.dataobject.permission.MenuDO; import edu.ssadmin.server.dataobject.permission.RoleDO; @@ -52,14 +52,14 @@ public class AdminAuthController { @PostMapping("/login") @ApiOperation("使用账号密码登录") @PermitAll - public CommonResult login(@RequestBody @Valid LoginReqVO reqVO) { + public CommonResult login(@RequestBody @Valid AuthLoginReqVO reqVO) { //System.out.println(reqVO.getPassword()); return success(authService.login(reqVO)); } @PostMapping("/refresh-token") @ApiOperation("刷新令牌") - public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { + public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { return success(authService.refreshToken(refreshToken)); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java similarity index 97% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java index 0850687..c36ae65 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginReqVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java @@ -16,7 +16,7 @@ import javax.validation.constraints.Pattern; @NoArgsConstructor @AllArgsConstructor @Builder -public class LoginReqVO { +public class AuthLoginReqVO { @ApiModelProperty(value = "账号", required = true, example = "user") @NotEmpty(message = "登录账号不能为空") @Length(min = 4, max = 16, message = "账号长度为 4-16 位") diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java similarity index 96% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java rename to ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java index 2010f97..aeb806c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/LoginRespVO.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java @@ -14,7 +14,7 @@ import java.time.LocalDateTime; @NoArgsConstructor @AllArgsConstructor @Builder -public class LoginRespVO { +public class AuthLoginRespVO { @ApiModelProperty(value = "用户编号", required = true, example = "1011") private Long userId; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java index 5b1465d..c0eb84c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java @@ -3,8 +3,7 @@ package edu.ssadmin.server.convert.auth; import cn.hutool.core.collection.CollUtil; import edu.ssadmin.common.pojo.AccessToken; import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; -import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserListRespVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; import edu.ssadmin.server.dataobject.permission.MenuDO; import edu.ssadmin.server.dataobject.permission.RoleDO; import edu.ssadmin.server.dataobject.user.AdminUserDO; @@ -24,8 +23,8 @@ public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); - default LoginRespVO convert(AccessToken bean){ - return LoginRespVO.builder() + default AuthLoginRespVO convert(AccessToken bean){ + return AuthLoginRespVO.builder() .userId(bean.getUserId()) .accessToken(bean.getAccessToken()) .refreshToken(bean.getRefreshToken()) diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java index bb4f589..e80d707 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java @@ -1,14 +1,14 @@ package edu.ssadmin.server.service.auth; -import edu.ssadmin.server.controller.admin.auth.vo.LoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; import edu.ssadmin.server.dataobject.user.AdminUserDO; public interface AdminAuthService { - LoginRespVO login(LoginReqVO reqVO); + AuthLoginRespVO login(AuthLoginReqVO reqVO); - LoginRespVO refreshToken(String refreshToken); + AuthLoginRespVO refreshToken(String refreshToken); AdminUserDO authenticate(String username, String password); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java index deb6826..11ad825 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java @@ -2,11 +2,9 @@ package edu.ssadmin.server.service.auth; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.exception.GlobalErrorCodeConstants; -import edu.ssadmin.common.utils.ValidationUtils; import edu.ssadmin.security.service.TokenService; -import edu.ssadmin.security.util.JwtTokenUtil; -import edu.ssadmin.server.controller.admin.auth.vo.LoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.LoginRespVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; import edu.ssadmin.server.convert.auth.AuthConvert; import edu.ssadmin.common.pojo.AccessToken; import edu.ssadmin.server.dataobject.user.AdminUserDO; @@ -39,7 +37,7 @@ public class AdminAuthServiceImpl implements AdminAuthService{ private Boolean captchaEnable; @Override - public LoginRespVO login(LoginReqVO reqVO) { + public AuthLoginRespVO login(AuthLoginReqVO reqVO) { // 校验验证码 verifyCaptcha(reqVO); @@ -51,7 +49,7 @@ public class AdminAuthServiceImpl implements AdminAuthService{ } @Override - public LoginRespVO refreshToken(String refreshToken) { + public AuthLoginRespVO refreshToken(String refreshToken) { if (!tokenService.isValidated(refreshToken)) { throw exception(GlobalErrorCodeConstants.BAD_REQUEST); @@ -94,7 +92,7 @@ public class AdminAuthServiceImpl implements AdminAuthService{ return user; } - private LoginRespVO createTokenAfterLoginSuccess(String username,Long userId) { + private AuthLoginRespVO createTokenAfterLoginSuccess(String username, Long userId) { // 创建访问令牌 AccessToken accessToken = tokenService.createAccessToken(username,userId); @@ -102,7 +100,7 @@ public class AdminAuthServiceImpl implements AdminAuthService{ return AuthConvert.INSTANCE.convert(accessToken); } - void verifyCaptcha(LoginReqVO reqVO) { + void verifyCaptcha(AuthLoginReqVO reqVO) { // 如果验证码关闭,则不进行校验 if (!captchaEnable) { return; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java index 2f28221..1043665 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java +++ b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java @@ -3,6 +3,8 @@ //import cn.hutool.core.util.RandomUtil; //import cn.hutool.core.util.ReflectUtil; //import edu.ssadmin.common.enums.CommonStatusEnum; +//import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; +//import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; //import edu.ssadmin.server.dataobject.user.AdminUserDO; //import edu.ssadmin.server.service.user.AdminUserService; //import org.junit.jupiter.api.BeforeEach; @@ -15,8 +17,11 @@ //import javax.validation.Validation; //import javax.validation.Validator; // +//import java.util.function.Consumer; +// //import static cn.hutool.core.util.RandomUtil.randomEle; //import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS; +//import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_USER_DISABLED; //import static edu.ssadmin.framework.test.core.util.AssertUtils.assertPojoEquals; //import static edu.ssadmin.framework.test.core.util.AssertUtils.assertServiceException; //import static edu.ssadmin.framework.test.core.util.RandomUtils.randomPojo; @@ -38,23 +43,29 @@ // @MockBean // private Validator validator; // -// @BeforeEach -// public void setUp() { -// ReflectUtil.setFieldValue(authService, "captchaEnable", false); -// // 注入一个 Validator 对象 -// ReflectUtil.setFieldValue(authService, "validator", -// Validation.buildDefaultValidatorFactory().getValidator()); -// } +//// @BeforeEach +//// public void setUp() { +//// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +//// // 注入一个 Validator 对象 +//// ReflectUtil.setFieldValue(authService, "validator", +//// Validation.buildDefaultValidatorFactory().getValidator()); +//// } // // @Test // public void testAuthenticate_success() { // // 准备参数 // String username = RandomUtil.randomString(10); // String password = RandomUtil.randomString(10); +// System.out.println(username); +// System.out.println(password); // // mock user 数据 // //单独pojo对象的随机生成和校验函数的实现 链式调用的实现 -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) -// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); +//// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) +//// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); +// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) +// .andThen(o -> o.setPassword(password)) +// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); +// // System.out.println(user.getUsername()); // when(userService.getUserByUsername(eq(username))).thenReturn(user); // // mock password 匹配 // when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); @@ -74,11 +85,11 @@ // // 调用, 并断言异常 // assertServiceException(() -> authService.authenticate(username, password), // AUTH_LOGIN_BAD_CREDENTIALS); -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) -// && o.getUserId() == null) -// ); +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +//// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +//// && o.getUserId() == null) +//// ); // } // // @Test @@ -87,18 +98,19 @@ // String username = randomString(); // String password = randomString(); // // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) -// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); +// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) +// .andThen(o -> o.setPassword(password)) +// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); // when(userService.getUserByUsername(eq(username))).thenReturn(user); // // // 调用, 并断言异常 // assertServiceException(() -> authService.authenticate(username, password), // AUTH_LOGIN_BAD_CREDENTIALS); -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) -// && o.getUserId().equals(user.getId())) -// ); +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +//// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +//// && o.getUserId().equals(user.getId())) +//// ); // } // // @Test @@ -107,8 +119,9 @@ // String username = randomString(); // String password = randomString(); // // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) -// .setPassword(password).setStatus(CommonStatusEnum.DISABLE.getStatus())); +// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) +// .andThen(o -> o.setPassword(password)) +// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); // when(userService.getUserByUsername(eq(username))).thenReturn(user); // // mock password 匹配 // when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); @@ -116,157 +129,160 @@ // // 调用, 并断言异常 // assertServiceException(() -> authService.authenticate(username, password), // AUTH_LOGIN_USER_DISABLED); -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -// && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) -// && o.getUserId().equals(user.getId())) -// ); +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +//// && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) +//// && o.getUserId().equals(user.getId())) +//// ); // } // // @Test // public void testLogin_success() { // // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, o -> -// o.setUsername("test_username").setPassword("test_password") -// .setSocialType(randomEle(SocialTypeEnum.values()).getType())); +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, ((Consumer)o -> +// o.setUsername("test_username")).andThen(o -> o.setPassword("test_password"))); // // // mock 验证码正确 // ReflectUtil.setFieldValue(authService, "captchaEnable", false); // // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") -// .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); +// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setId(1L)) +// .andThen(o->o.setUsername("test_username")) +// .andThen(o -> o.setPassword("test_password")) +// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); +//// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") +//// .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); // when(userService.getUserByUsername(eq("test_username"))).thenReturn(user); // // mock password 匹配 // when(userService.isPasswordMatch(eq("test_password"), eq(user.getPassword()))).thenReturn(true); -// // mock 缓存登录用户到 Redis -// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -// .setUserType(UserTypeEnum.ADMIN.getValue())); -// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) -// .thenReturn(accessTokenDO); +//// // mock 缓存登录用户到 Redis +//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +//// .setUserType(UserTypeEnum.ADMIN.getValue())); +//// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) +//// .thenReturn(accessTokenDO); // // // 调用,并校验 -// AuthLoginRespVO loginRespVO = authService.login(reqVO); -// assertPojoEquals(accessTokenDO, loginRespVO); -// // 校验调用参数 -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) -// && o.getUserId().equals(user.getId())) -// ); -// verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( -// user.getId(), UserTypeEnum.ADMIN.getValue(), -// reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); -// } -// -// @Test -// public void testValidateCaptcha_successWithEnable() { -// // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -// -// // mock 验证码打开 -// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -// // mock 验证通过 -// when(captchaService.verification(argThat(captchaVO -> { -// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); -// return true; -// }))).thenReturn(ResponseModel.success()); -// -// // 调用,无需断言 -// authService.validateCaptcha(reqVO); -// } -// -// @Test -// public void testValidateCaptcha_successWithDisable() { -// // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -// -// // mock 验证码关闭 -// ReflectUtil.setFieldValue(authService, "captchaEnable", false); -// -// // 调用,无需断言 -// authService.validateCaptcha(reqVO); -// } -// -// @Test -// public void testValidateCaptcha_constraintViolationException() { -// // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class).setCaptchaVerification(null); -// -// // mock 验证码打开 -// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -// -// // 调用,并断言异常 -// assertThrows(ConstraintViolationException.class, () -> authService.validateCaptcha(reqVO), -// "验证码不能为空"); -// } -// -// -// @Test -// public void testCaptcha_fail() { -// // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -// -// // mock 验证码打开 -// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -// // mock 验证通过 -// when(captchaService.verification(argThat(captchaVO -> { -// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); -// return true; -// }))).thenReturn(ResponseModel.errorMsg("就是不对")); -// -// // 调用, 并断言异常 -// assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是不对"); -// // 校验调用参数 -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -// && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) -// ); -// } -// -// @Test -// public void testRefreshToken() { -// // 准备参数 -// String refreshToken = randomString(); -// // mock 方法 -// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); -// when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) -// .thenReturn(accessTokenDO); -// -// // 调用 -// AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); -// // 断言 -// assertPojoEquals(accessTokenDO, loginRespVO); -// } -// -// @Test -// public void testLogout_success() { -// // 准备参数 -// String token = randomString(); -// // mock -// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -// .setUserType(UserTypeEnum.ADMIN.getValue())); -// when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); -// -// // 调用 -// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +//// AuthLoginRespVO loginRespVO = authService.login(reqVO); +//// assertPojoEquals(accessTokenDO, loginRespVO); // // 校验调用参数 -// verify(loginLogService).createLoginLog( -// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) -// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) -// ); -// // 调用,并校验 -// +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +//// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) +//// && o.getUserId().equals(user.getId())) +//// ); +//// verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( +//// user.getId(), UserTypeEnum.ADMIN.getValue(), +//// reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); // } // -// @Test -// public void testLogout_fail() { -// // 准备参数 -// String token = randomString(); -// -// // 调用 -// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); -// // 校验调用参数 -// verify(loginLogService, never()).createLoginLog(any()); -// } +//// @Test +//// public void testValidateCaptcha_successWithEnable() { +//// // 准备参数 +//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +//// +//// // mock 验证码打开 +//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +//// // mock 验证通过 +//// when(captchaService.verification(argThat(captchaVO -> { +//// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +//// return true; +//// }))).thenReturn(ResponseModel.success()); +//// +//// // 调用,无需断言 +//// authService.validateCaptcha(reqVO); +//// } +//// +//// @Test +//// public void testValidateCaptcha_successWithDisable() { +//// // 准备参数 +//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +//// +//// // mock 验证码关闭 +//// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +//// +//// // 调用,无需断言 +//// authService.validateCaptcha(reqVO); +//// } +//// +//// @Test +//// public void testValidateCaptcha_constraintViolationException() { +//// // 准备参数 +//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class).setCaptchaVerification(null); +//// +//// // mock 验证码打开 +//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +//// +//// // 调用,并断言异常 +//// assertThrows(ConstraintViolationException.class, () -> authService.validateCaptcha(reqVO), +//// "验证码不能为空"); +//// } +//// +//// +//// @Test +//// public void testCaptcha_fail() { +//// // 准备参数 +//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +//// +//// // mock 验证码打开 +//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +//// // mock 验证通过 +//// when(captchaService.verification(argThat(captchaVO -> { +//// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +//// return true; +//// }))).thenReturn(ResponseModel.errorMsg("就是不对")); +//// +//// // 调用, 并断言异常 +//// assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是不对"); +//// // 校验调用参数 +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +//// && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) +//// ); +//// } +//// +//// @Test +//// public void testRefreshToken() { +//// // 准备参数 +//// String refreshToken = randomString(); +//// // mock 方法 +//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); +//// when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) +//// .thenReturn(accessTokenDO); +//// +//// // 调用 +//// AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); +//// // 断言 +//// assertPojoEquals(accessTokenDO, loginRespVO); +//// } +//// +//// @Test +//// public void testLogout_success() { +//// // 准备参数 +//// String token = randomString(); +//// // mock +//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +//// .setUserType(UserTypeEnum.ADMIN.getValue())); +//// when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); +//// +//// // 调用 +//// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +//// // 校验调用参数 +//// verify(loginLogService).createLoginLog( +//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) +//// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) +//// ); +//// // 调用,并校验 +//// +//// } +//// +//// @Test +//// public void testLogout_fail() { +//// // 准备参数 +//// String token = randomString(); +//// +//// // 调用 +//// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +//// // 校验调用参数 +//// verify(loginLogService, never()).createLoginLog(any()); +//// } // //} -- Gitee From 1716241b2dc28a5334941d36fe0ba3b7ff355d89 Mon Sep 17 00:00:00 2001 From: xyy Date: Thu, 21 Dec 2023 23:59:07 +0800 Subject: [PATCH 22/41] the convert and other things need to modify. --- sql/ssadmin_init.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index 07198c8..be28095 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -59,6 +59,8 @@ INSERT INTO `system_users` (`username`, `password`, `nickname`) VALUES ('sysadmin', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'zhang'), ('admin','$2a$04$sRWWctXGKN4HShTkH/rx/eTp3Y6lxjgocIe2vg.1WTevlMXVrFAie','test'), ('user', '$2a$10$2n91ncs5vNaKEwcuk9dFVuwpm8o3kpj17YW0Ne.6.e.AF.m0MuBPa', 'wang'); +-- admin - 111111 +-- user - 1234abc -- -- 角色表的结构 `system_role` -- Gitee From 1bbec16f7d8f3ca78977df7ad998e37e357ca3d7 Mon Sep 17 00:00:00 2001 From: xyy Date: Wed, 27 Dec 2023 16:02:40 +0800 Subject: [PATCH 23/41] new project structure. --- Docker-HOWTO.md | 4 +- release/README.md | 10 + sql/README.md | 27 +- sql/ssadmin_init.sql | 113 +- .../.gitignore | 0 .../Dockerfile | 3 +- .../README.md | 0 .../pom.xml | 12 +- .../ssadmin-application-demo/pom.xml | 4 +- .../admin/ApplicationController.java | 4 +- .../admin/vo/ApplicationCreateReqVO.java | 0 .../admin/vo/ApplicationRespVO.java | 0 .../convert/ApplicationConvert.java | 0 .../application/dataobject/ApplicationDO.java | 0 .../application/mapper/ApplicationMapper.java | 0 .../service/ApplicationService.java | 0 .../service/ApplicationServiceImpl.java | 2 +- .../application/mapper/ApplicationMapper.xml | 0 .../ssadmin-framework/pom.xml | 23 + .../ssadmin-framework}/ssadmin-common/pom.xml | 3 +- .../ssadmin/common/core/IntArrayValuable.java | 0 .../edu/ssadmin/common/core/KeyValue.java | 0 .../common/enums/CommonStatusEnum.java | 0 .../ssadmin/common/exception/ErrorCode.java | 0 .../common/exception/ErrorCodeConstants.java | 0 .../exception/GlobalErrorCodeConstants.java | 0 .../common/exception/ServiceException.java | 0 .../exception/util/ServiceExceptionUtil.java | 17 + .../handler/GlobalExceptionHandler.java | 0 .../edu/ssadmin/common/pojo/CommonResult.java | 0 .../ssadmin/common/utils/CollectionUtils.java | 0 .../edu/ssadmin/common/utils/JsonUtils.java | 0 .../edu/ssadmin/common/utils/ObjectUtils.java | 0 .../ssadmin/common/utils/ServletUtils.java | 0 .../ssadmin/common/utils/ValidationUtils.java | 0 .../edu/ssadmin/common/validation/Mobile.java | 0 .../common/validation/MobileValidator.java | 0 .../pom.xml | 8 +- .../annotations/PreAuthenticated.java | 0 .../config/AuthorizeRequestsCustomizer.java | 0 .../security/config/SecurityProperties.java | 0 .../SsadminSecurityAutoConfiguration.java | 6 +- .../config/WebSecurityConfigurerAdapter.java | 0 .../filter/TokenAuthenticationFilter.java | 0 .../handler/AccessDeniedHandlerImpl.java | 0 .../handler/AuthenticationEntryPointImpl.java | 0 .../service/SecurityFrameworkService.java | 0 .../service/SecurityFrameworkServiceImpl.java | 7 +- .../ssadmin/security/util/JwtTokenUtil.java | 0 .../ssadmin/security/util/PasswordUtil.java | 0 .../security/util/SecurityFrameworkUtils.java | 0 .../ssadmin-spring-boot-starter-test}/pom.xml | 4 +- .../SqlInitializationTestConfiguration.java | 0 .../test/core/ut/BaseDbUnitTest.java | 0 .../framework/test/core/util/AssertUtils.java | 0 .../framework/test/core/util/RandomUtils.java | 0 .../ssadmin-spring-boot-starter-web}/pom.xml | 4 +- .../config/SsadminWebAutoConfiguration.java | 0 .../edu/ssadmin/web/config/WebProperties.java | 0 .../core/handler/GlobalExceptionHandler.java | 0 .../web/core/utils/WebFrameworkUtils.java | 0 .../ssadmin-module-system}/pom.xml | 4 +- .../ssadmin-module-system-api}/pom.xml | 2 +- .../system}/api/permission/PermissionApi.java | 2 +- .../system}/api/user/AdminUserApi.java | 2 +- .../enums/permission/MenuTypeEnum.java | 5 +- .../enums/permission/RoleCodeEnum.java | 2 +- .../src/main/resources/application-dev.yml | 0 .../src/main/resources/application-local.yml | 0 .../src/main/resources/application-prod.yml | 0 .../src/main/resources/application.yml | 0 .../resources/mappers/AdminUserMapper.xml | 8 +- .../ssadmin-module-system-biz}/pom.xml | 66 +- .../api/permission/PermissionApiImpl.java | 6 +- .../system}/api/user/AdminUserApiImpl.java | 4 +- .../edu/ssadmin/system}/controller/Demo.java | 2 +- .../admin/auth/AdminAuthController.java | 27 +- .../admin/auth/vo/AuthLoginReqVO.java | 2 +- .../admin/auth/vo/AuthLoginRespVO.java | 2 +- .../admin/auth/vo/AuthMenuRespVO.java | 2 +- .../auth/vo/AuthPermissionInfoRespVO.java | 2 +- .../admin/captcha/CaptchaController.java | 2 +- .../controller/admin/dept/DeptController.java | 2 +- .../admin/dict/DictDataController.java | 78 + .../admin/dict/DictTypeController.java | 74 + .../admin/dict/vo/data/DictDataBaseVO.java | 37 + .../dict/vo/data/DictDataCreateReqVO.java | 10 + .../admin/dict/vo/data/DictDataListReqVO.java | 20 + .../admin/dict/vo/data/DictDataRespVO.java | 20 + .../dict/vo/data/DictDataSimpleRespVO.java | 24 + .../dict/vo/data/DictDataUpdateReqVO.java | 15 + .../admin/dict/vo/type/DictTypeBaseVO.java | 25 + .../dict/vo/type/DictTypeCreateReqVO.java | 17 + .../admin/dict/vo/type/DictTypeListReqVO.java | 24 + .../admin/dict/vo/type/DictTypeRespVO.java | 22 + .../dict/vo/type/DictTypeSimpleRespVO.java | 17 + .../dict/vo/type/DictTypeUpdateReqVO.java | 15 + .../system/controller/admin/package-info.java | 1 + .../admin/permission/MenuController.java | 10 +- .../permission/PermissionController.java | 9 +- .../admin/permission/RoleController.java | 18 +- .../admin/permission/vo/menu/MenuBaseVO.java | 2 +- .../permission/vo/menu/MenuCreateReqVO.java | 2 +- .../permission/vo/menu/MenuListReqVO.java | 2 +- .../admin/permission/vo/menu/MenuRespVO.java | 2 +- .../permission/vo/menu/MenuSimpleRespVO.java | 2 +- .../permission/vo/menu/MenuUpdateReqVO.java | 2 +- .../PermissionAssignRoleMenuReqVO.java | 2 +- .../PermissionAssignUserRoleReqVO.java | 2 +- .../admin/permission/vo/role/RoleBaseVO.java | 2 +- .../permission/vo/role/RoleCreateReqVO.java | 2 +- .../permission/vo/role/RoleListReqVO.java | 22 + .../admin/permission/vo/role/RoleRespVO.java | 2 +- .../permission/vo/role/RoleSimpleRespVO.java | 2 +- .../permission/vo/role/RoleUpdateReqVO.java | 2 +- .../vo/role/RoleUpdateStatusReqVO.java | 2 +- .../controller/admin/user/UserController.java | 10 +- .../admin/user/UserProfileController.java | 15 +- .../user/vo/profile/UserProfileRespVO.java | 4 +- .../UserProfileUpdatePasswordReqVO.java | 2 +- .../vo/profile/UserProfileUpdateReqVO.java | 3 +- .../admin/user/vo/user/UserBaseVO.java | 2 +- .../admin/user/vo/user/UserCreateReqVO.java | 2 +- .../admin/user/vo/user/UserListRespVO.java | 2 +- .../admin/user/vo/user/UserRespVO.java | 2 +- .../admin/user/vo/user/UserSimpleRespVO.java | 2 +- .../user/vo/user/UserUpdatePasswordReqVO.java | 2 +- .../admin/user/vo/user/UserUpdateReqVO.java | 2 +- .../system}/convert/auth/AuthConvert.java | 64 +- .../system/convert/dict/DictDataConvert.java | 34 + .../system/convert/dict/DictTypeConvert.java | 30 + .../convert/permission/MenuConvert.java | 14 +- .../convert/permission/RoleConvert.java | 16 +- .../system}/convert/user/UserConvert.java | 12 +- .../system/dataobject}/AccessToken.java | 4 +- .../system}/dataobject/base/BaseDO.java | 2 +- .../system}/dataobject/base/TenantBaseDO.java | 2 +- .../system/dataobject/dict/DictDataDO.java | 59 + .../system/dataobject/dict/DictTypeDO.java | 40 + .../system}/dataobject/permission/MenuDO.java | 6 +- .../system}/dataobject/permission/RoleDO.java | 4 +- .../dataobject/permission/RoleMenuDO.java | 4 +- .../dataobject/permission/UserRoleDO.java | 4 +- .../system}/dataobject/user/AdminUserDO.java | 4 +- .../system/mapper/dict/DictDataMapper.java | 38 + .../system/mapper/dict/DictTypeMapper.java | 35 + .../system}/mapper/permission/MenuMapper.java | 6 +- .../system}/mapper/permission/RoleMapper.java | 6 +- .../mapper/permission/RoleMenuMapper.java | 4 +- .../mapper/permission/UserRoleMapper.java | 4 +- .../system}/mapper/user/AdminUserMapper.java | 5 +- .../service/auth/AdminAuthService.java | 8 +- .../service/auth/AdminAuthServiceImpl.java | 16 +- .../system/service/dict/DictDataService.java | 107 + .../service/dict/DictDataServiceImpl.java | 187 + .../system/service/dict/DictTypeService.java | 70 + .../service/dict/DictTypeServiceImpl.java | 141 + .../service/permission/MenuService.java | 10 +- .../service/permission/MenuServiceImpl.java | 21 +- .../service/permission/PermissionService.java | 2 +- .../permission/PermissionServiceImpl.java | 16 +- .../service/permission/RoleService.java | 13 +- .../service/permission/RoleServiceImpl.java | 19 +- .../system/service/token}/TokenService.java | 6 +- .../service/token}/TokenServiceImpl.java | 6 +- .../service/user/AdminUserService.java | 15 +- .../service/user/AdminUserServiceImpl.java | 20 +- .../ssadmin/system}/utils/AdminLoginInfo.java | 2 +- .../system/mapper/dict/DictDataMapper.xml | 103 + .../system/mapper/dict/DictTypeMapper.xml | 77 + .../system/mapper/permission}/MenuMapper.xml | 10 +- .../system/mapper/permission}/RoleMapper.xml | 25 +- .../mapper/permission}/RoleMenuMapper.xml | 4 +- .../mapper/permission}/UserRoleMapper.xml | 4 +- .../system/mapper/user}/AdminUserMapper.xml | 8 +- .../system}/ServerApplicationTests.java | 2 +- .../auth/AdminAuthServiceImplTest.java | 284 + .../ssadmin-module-tmpl/pom.xml | 0 ssadmin-parent-server/ssadmin-server/pom.xml | 73 + .../edu/ssadmin/server/ServerApplication.java | 4 +- .../src/main/resources/application-dev.yml | 0 .../src/main/resources/application-local.yml | 0 .../src/main/resources/application-prod.yml | 0 .../src/main/resources/application.yml | 3 - .../server/controller/admin/package-info.java | 1 - .../auth/AdminAuthServiceImplTest.java | 288 - ssadmin-web/.browserslistrc | 3 - ssadmin-web/.env.development | 11 - ssadmin-web/.env.mock | 8 - ssadmin-web/.env.production | 12 - ssadmin-web/.npmrc | 4 - ssadmin-web/Dockerfile | 20 - ssadmin-web/README.md | 23 - ssadmin-web/babel.config.js | 5 - ssadmin-web/jsconfig.json | 19 - ssadmin-web/nginx.conf | 26 - ssadmin-web/package.json | 31 - ssadmin-web/public/favicon.ico | Bin 4286 -> 0 bytes ssadmin-web/src/api/system/role.js | 75 - ssadmin-web/src/assets/logo.png | Bin 6849 -> 0 bytes ssadmin-web/src/directive/index.js | 17 - .../src/directive/permission/hasPermi.js | 27 - .../src/directive/permission/hasRole.js | 28 - ssadmin-web/src/layout/index.vue | 66 - ssadmin-web/src/main.js | 21 - ssadmin-web/src/permission.js | 22 - ssadmin-web/src/router/index.js | 74 - ssadmin-web/src/store/getters.js | 16 - ssadmin-web/src/store/index.js | 17 - ssadmin-web/src/store/modules/permission.js | 1 - ssadmin-web/src/store/modules/user.js | 106 - ssadmin-web/src/utils/request.js | 40 - ssadmin-web/src/views/Login.vue | 105 - ssadmin-web/src/views/User/Add.vue | 71 - ssadmin-web/src/views/User/List.vue | 41 - ssadmin-web/vue.config.js | 20 - ssadmin-web/yarn.lock | 5779 ----------------- vue-element-admin-master/.editorconfig | 14 + vue-element-admin-master/.env.development | 5 + vue-element-admin-master/.env.production | 6 + vue-element-admin-master/.env.staging | 8 + vue-element-admin-master/.eslintignore | 4 + vue-element-admin-master/.eslintrc.js | 198 + vue-element-admin-master/.github/FUNDING.yml | 4 + .../.github/ISSUE_TEMPLATE/bug_report.md | 33 + .../.github/ISSUE_TEMPLATE/feature_request.md | 7 + .../.github/ISSUE_TEMPLATE/question.md | 35 + .../.gitignore | 22 +- vue-element-admin-master/.travis.yml | 5 + vue-element-admin-master/LICENSE | 21 + vue-element-admin-master/README.es.md | 228 + vue-element-admin-master/README.ja.md | 224 + vue-element-admin-master/README.md | 243 + vue-element-admin-master/README.zh-CN.md | 266 + vue-element-admin-master/babel.config.js | 14 + vue-element-admin-master/build/index.js | 35 + vue-element-admin-master/jest.config.js | 24 + vue-element-admin-master/jsconfig.json | 9 + vue-element-admin-master/mock/article.js | 116 + vue-element-admin-master/mock/index.js | 60 + vue-element-admin-master/mock/mock-server.js | 81 + .../mock/remote-search.js | 51 + vue-element-admin-master/mock/role/index.js | 98 + vue-element-admin-master/mock/role/routes.js | 530 ++ vue-element-admin-master/mock/user.js | 84 + vue-element-admin-master/mock/utils.js | 48 + vue-element-admin-master/package.json | 110 + .../plop-templates/component/index.hbs | 26 + .../plop-templates/component/prompt.js | 55 + .../plop-templates/store/index.hbs | 16 + .../plop-templates/store/prompt.js | 62 + .../plop-templates/utils.js | 2 + .../plop-templates/view/index.hbs | 26 + .../plop-templates/view/prompt.js | 55 + vue-element-admin-master/plopfile.js | 9 + vue-element-admin-master/postcss.config.js | 5 + vue-element-admin-master/public/favicon.ico | Bin 0 -> 67646 bytes .../public/index.html | 12 +- .../src/App.vue | 10 +- .../src/api/application/manage.js | 0 vue-element-admin-master/src/api/article.js | 41 + vue-element-admin-master/src/api/qiniu.js | 8 + .../src/api/remote-search.js | 17 + vue-element-admin-master/src/api/role.js | 38 + .../src/api/system/dict/data.js | 72 +- .../src/api/system/dict/type.js | 64 +- .../src/api/system/menu.js | 52 + .../src/api/system/permission.js | 0 .../src/api/system/role.js | 64 + .../src/api/system/user.js | 129 +- .../src/api/user.js | 30 +- .../src/assets/401_images/401.gif | Bin 0 -> 164227 bytes .../src/assets/404_images/404.png | Bin 0 -> 98071 bytes .../src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes .../custom-theme/fonts/element-icons.ttf | Bin 0 -> 11028 bytes .../custom-theme/fonts/element-icons.woff | Bin 0 -> 6124 bytes .../src/assets/custom-theme/index.css | 1 + .../src/assets/icons/index.js | 9 + .../src/assets/icons/svg/404.svg | 1 + .../src/assets/icons/svg/bug.svg | 1 + .../src/assets/icons/svg/build.svg | 1 + .../src/assets/icons/svg/button.svg | 1 + .../src/assets/icons/svg/cascader.svg | 1 + .../src/assets/icons/svg/chart.svg | 1 + .../src/assets/icons/svg/checkbox.svg | 1 + .../src/assets/icons/svg/clipboard.svg | 1 + .../src/assets/icons/svg/code.svg | 1 + .../src/assets/icons/svg/color.svg | 1 + .../src/assets/icons/svg/component.svg | 1 + .../src/assets/icons/svg/config.svg | 1 + .../src/assets/icons/svg/dashboard.svg | 1 + .../src/assets/icons/svg/date-range.svg | 1 + .../src/assets/icons/svg/date.svg | 1 + .../src/assets/icons/svg/dict.svg | 1 + .../src/assets/icons/svg/documentation.svg | 1 + .../src/assets/icons/svg/download.svg | 1 + .../src/assets/icons/svg/drag.svg | 1 + .../src/assets/icons/svg/druid.svg | 1 + .../src/assets/icons/svg/edit.svg | 1 + .../src/assets/icons/svg/education.svg | 1 + .../src/assets/icons/svg/email.svg | 1 + .../src/assets/icons/svg/example.svg | 1 + .../src/assets/icons/svg/excel.svg | 1 + .../src/assets/icons/svg/exit-fullscreen.svg | 1 + .../src/assets/icons/svg/eye-open.svg | 1 + .../src/assets/icons/svg/eye.svg | 1 + .../src/assets/icons/svg/form.svg | 1 + .../src/assets/icons/svg/fullscreen.svg | 1 + .../src/assets/icons/svg/github.svg | 1 + .../src/assets/icons/svg/guide.svg | 1 + .../src/assets/icons/svg/icon.svg | 1 + .../src/assets/icons/svg/input.svg | 1 + .../src/assets/icons/svg/international.svg | 1 + .../src/assets/icons/svg/job.svg | 1 + .../src/assets/icons/svg/language.svg | 1 + .../src/assets/icons/svg/link.svg | 1 + .../src/assets/icons/svg/list.svg | 1 + .../src/assets/icons/svg/lock.svg | 1 + .../src/assets/icons/svg/log.svg | 1 + .../src/assets/icons/svg/logininfor.svg | 1 + .../src/assets/icons/svg/map.svg | 1 + .../src/assets/icons/svg/merchant.svg | 1 + .../src/assets/icons/svg/message.svg | 1 + .../src/assets/icons/svg/money.svg | 1 + .../src/assets/icons/svg/monitor.svg | 1 + .../src/assets/icons/svg/nested.svg | 1 + .../src/assets/icons/svg/number.svg | 1 + .../src/assets/icons/svg/online.svg | 1 + .../src/assets/icons/svg/order.svg | 1 + .../src/assets/icons/svg/password.svg | 1 + .../src/assets/icons/svg/pay.svg | 1 + .../src/assets/icons/svg/pdf.svg | 1 + .../src/assets/icons/svg/people.svg | 1 + .../src/assets/icons/svg/peoples.svg | 1 + .../src/assets/icons/svg/percentSign.svg | 1 + .../src/assets/icons/svg/phone.svg | 1 + .../src/assets/icons/svg/post.svg | 1 + .../src/assets/icons/svg/qq.svg | 1 + .../src/assets/icons/svg/question.svg | 1 + .../src/assets/icons/svg/radio.svg | 1 + .../src/assets/icons/svg/rate.svg | 1 + .../src/assets/icons/svg/redis.svg | 1 + .../src/assets/icons/svg/rich-text.svg | 1 + .../src/assets/icons/svg/row.svg | 1 + .../src/assets/icons/svg/search.svg | 1 + .../src/assets/icons/svg/select.svg | 1 + .../src/assets/icons/svg/server.svg | 1 + .../src/assets/icons/svg/shopping.svg | 1 + .../src/assets/icons/svg/size.svg | 1 + .../src/assets/icons/svg/skill.svg | 1 + .../src/assets/icons/svg/slider.svg | 1 + .../src/assets/icons/svg/star.svg | 1 + .../src/assets/icons/svg/swagger.svg | 1 + .../src/assets/icons/svg/switch.svg | 1 + .../src/assets/icons/svg/system.svg | 2 + .../src/assets/icons/svg/tab.svg | 1 + .../src/assets/icons/svg/table.svg | 1 + .../src/assets/icons/svg/textarea.svg | 1 + .../src/assets/icons/svg/theme.svg | 1 + .../src/assets/icons/svg/time-range.svg | 1 + .../src/assets/icons/svg/time.svg | 1 + .../src/assets/icons/svg/tool.svg | 1 + .../src/assets/icons/svg/tree-table.svg | 1 + .../src/assets/icons/svg/tree.svg | 1 + .../src/assets/icons/svg/upload.svg | 1 + .../src/assets/icons/svg/user.svg | 1 + .../src/assets/icons/svg/validCode.svg | 1 + .../src/assets/icons/svg/wechat.svg | 1 + .../src/assets/icons/svg/zip.svg | 1 + .../src/assets/icons/svgo.yml | 22 + .../src/assets/images/bg-mobile.png | Bin 0 -> 11090 bytes .../src/assets/images/bg.png | Bin 0 -> 61222 bytes .../src/assets/images/dark.svg | 1 + .../src/assets/images/default.jpg | Bin 0 -> 20200 bytes .../src/assets/images/icon.png | Bin 0 -> 229 bytes .../src/assets/images/light.svg | 1 + .../src/assets/images/pay/icon/alipay_app.svg | 1 + .../src/assets/images/pay/icon/alipay_bar.svg | 2 + .../src/assets/images/pay/icon/alipay_pc.svg | 1 + .../src/assets/images/pay/icon/alipay_qr.svg | 2 + .../src/assets/images/pay/icon/alipay_wap.svg | 1 + .../src/assets/images/pay/icon/mock.svg | 1 + .../src/assets/images/pay/icon/wx_app.svg | 2 + .../src/assets/images/pay/icon/wx_bar.svg | 1 + .../src/assets/images/pay/icon/wx_lite.svg | 1 + .../src/assets/images/pay/icon/wx_native.svg | 1 + .../src/assets/images/pay/icon/wx_pub.svg | 2 + .../src/assets/images/pic.png | Bin 0 -> 26025 bytes .../src/assets/images/profile.jpg | Bin .../src/assets/images/wechat.png | Bin 0 -> 1881 bytes .../src/components/BackToTop/index.vue | 111 + .../src/components/Breadcrumb/index.vue | 82 + .../src/components/Charts/Keyboard.vue | 155 + .../src/components/Charts/LineMarker.vue | 227 + .../src/components/Charts/MixChart.vue | 271 + .../src/components/Charts/mixins/resize.js | 56 + .../src/components/DndList/index.vue | 166 + .../src/components/DragSelect/index.vue | 65 + .../src/components/Dropzone/index.vue | 297 + .../src/components/ErrorLog/index.vue | 78 + .../src/components/GithubCorner/index.vue | 54 + .../src/components/Hamburger/index.vue | 44 + .../src/components/HeaderSearch/index.vue | 180 + .../src/components/IconSelect/index.vue | 68 + .../src/components/IconSelect/requireIcons.js | 11 + .../src/components/ImageCropper/index.vue | 1779 +++++ .../ImageCropper/utils/data2blob.js | 19 + .../ImageCropper/utils/effectRipple.js | 39 + .../components/ImageCropper/utils/language.js | 232 + .../components/ImageCropper/utils/mimes.js | 7 + .../src/components/JsonEditor/index.vue | 77 + .../src/components/Kanban/index.vue | 99 + .../src/components/MDinput/index.vue | 360 + .../MarkdownEditor/default-options.js | 31 + .../src/components/Pagination/index.vue | 101 + .../src/components/PanThumb/index.vue | 142 + .../src/components/ParentView/index.vue | 3 + .../src/components/RightPanel/index.vue | 145 + .../src/components/Screenfull/index.vue | 60 + .../src/components/Share/DropdownMenu.vue | 103 + .../src/components/SizeSelect/index.vue | 57 + .../src/components/Sticky/index.vue | 91 + .../src/components/SvgIcon/index.vue | 62 + .../src/components/TextHoverEffect/Mallki.vue | 113 + .../src/components/ThemePicker/index.vue | 175 + .../Tinymce/components/EditorImage.vue | 111 + .../components/Tinymce/dynamicLoadScript.js | 59 + .../src/components/Tinymce/index.vue | 247 + .../src/components/Tinymce/plugins.js | 7 + .../src/components/Tinymce/toolbar.js | 6 + .../src/components/Upload/SingleImage.vue | 134 + .../src/components/Upload/SingleImage2.vue | 130 + .../src/components/Upload/SingleImage3.vue | 157 + .../src/components/UploadExcel/index.vue | 138 + .../src/directive/clipboard/clipboard.js | 49 + .../src/directive/clipboard/index.js | 13 + .../src/directive/el-drag-dialog/drag.js | 77 + .../src/directive/el-drag-dialog/index.js | 13 + .../src/directive/el-table/adaptive.js | 41 + .../src/directive/el-table/index.js | 13 + .../src/directive/index.js | 12 + .../src/directive/permission/hasPermi.js | 27 + .../src/directive/permission/index.js | 14 + .../src/directive/permission/permission.js | 31 + .../src/directive/sticky.js | 91 + .../src/directive/waves/index.js | 13 + .../src/directive/waves/waves.css | 26 + .../src/directive/waves/waves.js | 72 + vue-element-admin-master/src/filters/index.js | 68 + vue-element-admin-master/src/icons/index.js | 9 + .../src/icons/svg/404.svg | 1 + .../src/icons/svg/bug.svg | 1 + .../src/icons/svg/chart.svg | 1 + .../src/icons/svg/clipboard.svg | 1 + .../src/icons/svg/component.svg | 1 + .../src/icons/svg/dashboard.svg | 1 + .../src/icons/svg/documentation.svg | 1 + .../src/icons/svg/drag.svg | 1 + .../src/icons/svg/edit.svg | 1 + .../src/icons/svg/education.svg | 1 + .../src/icons/svg/email.svg | 1 + .../src/icons/svg/example.svg | 1 + .../src/icons/svg/excel.svg | 1 + .../src/icons/svg/exit-fullscreen.svg | 1 + .../src/icons/svg/eye-open.svg | 1 + .../src/icons/svg/eye.svg | 1 + .../src/icons/svg/form.svg | 1 + .../src/icons/svg/fullscreen.svg | 1 + .../src/icons/svg/guide.svg | 1 + .../src/icons/svg/icon.svg | 1 + .../src/icons/svg/international.svg | 1 + .../src/icons/svg/language.svg | 1 + .../src/icons/svg/link.svg | 1 + .../src/icons/svg/list.svg | 1 + .../src/icons/svg/lock.svg | 1 + .../src/icons/svg/message.svg | 1 + .../src/icons/svg/money.svg | 1 + .../src/icons/svg/nested.svg | 1 + .../src/icons/svg/password.svg | 1 + .../src/icons/svg/pdf.svg | 1 + .../src/icons/svg/people.svg | 1 + .../src/icons/svg/peoples.svg | 1 + vue-element-admin-master/src/icons/svg/qq.svg | 1 + .../src/icons/svg/search.svg | 1 + .../src/icons/svg/shopping.svg | 1 + .../src/icons/svg/size.svg | 1 + .../src/icons/svg/skill.svg | 1 + .../src/icons/svg/star.svg | 1 + .../src/icons/svg/tab.svg | 1 + .../src/icons/svg/table.svg | 1 + .../src/icons/svg/theme.svg | 1 + .../src/icons/svg/tree-table.svg | 1 + .../src/icons/svg/tree.svg | 1 + .../src/icons/svg/user.svg | 1 + .../src/icons/svg/wechat.svg | 1 + .../src/icons/svg/zip.svg | 1 + vue-element-admin-master/src/icons/svgo.yml | 22 + .../src/layout/components/AppMain.vue | 57 + .../src/layout/components/Navbar.vue | 167 + .../src/layout/components/Settings/index.vue | 108 + .../layout/components/Sidebar/FixiOSBug.js | 26 + .../src/layout/components/Sidebar/Item.vue | 41 + .../src/layout/components/Sidebar/Link.vue | 43 + .../src/layout/components/Sidebar/Logo.vue | 82 + .../layout/components/Sidebar/SidebarItem.vue | 95 + .../src/layout/components/Sidebar/index.vue | 55 + .../layout/components/TagsView/ScrollPane.vue | 94 + .../src/layout/components/TagsView/index.vue | 292 + .../src/layout/components/index.js | 5 + vue-element-admin-master/src/layout/index.vue | 102 + .../src/layout/mixin/ResizeHandler.js | 45 + vue-element-admin-master/src/main.js | 66 + vue-element-admin-master/src/permission.js | 90 + .../src/plugins/auth.js | 0 .../src/plugins/index.js | 0 .../src/plugins/modal.js | 0 vue-element-admin-master/src/router/index.js | 170 + .../src/router/modules/charts.js | 36 + .../src/router/modules/components.js | 96 + .../src/router/modules/nested.js | 66 + .../src/router/modules/table.js | 41 + vue-element-admin-master/src/settings.js | 35 + vue-element-admin-master/src/store/getters.js | 19 + vue-element-admin-master/src/store/index.js | 25 + .../src/store/modules/app.js | 56 + .../src/store/modules/dict.js | 50 + .../src/store/modules/errorLog.js | 28 + .../src/store/modules/permission.js | 138 + .../src/store/modules/settings.js | 35 + .../src/store/modules/tagsView.js | 160 + .../src/store/modules/user.js | 138 + vue-element-admin-master/src/styles/btn.scss | 99 + .../src/styles/element-ui.scss | 84 + .../src/styles/element-variables.scss | 31 + .../src/styles}/index.scss | 12 +- .../src/styles/mixin.scss | 66 + .../src/styles/sidebar.scss | 226 + .../src/styles/transition.scss | 48 + .../src/styles/variables.scss | 35 + .../src/utils/auth.js | 21 + .../src/utils/clipboard.js | 32 + .../src/utils/common.js | 9 +- .../src/utils/constants.js | 10 +- vue-element-admin-master/src/utils/dict.js | 77 + .../src/utils/error-log.js | 35 + .../src/utils/errorCode.js | 6 + .../src/utils/functions.js | 104 + .../src/utils/get-page-title.js | 10 + vue-element-admin-master/src/utils/index.js | 370 ++ .../src/utils/open-window.js | 25 + .../src/utils/permission.js | 21 + vue-element-admin-master/src/utils/request.js | 167 + .../src/utils/scroll-to.js | 58 + .../src/utils/validate.js | 87 + .../src/vendor/Export2Excel.js | 220 + .../src/vendor/Export2Zip.js | 24 + .../src/views/application/manage/index.vue | 71 +- .../src/views/charts/keyboard.vue | 23 + .../src/views/charts/line.vue | 23 + .../src/views/charts/mix-chart.vue | 23 + .../src/views/clipboard/index.vue | 49 + .../views/components-demo/avatar-upload.vue | 61 + .../src/views/components-demo/back-to-top.vue | 154 + .../src/views/components-demo/count-to.vue | 218 + .../src/views/components-demo/dnd-list.vue | 39 + .../src/views/components-demo/drag-dialog.vue | 61 + .../src/views/components-demo/drag-kanban.vue | 66 + .../src/views/components-demo/drag-select.vue | 43 + .../src/views/components-demo/dropzone.vue | 31 + .../src/views/components-demo/json-editor.vue | 36 + .../src/views/components-demo/mixin.vue | 169 + .../src/views/components-demo/split-pane.vue | 67 + .../src/views/components-demo/sticky.vue | 135 + .../src/views/components-demo/tinymce.vue | 36 + .../dashboard/admin/components/BarChart.vue | 102 + .../dashboard/admin/components/BoxCard.vue | 118 + .../dashboard/admin/components/LineChart.vue | 135 + .../dashboard/admin/components/PanelGroup.vue | 181 + .../dashboard/admin/components/PieChart.vue | 79 + .../admin/components/RaddarChart.vue | 116 + .../admin/components/TodoList/Todo.vue | 81 + .../admin/components/TodoList/index.scss | 320 + .../admin/components/TodoList/index.vue | 127 + .../admin/components/TransactionTable.vue | 55 + .../admin/components/mixins/resize.js | 55 + .../src/views/dashboard/admin/index.vue | 124 + .../src/views/dashboard/editor/index.vue | 74 + .../src/views/dashboard/index.vue | 60 +- .../views/error-log/components/ErrorTestA.vue | 13 + .../views/error-log/components/ErrorTestB.vue | 11 + .../src/views/error-log/index.vue | 32 + .../src/views/error-page/401.vue | 99 + .../src/views/error-page/404.vue | 228 + .../example/components/ArticleDetail.vue | 289 + .../example/components/Dropdown/Comment.vue | 41 + .../example/components/Dropdown/Platform.vue | 46 + .../example/components/Dropdown/SourceUrl.vue | 38 + .../example/components/Dropdown/index.js | 3 + .../src/views/example/components/Warning.vue | 13 + .../src/views/example/create.vue | 13 + .../src/views/example/edit.vue | 13 + .../src/views/example/list.vue | 112 + .../excel/components/AutoWidthOption.vue | 34 + .../views/excel/components/BookTypeOption.vue | 39 + .../views/excel/components/FilenameOption.vue | 27 + .../src/views/excel/export-excel.vue | 116 + .../src/views/excel/merge-header.vue | 101 + .../src/views/excel/select-excel.vue | 107 + .../src/views/excel/upload-excel.vue | 42 + .../src/views/icons/element-icons.js | 3 + .../src/views/icons/index.vue | 101 + .../src/views/icons/svg-icons.js | 10 + .../src/views/login/auth-redirect.vue | 15 + .../views/login/components/SocialSignin.vue | 72 + .../src/views/login/index.vue | 326 + .../src/views/nested/menu1/index.vue | 7 + .../src/views/nested/menu1/menu1-1/index.vue | 7 + .../src/views/nested/menu1/menu1-2/index.vue | 7 + .../nested/menu1/menu1-2/menu1-2-1/index.vue | 5 + .../nested/menu1/menu1-2/menu1-2-2/index.vue | 5 + .../src/views/nested/menu1/menu1-3/index.vue | 5 + .../src/views/nested/menu2/index.vue | 5 + .../src/views/pdf/content.js | 58 + .../src/views/pdf/download.vue | 201 + .../src/views/pdf/index.vue | 13 + .../permission/components/SwitchRoles.vue | 32 + .../src/views/permission/directive.vue | 111 + .../src/views/permission/page.vue | 19 + .../src/views/permission/role.vue | 270 + .../src/views/profile/components/Account.vue | 38 + .../src/views/profile/components/Activity.vue | 185 + .../src/views/profile/components/Timeline.vue | 43 + .../src/views/profile/components/UserCard.vue | 134 + .../src/views/profile/index.vue | 68 + .../src/views/qiniu/upload.vue | 41 + .../src/views/redirect/index.vue | 12 + .../src/views/system/dict/data.vue | 217 +- .../src/views/system/dict/index.vue | 206 +- .../src/views/system/menu/index.vue | 423 ++ .../src/views/system/role/index.vue | 475 ++ .../src/views/system/user/index.vue | 200 +- .../src/views/system/user/profile/index.vue | 0 .../src/views/tab/components/TabPane.vue | 103 + .../src/views/tab/index.vue | 57 + .../src/views/table/complex-table.vue | 379 ++ .../src/views/table/drag-table.vue | 153 + .../dynamic-table/components/FixedThead.vue | 62 + .../dynamic-table/components/UnfixedThead.vue | 50 + .../src/views/table/dynamic-table/index.vue | 24 + .../src/views/table/inline-edit-table.vue | 149 + .../src/views/theme/index.vue | 120 + .../src/views/zip/index.vue | 77 + .../tests/unit/.eslintrc.js | 5 + .../tests/unit/components/Hamburger.spec.js | 18 + .../tests/unit/components/SvgIcon.spec.js | 22 + .../tests/unit/utils/formatTime.spec.js | 29 + .../tests/unit/utils/param2Obj.spec.js | 14 + .../tests/unit/utils/parseTime.spec.js | 37 + .../tests/unit/utils/validate.spec.js | 28 + vue-element-admin-master/vue.config.js | 136 + 660 files changed, 25768 insertions(+), 7956 deletions(-) rename {ssadmin-server => ssadmin-parent-server}/.gitignore (100%) rename {ssadmin-server => ssadmin-parent-server}/Dockerfile (80%) rename {ssadmin-server => ssadmin-parent-server}/README.md (100%) rename {ssadmin-server => ssadmin-parent-server}/pom.xml (94%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/pom.xml (87%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java (92%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java (100%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java (96%) rename {ssadmin-server => ssadmin-parent-server}/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml (100%) create mode 100644 ssadmin-parent-server/ssadmin-framework/pom.xml rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/pom.xml (91%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/core/IntArrayValuable.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/core/KeyValue.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/enums/CommonStatusEnum.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCode.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/exception/GlobalErrorCodeConstants.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java (74%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/handler/GlobalExceptionHandler.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ValidationUtils.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java (100%) rename {ssadmin-server => ssadmin-parent-server/ssadmin-framework}/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/pom.xml (83%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/config/SecurityProperties.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java (89%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java (77%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/util/JwtTokenUtil.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/util/PasswordUtil.java (100%) rename {ssadmin-server/ssadmin-module-security => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security}/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java (100%) rename {ssadmin-server/ssadmin-test => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test}/pom.xml (93%) rename {ssadmin-server/ssadmin-test => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test}/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java (100%) rename {ssadmin-server/ssadmin-test => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test}/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java (100%) rename {ssadmin-server/ssadmin-test => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test}/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java (100%) rename {ssadmin-server/ssadmin-test => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test}/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java (100%) rename {ssadmin-server/ssadmin-module-web => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web}/pom.xml (91%) rename {ssadmin-server/ssadmin-module-web => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web}/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java (100%) rename {ssadmin-server/ssadmin-module-web => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web}/src/main/java/edu/ssadmin/web/config/WebProperties.java (100%) rename {ssadmin-server/ssadmin-module-web => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web}/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java (100%) rename {ssadmin-server/ssadmin-module-web => ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web}/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java (100%) rename {ssadmin-server/ssadmin-system => ssadmin-parent-server/ssadmin-module-system}/pom.xml (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/pom.xml (94%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system}/api/permission/PermissionApi.java (96%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system}/api/user/AdminUserApi.java (95%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system}/enums/permission/MenuTypeEnum.java (72%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system}/enums/permission/RoleCodeEnum.java (92%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/src/main/resources/application-dev.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/src/main/resources/application-local.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/src/main/resources/application-prod.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/src/main/resources/application.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api}/src/main/resources/mappers/AdminUserMapper.xml (92%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz}/pom.xml (47%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/api/permission/PermissionApiImpl.java (85%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/api/user/AdminUserApiImpl.java (89%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/Demo.java (89%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/auth/AdminAuthController.java (79%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/auth/vo/AuthLoginReqVO.java (96%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/auth/vo/AuthLoginRespVO.java (93%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/auth/vo/AuthMenuRespVO.java (91%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/auth/vo/AuthPermissionInfoRespVO.java (95%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/captcha/CaptchaController.java (40%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/dept/DeptController.java (39%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictDataController.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictTypeController.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataBaseVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataListReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataRespVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeBaseVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeListReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeRespVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/package-info.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/MenuController.java (90%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/PermissionController.java (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/RoleController.java (81%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuBaseVO.java (95%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuCreateReqVO.java (70%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuListReqVO.java (64%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuRespVO.java (85%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuSimpleRespVO.java (80%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/menu/MenuUpdateReqVO.java (80%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java (83%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java (83%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleBaseVO.java (92%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleCreateReqVO.java (70%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleListReqVO.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleRespVO.java (85%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleSimpleRespVO.java (77%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleUpdateReqVO.java (80%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java (84%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/UserController.java (91%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/UserProfileController.java (86%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/profile/UserProfileRespVO.java (83%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java (77%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserBaseVO.java (93%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserCreateReqVO.java (87%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserListRespVO.java (85%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserRespVO.java (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserSimpleRespVO.java (81%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/controller/admin/user/vo/user/UserUpdateReqVO.java (82%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/convert/auth/AuthConvert.java (55%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictDataConvert.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictTypeConvert.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/convert/permission/MenuConvert.java (57%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/convert/permission/RoleConvert.java (53%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/convert/user/UserConvert.java (75%) rename {ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject}/AccessToken.java (90%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/base/BaseDO.java (92%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/base/TenantBaseDO.java (83%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictDataDO.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictTypeDO.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/permission/MenuDO.java (93%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/permission/RoleDO.java (86%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/permission/RoleMenuDO.java (75%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/permission/UserRoleDO.java (75%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/dataobject/user/AdminUserDO.java (91%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictDataMapper.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictTypeMapper.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/mapper/permission/MenuMapper.java (78%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/mapper/permission/RoleMapper.java (66%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/mapper/permission/RoleMenuMapper.java (83%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/mapper/permission/UserRoleMapper.java (82%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/mapper/user/AdminUserMapper.java (81%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/auth/AdminAuthService.java (49%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/auth/AdminAuthServiceImpl.java (87%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataService.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataServiceImpl.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeService.java create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeServiceImpl.java rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/MenuService.java (80%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/MenuServiceImpl.java (90%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/PermissionService.java (98%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/PermissionServiceImpl.java (94%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/RoleService.java (81%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/permission/RoleServiceImpl.java (89%) rename {ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token}/TokenService.java (43%) rename {ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token}/TokenServiceImpl.java (88%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/user/AdminUserService.java (86%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/service/user/AdminUserServiceImpl.java (92%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system}/utils/AdminLoginInfo.java (96%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictDataMapper.xml create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictTypeMapper.xml rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission}/MenuMapper.xml (93%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission}/RoleMapper.xml (75%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission}/RoleMenuMapper.xml (94%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission}/UserRoleMapper.xml (94%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/user}/AdminUserMapper.xml (93%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server => ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system}/ServerApplicationTests.java (86%) create mode 100644 ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/service/auth/AdminAuthServiceImplTest.java rename {ssadmin-server => ssadmin-parent-server}/ssadmin-module-tmpl/pom.xml (100%) create mode 100644 ssadmin-parent-server/ssadmin-server/pom.xml rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-server}/src/main/java/edu/ssadmin/server/ServerApplication.java (82%) rename {ssadmin-server/ssadmin-system/ssadmin-system-biz => ssadmin-parent-server/ssadmin-server}/src/main/resources/application-dev.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-server}/src/main/resources/application-local.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-server}/src/main/resources/application-prod.yml (100%) rename {ssadmin-server/ssadmin-system/ssadmin-system-api => ssadmin-parent-server/ssadmin-server}/src/main/resources/application.yml (94%) delete mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java delete mode 100644 ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java delete mode 100644 ssadmin-web/.browserslistrc delete mode 100644 ssadmin-web/.env.development delete mode 100644 ssadmin-web/.env.mock delete mode 100644 ssadmin-web/.env.production delete mode 100644 ssadmin-web/.npmrc delete mode 100644 ssadmin-web/Dockerfile delete mode 100644 ssadmin-web/README.md delete mode 100644 ssadmin-web/babel.config.js delete mode 100644 ssadmin-web/jsconfig.json delete mode 100644 ssadmin-web/nginx.conf delete mode 100644 ssadmin-web/package.json delete mode 100644 ssadmin-web/public/favicon.ico delete mode 100644 ssadmin-web/src/api/system/role.js delete mode 100644 ssadmin-web/src/assets/logo.png delete mode 100644 ssadmin-web/src/directive/index.js delete mode 100644 ssadmin-web/src/directive/permission/hasPermi.js delete mode 100644 ssadmin-web/src/directive/permission/hasRole.js delete mode 100644 ssadmin-web/src/layout/index.vue delete mode 100644 ssadmin-web/src/main.js delete mode 100644 ssadmin-web/src/permission.js delete mode 100644 ssadmin-web/src/router/index.js delete mode 100644 ssadmin-web/src/store/getters.js delete mode 100644 ssadmin-web/src/store/index.js delete mode 100644 ssadmin-web/src/store/modules/permission.js delete mode 100644 ssadmin-web/src/store/modules/user.js delete mode 100644 ssadmin-web/src/utils/request.js delete mode 100644 ssadmin-web/src/views/Login.vue delete mode 100644 ssadmin-web/src/views/User/Add.vue delete mode 100644 ssadmin-web/src/views/User/List.vue delete mode 100644 ssadmin-web/vue.config.js delete mode 100644 ssadmin-web/yarn.lock create mode 100644 vue-element-admin-master/.editorconfig create mode 100644 vue-element-admin-master/.env.development create mode 100644 vue-element-admin-master/.env.production create mode 100644 vue-element-admin-master/.env.staging create mode 100644 vue-element-admin-master/.eslintignore create mode 100644 vue-element-admin-master/.eslintrc.js create mode 100644 vue-element-admin-master/.github/FUNDING.yml create mode 100755 vue-element-admin-master/.github/ISSUE_TEMPLATE/bug_report.md create mode 100755 vue-element-admin-master/.github/ISSUE_TEMPLATE/feature_request.md create mode 100755 vue-element-admin-master/.github/ISSUE_TEMPLATE/question.md rename {ssadmin-web => vue-element-admin-master}/.gitignore (52%) create mode 100755 vue-element-admin-master/.travis.yml create mode 100644 vue-element-admin-master/LICENSE create mode 100644 vue-element-admin-master/README.es.md create mode 100644 vue-element-admin-master/README.ja.md create mode 100644 vue-element-admin-master/README.md create mode 100644 vue-element-admin-master/README.zh-CN.md create mode 100644 vue-element-admin-master/babel.config.js create mode 100644 vue-element-admin-master/build/index.js create mode 100644 vue-element-admin-master/jest.config.js create mode 100644 vue-element-admin-master/jsconfig.json create mode 100644 vue-element-admin-master/mock/article.js create mode 100644 vue-element-admin-master/mock/index.js create mode 100644 vue-element-admin-master/mock/mock-server.js create mode 100644 vue-element-admin-master/mock/remote-search.js create mode 100644 vue-element-admin-master/mock/role/index.js create mode 100644 vue-element-admin-master/mock/role/routes.js create mode 100644 vue-element-admin-master/mock/user.js create mode 100644 vue-element-admin-master/mock/utils.js create mode 100644 vue-element-admin-master/package.json create mode 100644 vue-element-admin-master/plop-templates/component/index.hbs create mode 100644 vue-element-admin-master/plop-templates/component/prompt.js create mode 100644 vue-element-admin-master/plop-templates/store/index.hbs create mode 100644 vue-element-admin-master/plop-templates/store/prompt.js create mode 100644 vue-element-admin-master/plop-templates/utils.js create mode 100644 vue-element-admin-master/plop-templates/view/index.hbs create mode 100644 vue-element-admin-master/plop-templates/view/prompt.js create mode 100644 vue-element-admin-master/plopfile.js create mode 100644 vue-element-admin-master/postcss.config.js create mode 100644 vue-element-admin-master/public/favicon.ico rename {ssadmin-web => vue-element-admin-master}/public/index.html (35%) rename {ssadmin-web => vue-element-admin-master}/src/App.vue (40%) rename {ssadmin-web => vue-element-admin-master}/src/api/application/manage.js (100%) create mode 100644 vue-element-admin-master/src/api/article.js create mode 100644 vue-element-admin-master/src/api/qiniu.js create mode 100644 vue-element-admin-master/src/api/remote-search.js create mode 100644 vue-element-admin-master/src/api/role.js rename {ssadmin-web => vue-element-admin-master}/src/api/system/dict/data.js (34%) rename {ssadmin-web => vue-element-admin-master}/src/api/system/dict/type.js (32%) create mode 100644 vue-element-admin-master/src/api/system/menu.js rename {ssadmin-web => vue-element-admin-master}/src/api/system/permission.js (100%) create mode 100644 vue-element-admin-master/src/api/system/role.js rename {ssadmin-web => vue-element-admin-master}/src/api/system/user.js (34%) rename ssadmin-web/src/api/login.js => vue-element-admin-master/src/api/user.js (56%) create mode 100644 vue-element-admin-master/src/assets/401_images/401.gif create mode 100644 vue-element-admin-master/src/assets/404_images/404.png create mode 100644 vue-element-admin-master/src/assets/404_images/404_cloud.png create mode 100644 vue-element-admin-master/src/assets/custom-theme/fonts/element-icons.ttf create mode 100644 vue-element-admin-master/src/assets/custom-theme/fonts/element-icons.woff create mode 100644 vue-element-admin-master/src/assets/custom-theme/index.css create mode 100644 vue-element-admin-master/src/assets/icons/index.js create mode 100644 vue-element-admin-master/src/assets/icons/svg/404.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/bug.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/build.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/button.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/cascader.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/chart.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/checkbox.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/clipboard.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/code.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/color.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/component.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/config.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/dashboard.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/date-range.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/date.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/dict.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/documentation.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/download.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/drag.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/druid.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/edit.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/education.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/email.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/example.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/excel.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/exit-fullscreen.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/eye-open.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/eye.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/form.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/fullscreen.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/github.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/guide.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/icon.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/input.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/international.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/job.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/language.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/link.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/list.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/lock.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/log.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/logininfor.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/map.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/merchant.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/message.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/money.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/monitor.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/nested.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/number.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/online.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/order.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/password.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/pay.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/pdf.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/people.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/peoples.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/percentSign.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/phone.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/post.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/qq.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/question.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/radio.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/rate.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/redis.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/rich-text.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/row.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/search.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/select.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/server.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/shopping.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/size.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/skill.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/slider.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/star.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/swagger.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/switch.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/system.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/tab.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/table.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/textarea.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/theme.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/time-range.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/time.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/tool.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/tree-table.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/tree.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/upload.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/user.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/validCode.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/wechat.svg create mode 100644 vue-element-admin-master/src/assets/icons/svg/zip.svg create mode 100644 vue-element-admin-master/src/assets/icons/svgo.yml create mode 100755 vue-element-admin-master/src/assets/images/bg-mobile.png create mode 100755 vue-element-admin-master/src/assets/images/bg.png create mode 100644 vue-element-admin-master/src/assets/images/dark.svg create mode 100644 vue-element-admin-master/src/assets/images/default.jpg create mode 100755 vue-element-admin-master/src/assets/images/icon.png create mode 100644 vue-element-admin-master/src/assets/images/light.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/alipay_app.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/alipay_bar.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/alipay_pc.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/alipay_qr.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/alipay_wap.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/mock.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/wx_app.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/wx_bar.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/wx_lite.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/wx_native.svg create mode 100644 vue-element-admin-master/src/assets/images/pay/icon/wx_pub.svg create mode 100755 vue-element-admin-master/src/assets/images/pic.png rename {ssadmin-web => vue-element-admin-master}/src/assets/images/profile.jpg (100%) create mode 100644 vue-element-admin-master/src/assets/images/wechat.png create mode 100644 vue-element-admin-master/src/components/BackToTop/index.vue create mode 100644 vue-element-admin-master/src/components/Breadcrumb/index.vue create mode 100644 vue-element-admin-master/src/components/Charts/Keyboard.vue create mode 100644 vue-element-admin-master/src/components/Charts/LineMarker.vue create mode 100644 vue-element-admin-master/src/components/Charts/MixChart.vue create mode 100644 vue-element-admin-master/src/components/Charts/mixins/resize.js create mode 100644 vue-element-admin-master/src/components/DndList/index.vue create mode 100644 vue-element-admin-master/src/components/DragSelect/index.vue create mode 100644 vue-element-admin-master/src/components/Dropzone/index.vue create mode 100644 vue-element-admin-master/src/components/ErrorLog/index.vue create mode 100644 vue-element-admin-master/src/components/GithubCorner/index.vue create mode 100644 vue-element-admin-master/src/components/Hamburger/index.vue create mode 100644 vue-element-admin-master/src/components/HeaderSearch/index.vue create mode 100644 vue-element-admin-master/src/components/IconSelect/index.vue create mode 100644 vue-element-admin-master/src/components/IconSelect/requireIcons.js create mode 100644 vue-element-admin-master/src/components/ImageCropper/index.vue create mode 100755 vue-element-admin-master/src/components/ImageCropper/utils/data2blob.js create mode 100755 vue-element-admin-master/src/components/ImageCropper/utils/effectRipple.js create mode 100755 vue-element-admin-master/src/components/ImageCropper/utils/language.js create mode 100755 vue-element-admin-master/src/components/ImageCropper/utils/mimes.js create mode 100644 vue-element-admin-master/src/components/JsonEditor/index.vue create mode 100644 vue-element-admin-master/src/components/Kanban/index.vue create mode 100644 vue-element-admin-master/src/components/MDinput/index.vue create mode 100644 vue-element-admin-master/src/components/MarkdownEditor/default-options.js create mode 100644 vue-element-admin-master/src/components/Pagination/index.vue create mode 100644 vue-element-admin-master/src/components/PanThumb/index.vue create mode 100644 vue-element-admin-master/src/components/ParentView/index.vue create mode 100644 vue-element-admin-master/src/components/RightPanel/index.vue create mode 100644 vue-element-admin-master/src/components/Screenfull/index.vue create mode 100644 vue-element-admin-master/src/components/Share/DropdownMenu.vue create mode 100644 vue-element-admin-master/src/components/SizeSelect/index.vue create mode 100644 vue-element-admin-master/src/components/Sticky/index.vue create mode 100644 vue-element-admin-master/src/components/SvgIcon/index.vue create mode 100644 vue-element-admin-master/src/components/TextHoverEffect/Mallki.vue create mode 100644 vue-element-admin-master/src/components/ThemePicker/index.vue create mode 100644 vue-element-admin-master/src/components/Tinymce/components/EditorImage.vue create mode 100644 vue-element-admin-master/src/components/Tinymce/dynamicLoadScript.js create mode 100644 vue-element-admin-master/src/components/Tinymce/index.vue create mode 100644 vue-element-admin-master/src/components/Tinymce/plugins.js create mode 100644 vue-element-admin-master/src/components/Tinymce/toolbar.js create mode 100644 vue-element-admin-master/src/components/Upload/SingleImage.vue create mode 100644 vue-element-admin-master/src/components/Upload/SingleImage2.vue create mode 100644 vue-element-admin-master/src/components/Upload/SingleImage3.vue create mode 100644 vue-element-admin-master/src/components/UploadExcel/index.vue create mode 100644 vue-element-admin-master/src/directive/clipboard/clipboard.js create mode 100644 vue-element-admin-master/src/directive/clipboard/index.js create mode 100644 vue-element-admin-master/src/directive/el-drag-dialog/drag.js create mode 100644 vue-element-admin-master/src/directive/el-drag-dialog/index.js create mode 100644 vue-element-admin-master/src/directive/el-table/adaptive.js create mode 100644 vue-element-admin-master/src/directive/el-table/index.js create mode 100644 vue-element-admin-master/src/directive/index.js create mode 100644 vue-element-admin-master/src/directive/permission/hasPermi.js create mode 100644 vue-element-admin-master/src/directive/permission/index.js create mode 100644 vue-element-admin-master/src/directive/permission/permission.js create mode 100644 vue-element-admin-master/src/directive/sticky.js create mode 100644 vue-element-admin-master/src/directive/waves/index.js create mode 100644 vue-element-admin-master/src/directive/waves/waves.css create mode 100644 vue-element-admin-master/src/directive/waves/waves.js create mode 100644 vue-element-admin-master/src/filters/index.js create mode 100644 vue-element-admin-master/src/icons/index.js create mode 100644 vue-element-admin-master/src/icons/svg/404.svg create mode 100644 vue-element-admin-master/src/icons/svg/bug.svg create mode 100644 vue-element-admin-master/src/icons/svg/chart.svg create mode 100644 vue-element-admin-master/src/icons/svg/clipboard.svg create mode 100644 vue-element-admin-master/src/icons/svg/component.svg create mode 100644 vue-element-admin-master/src/icons/svg/dashboard.svg create mode 100644 vue-element-admin-master/src/icons/svg/documentation.svg create mode 100644 vue-element-admin-master/src/icons/svg/drag.svg create mode 100644 vue-element-admin-master/src/icons/svg/edit.svg create mode 100644 vue-element-admin-master/src/icons/svg/education.svg create mode 100644 vue-element-admin-master/src/icons/svg/email.svg create mode 100644 vue-element-admin-master/src/icons/svg/example.svg create mode 100644 vue-element-admin-master/src/icons/svg/excel.svg create mode 100644 vue-element-admin-master/src/icons/svg/exit-fullscreen.svg create mode 100644 vue-element-admin-master/src/icons/svg/eye-open.svg create mode 100644 vue-element-admin-master/src/icons/svg/eye.svg create mode 100644 vue-element-admin-master/src/icons/svg/form.svg create mode 100644 vue-element-admin-master/src/icons/svg/fullscreen.svg create mode 100644 vue-element-admin-master/src/icons/svg/guide.svg create mode 100644 vue-element-admin-master/src/icons/svg/icon.svg create mode 100644 vue-element-admin-master/src/icons/svg/international.svg create mode 100644 vue-element-admin-master/src/icons/svg/language.svg create mode 100644 vue-element-admin-master/src/icons/svg/link.svg create mode 100644 vue-element-admin-master/src/icons/svg/list.svg create mode 100644 vue-element-admin-master/src/icons/svg/lock.svg create mode 100644 vue-element-admin-master/src/icons/svg/message.svg create mode 100644 vue-element-admin-master/src/icons/svg/money.svg create mode 100644 vue-element-admin-master/src/icons/svg/nested.svg create mode 100644 vue-element-admin-master/src/icons/svg/password.svg create mode 100644 vue-element-admin-master/src/icons/svg/pdf.svg create mode 100644 vue-element-admin-master/src/icons/svg/people.svg create mode 100644 vue-element-admin-master/src/icons/svg/peoples.svg create mode 100644 vue-element-admin-master/src/icons/svg/qq.svg create mode 100644 vue-element-admin-master/src/icons/svg/search.svg create mode 100644 vue-element-admin-master/src/icons/svg/shopping.svg create mode 100644 vue-element-admin-master/src/icons/svg/size.svg create mode 100644 vue-element-admin-master/src/icons/svg/skill.svg create mode 100644 vue-element-admin-master/src/icons/svg/star.svg create mode 100644 vue-element-admin-master/src/icons/svg/tab.svg create mode 100644 vue-element-admin-master/src/icons/svg/table.svg create mode 100644 vue-element-admin-master/src/icons/svg/theme.svg create mode 100644 vue-element-admin-master/src/icons/svg/tree-table.svg create mode 100644 vue-element-admin-master/src/icons/svg/tree.svg create mode 100644 vue-element-admin-master/src/icons/svg/user.svg create mode 100644 vue-element-admin-master/src/icons/svg/wechat.svg create mode 100644 vue-element-admin-master/src/icons/svg/zip.svg create mode 100644 vue-element-admin-master/src/icons/svgo.yml create mode 100644 vue-element-admin-master/src/layout/components/AppMain.vue create mode 100644 vue-element-admin-master/src/layout/components/Navbar.vue create mode 100644 vue-element-admin-master/src/layout/components/Settings/index.vue create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/Item.vue create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/Link.vue create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/Logo.vue create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 vue-element-admin-master/src/layout/components/Sidebar/index.vue create mode 100644 vue-element-admin-master/src/layout/components/TagsView/ScrollPane.vue create mode 100644 vue-element-admin-master/src/layout/components/TagsView/index.vue create mode 100644 vue-element-admin-master/src/layout/components/index.js create mode 100644 vue-element-admin-master/src/layout/index.vue create mode 100644 vue-element-admin-master/src/layout/mixin/ResizeHandler.js create mode 100644 vue-element-admin-master/src/main.js create mode 100644 vue-element-admin-master/src/permission.js rename {ssadmin-web => vue-element-admin-master}/src/plugins/auth.js (100%) rename {ssadmin-web => vue-element-admin-master}/src/plugins/index.js (100%) rename {ssadmin-web => vue-element-admin-master}/src/plugins/modal.js (100%) create mode 100644 vue-element-admin-master/src/router/index.js create mode 100644 vue-element-admin-master/src/router/modules/charts.js create mode 100644 vue-element-admin-master/src/router/modules/components.js create mode 100644 vue-element-admin-master/src/router/modules/nested.js create mode 100644 vue-element-admin-master/src/router/modules/table.js create mode 100644 vue-element-admin-master/src/settings.js create mode 100644 vue-element-admin-master/src/store/getters.js create mode 100644 vue-element-admin-master/src/store/index.js create mode 100644 vue-element-admin-master/src/store/modules/app.js create mode 100644 vue-element-admin-master/src/store/modules/dict.js create mode 100644 vue-element-admin-master/src/store/modules/errorLog.js create mode 100644 vue-element-admin-master/src/store/modules/permission.js create mode 100644 vue-element-admin-master/src/store/modules/settings.js create mode 100644 vue-element-admin-master/src/store/modules/tagsView.js create mode 100644 vue-element-admin-master/src/store/modules/user.js create mode 100644 vue-element-admin-master/src/styles/btn.scss create mode 100644 vue-element-admin-master/src/styles/element-ui.scss create mode 100644 vue-element-admin-master/src/styles/element-variables.scss rename {ssadmin-web/src/assets => vue-element-admin-master/src/styles}/index.scss (93%) create mode 100644 vue-element-admin-master/src/styles/mixin.scss create mode 100644 vue-element-admin-master/src/styles/sidebar.scss create mode 100644 vue-element-admin-master/src/styles/transition.scss create mode 100644 vue-element-admin-master/src/styles/variables.scss rename {ssadmin-web => vue-element-admin-master}/src/utils/auth.js (43%) create mode 100644 vue-element-admin-master/src/utils/clipboard.js rename {ssadmin-web => vue-element-admin-master}/src/utils/common.js (47%) rename {ssadmin-web => vue-element-admin-master}/src/utils/constants.js (66%) create mode 100644 vue-element-admin-master/src/utils/dict.js create mode 100644 vue-element-admin-master/src/utils/error-log.js create mode 100644 vue-element-admin-master/src/utils/errorCode.js create mode 100644 vue-element-admin-master/src/utils/functions.js create mode 100644 vue-element-admin-master/src/utils/get-page-title.js create mode 100644 vue-element-admin-master/src/utils/index.js create mode 100644 vue-element-admin-master/src/utils/open-window.js create mode 100644 vue-element-admin-master/src/utils/permission.js create mode 100644 vue-element-admin-master/src/utils/request.js create mode 100644 vue-element-admin-master/src/utils/scroll-to.js create mode 100644 vue-element-admin-master/src/utils/validate.js create mode 100644 vue-element-admin-master/src/vendor/Export2Excel.js create mode 100644 vue-element-admin-master/src/vendor/Export2Zip.js rename ssadmin-web/src/views/application/applicationManagement.vue => vue-element-admin-master/src/views/application/manage/index.vue (67%) create mode 100644 vue-element-admin-master/src/views/charts/keyboard.vue create mode 100644 vue-element-admin-master/src/views/charts/line.vue create mode 100644 vue-element-admin-master/src/views/charts/mix-chart.vue create mode 100644 vue-element-admin-master/src/views/clipboard/index.vue create mode 100644 vue-element-admin-master/src/views/components-demo/avatar-upload.vue create mode 100644 vue-element-admin-master/src/views/components-demo/back-to-top.vue create mode 100644 vue-element-admin-master/src/views/components-demo/count-to.vue create mode 100644 vue-element-admin-master/src/views/components-demo/dnd-list.vue create mode 100644 vue-element-admin-master/src/views/components-demo/drag-dialog.vue create mode 100644 vue-element-admin-master/src/views/components-demo/drag-kanban.vue create mode 100644 vue-element-admin-master/src/views/components-demo/drag-select.vue create mode 100644 vue-element-admin-master/src/views/components-demo/dropzone.vue create mode 100644 vue-element-admin-master/src/views/components-demo/json-editor.vue create mode 100644 vue-element-admin-master/src/views/components-demo/mixin.vue create mode 100644 vue-element-admin-master/src/views/components-demo/split-pane.vue create mode 100644 vue-element-admin-master/src/views/components-demo/sticky.vue create mode 100644 vue-element-admin-master/src/views/components-demo/tinymce.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/BarChart.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/BoxCard.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/LineChart.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/PanelGroup.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/PieChart.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/RaddarChart.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/TodoList/Todo.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/TodoList/index.scss create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/TodoList/index.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/TransactionTable.vue create mode 100644 vue-element-admin-master/src/views/dashboard/admin/components/mixins/resize.js create mode 100644 vue-element-admin-master/src/views/dashboard/admin/index.vue create mode 100644 vue-element-admin-master/src/views/dashboard/editor/index.vue rename ssadmin-web/src/views/HomeView.vue => vue-element-admin-master/src/views/dashboard/index.vue (30%) create mode 100644 vue-element-admin-master/src/views/error-log/components/ErrorTestA.vue create mode 100644 vue-element-admin-master/src/views/error-log/components/ErrorTestB.vue create mode 100644 vue-element-admin-master/src/views/error-log/index.vue create mode 100644 vue-element-admin-master/src/views/error-page/401.vue create mode 100644 vue-element-admin-master/src/views/error-page/404.vue create mode 100644 vue-element-admin-master/src/views/example/components/ArticleDetail.vue create mode 100644 vue-element-admin-master/src/views/example/components/Dropdown/Comment.vue create mode 100644 vue-element-admin-master/src/views/example/components/Dropdown/Platform.vue create mode 100644 vue-element-admin-master/src/views/example/components/Dropdown/SourceUrl.vue create mode 100644 vue-element-admin-master/src/views/example/components/Dropdown/index.js create mode 100644 vue-element-admin-master/src/views/example/components/Warning.vue create mode 100644 vue-element-admin-master/src/views/example/create.vue create mode 100644 vue-element-admin-master/src/views/example/edit.vue create mode 100644 vue-element-admin-master/src/views/example/list.vue create mode 100644 vue-element-admin-master/src/views/excel/components/AutoWidthOption.vue create mode 100644 vue-element-admin-master/src/views/excel/components/BookTypeOption.vue create mode 100644 vue-element-admin-master/src/views/excel/components/FilenameOption.vue create mode 100644 vue-element-admin-master/src/views/excel/export-excel.vue create mode 100644 vue-element-admin-master/src/views/excel/merge-header.vue create mode 100644 vue-element-admin-master/src/views/excel/select-excel.vue create mode 100644 vue-element-admin-master/src/views/excel/upload-excel.vue create mode 100644 vue-element-admin-master/src/views/icons/element-icons.js create mode 100644 vue-element-admin-master/src/views/icons/index.vue create mode 100644 vue-element-admin-master/src/views/icons/svg-icons.js create mode 100644 vue-element-admin-master/src/views/login/auth-redirect.vue create mode 100644 vue-element-admin-master/src/views/login/components/SocialSignin.vue create mode 100644 vue-element-admin-master/src/views/login/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/menu1-1/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/menu1-2/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu1/menu1-3/index.vue create mode 100644 vue-element-admin-master/src/views/nested/menu2/index.vue create mode 100644 vue-element-admin-master/src/views/pdf/content.js create mode 100644 vue-element-admin-master/src/views/pdf/download.vue create mode 100644 vue-element-admin-master/src/views/pdf/index.vue create mode 100644 vue-element-admin-master/src/views/permission/components/SwitchRoles.vue create mode 100644 vue-element-admin-master/src/views/permission/directive.vue create mode 100644 vue-element-admin-master/src/views/permission/page.vue create mode 100644 vue-element-admin-master/src/views/permission/role.vue create mode 100644 vue-element-admin-master/src/views/profile/components/Account.vue create mode 100644 vue-element-admin-master/src/views/profile/components/Activity.vue create mode 100644 vue-element-admin-master/src/views/profile/components/Timeline.vue create mode 100644 vue-element-admin-master/src/views/profile/components/UserCard.vue create mode 100644 vue-element-admin-master/src/views/profile/index.vue create mode 100644 vue-element-admin-master/src/views/qiniu/upload.vue create mode 100644 vue-element-admin-master/src/views/redirect/index.vue rename {ssadmin-web => vue-element-admin-master}/src/views/system/dict/data.vue (55%) rename {ssadmin-web => vue-element-admin-master}/src/views/system/dict/index.vue (47%) create mode 100644 vue-element-admin-master/src/views/system/menu/index.vue create mode 100644 vue-element-admin-master/src/views/system/role/index.vue rename {ssadmin-web => vue-element-admin-master}/src/views/system/user/index.vue (66%) rename {ssadmin-web => vue-element-admin-master}/src/views/system/user/profile/index.vue (100%) create mode 100644 vue-element-admin-master/src/views/tab/components/TabPane.vue create mode 100644 vue-element-admin-master/src/views/tab/index.vue create mode 100644 vue-element-admin-master/src/views/table/complex-table.vue create mode 100644 vue-element-admin-master/src/views/table/drag-table.vue create mode 100644 vue-element-admin-master/src/views/table/dynamic-table/components/FixedThead.vue create mode 100644 vue-element-admin-master/src/views/table/dynamic-table/components/UnfixedThead.vue create mode 100644 vue-element-admin-master/src/views/table/dynamic-table/index.vue create mode 100644 vue-element-admin-master/src/views/table/inline-edit-table.vue create mode 100644 vue-element-admin-master/src/views/theme/index.vue create mode 100644 vue-element-admin-master/src/views/zip/index.vue create mode 100644 vue-element-admin-master/tests/unit/.eslintrc.js create mode 100644 vue-element-admin-master/tests/unit/components/Hamburger.spec.js create mode 100644 vue-element-admin-master/tests/unit/components/SvgIcon.spec.js create mode 100644 vue-element-admin-master/tests/unit/utils/formatTime.spec.js create mode 100644 vue-element-admin-master/tests/unit/utils/param2Obj.spec.js create mode 100644 vue-element-admin-master/tests/unit/utils/parseTime.spec.js create mode 100644 vue-element-admin-master/tests/unit/utils/validate.spec.js create mode 100644 vue-element-admin-master/vue.config.js diff --git a/Docker-HOWTO.md b/Docker-HOWTO.md index f9cd6bf..0f1bd5f 100644 --- a/Docker-HOWTO.md +++ b/Docker-HOWTO.md @@ -33,9 +33,7 @@ docker run -it --rm --name ssadmin-maven \ [INFO] Reactor Summary for SSAdmin 基于RBAC的后台管理系统 1.0: [INFO] [INFO] SSAdmin 基于RBAC的后台管理系统 .............................. SUCCESS [ 12.837 s] -[INFO] ssadmin-common ..................................... SUCCESS [02:37 min] -[INFO] ssadmin-module-security ............................ SUCCESS [ 2.930 s] -[INFO] ssadmin-system ..................................... SUCCESS [ 28.531 s] + ...... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ diff --git a/release/README.md b/release/README.md index 378765e..2a710c1 100644 --- a/release/README.md +++ b/release/README.md @@ -1,3 +1,13 @@ +## 快速启动2.0 +主要更新在动态菜单的功能 +可通过数据库插入或者前端手动插入的方式实现自己的页面的菜单生成和路由导入,当然需要指定路径的路由文件已存在。 +具体可参考ssadmin_init_application.sql文件中的权限信息插入语句,注意不同层级菜单之间的关联关系,对应的父菜单id需要设置。 +此外@PreAuthenrized注解功能可初步使用,主要是对用户进行限制,sysadmin角色默认拥有所有权限无需手动添加。 +``` + // 此处'xxx:xxx:xxx'需要与数据库-菜单表中的permission项数据保持一致 + @PreAuthorize("@ss.hasPermission('xxx:xxx:xxx')") + @PermitAll // 如login等接口可以使用该注解,指定无需权限验证 +``` ## 快速启动 ### 前端(ssadmin-web) diff --git a/sql/README.md b/sql/README.md index 5177102..88aa393 100644 --- a/sql/README.md +++ b/sql/README.md @@ -118,19 +118,20 @@ 此表用于存储每个类型下的字典数据项。 -| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | -|-------------|-----------|------|----------|---------------------|--------------| -| id | bigint | 20 | N | | 数据主键ID | -| type_id | bigint | 20 | N | | 字典类型ID | -| label | varchar | 100 | N | | 数据标签 | -| value | varchar | 100 | N | | 数据值 | -| sort | int | | N | | 排序号 | -| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | -| creator | bigint | 20 | Y | | 创建者 | -| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | -| updater | bigint | 20 | Y | | 更新者 | -| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | -| deleted | bit | 1 | N | b'0' | 是否删除 | +| 名称 | 数据类型 | 长度 | 允许空值 | 默认值 | 说明 | +|-----------|-----------|------|----------|---------------------|------------| +| id | bigint | 20 | N | | 数据主键ID | +| dict_type | varchar | 100 | N | | 字典类型 | +| label | varchar | 100 | N | | 数据标签 | +| value | varchar | 100 | N | | 数据值 | +| sort | int | | N | | 排序号 | +| status | tinyint | 1 | N | 1 | 状态(0禁用 1启用) | +| remark | varchar | 500 | Y | | 备注 | +| creator | bigint | 20 | Y | | 创建者 | +| create_time | datetime | | N | CURRENT_TIMESTAMP | 创建时间 | +| updater | bigint | 20 | Y | | 更新者 | +| update_time | datetime | | Y | CURRENT_TIMESTAMP | 更新时间 | +| deleted | bit | 1 | N | b'0' | 是否删除 | ### **操作日志表** - `system_operation_log` diff --git a/sql/ssadmin_init.sql b/sql/ssadmin_init.sql index be28095..e0d83ea 100644 --- a/sql/ssadmin_init.sql +++ b/sql/ssadmin_init.sql @@ -110,7 +110,7 @@ CREATE TABLE `system_user_role` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --- 转存角色表的初始数据 `system_user_role` +-- 转存用户角色关联表的初始数据 `system_user_role` -- INSERT INTO `system_user_role` (`user_id`, `role_id`) VALUES @@ -147,7 +147,7 @@ CREATE TABLE `system_menu` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- --- 转存角色表的初始数据 `system_menu` +-- 转存菜单表的初始数据 `system_menu` -- INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`,`component_name`) VALUES @@ -155,28 +155,48 @@ INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, ` (2,'用户管理', 'system:user:list',2,1,1,'user','system/user/index','SystemUser'), (3,'角色管理', 'system:role:list',2,2,1,'role','system/role/index','SystemRole'), (4,'菜单管理', 'system:menu:list',2,3,1,'menu','system/menu/index','SystemMenu'), - (5,'用户新增', 'system:user:create',3,1,2,'','',''), - (6,'用户删除', 'system:user:delete',3,2,2,'','',''), - (7,'用户修改', 'system:user:update',3,3,2,'','',''), - (8,'用户查询', 'system:user:query',3,4,2,'','',''), - (9,'角色新增', 'system:role:create',3,1,3,'','',''), - (10,'角色删除', 'system:role:delete',3,2,3,'','',''), - (11,'角色修改', 'system:role:update',3,3,3,'','',''), - (12,'角色查询', 'system:role:query',3,4,3,'','',''), - (13,'菜单新增', 'system:menu:create',3,1,4,'','',''), - (14,'菜单删除', 'system:menu:delete',3,2,4,'','',''), - (15,'菜单修改', 'system:menu:update',3,3,4,'','',''), - (16,'菜单查询', 'system:menu:query',3,4,4,'','',''), - (17,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'','',''), - (18,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'','',''); + (5,'字典管理', 'system:dict:list',2,4,1,'dict','system/dict/index','SystemDictType'), + (6,'用户新增', 'system:user:create',3,1,2,'','',''), + (7,'用户删除', 'system:user:delete',3,2,2,'','',''), + (8,'用户修改', 'system:user:update',3,3,2,'','',''), + (9,'用户查询', 'system:user:query',3,4,2,'','',''), + (10,'角色新增', 'system:role:create',3,1,3,'','',''), + (11,'角色删除', 'system:role:delete',3,2,3,'','',''), + (12,'角色修改', 'system:role:update',3,3,3,'','',''), + (13,'角色查询', 'system:role:query',3,4,3,'','',''), + (14,'菜单新增', 'system:menu:create',3,1,4,'','',''), + (15,'菜单删除', 'system:menu:delete',3,2,4,'','',''), + (16,'菜单修改', 'system:menu:update',3,3,4,'','',''), + (17,'菜单查询', 'system:menu:query',3,4,4,'','',''), + (18,'设置用户角色', 'system:permission:assign-user-role',3,5,3,'','',''), + (19,'设置角色菜单权限', 'system:permission:assign-role-menu',3,6,3,'','',''), + (20,'字典新增', 'system:dict:create',3,6,5,'','',''), + (21,'字典删除', 'system:dict:delete',3,6,5,'','',''), + (22,'字典修改', 'system:dict:update',3,6,5,'','',''), + (23,'字典查询', 'system:dict:query',3,6,5,'','',''); + + +-- +-- 转存应用的动态菜单相关初始数据 +-- +-- 在前端需要获取一下父菜单的id才能进行细项的添加,此处建议放在前端,按钮权限可以放在sql文件中,因为有自增设置。 或者确认下自增设置下能不能自己加一个较大的数字避开 +INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`,`component_name`) VALUES + (24,'应用管理', '',1,2,0,'/application','',''), + (25,'应用管理细项1', 'application:manage:get-list',2,1,24,'manage','application/manage/index','ApplicationManage'); -- -- 使用表AUTO_INCREMENT `system_users` -- ALTER TABLE `system_menu` - MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19; + MODIFY `id` bigint NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=26; COMMIT; +-- +-- 转存应用的相关的按钮初始数据 +-- +INSERT INTO `system_menu` (`name`,`permission`,`type`,`sort`,`parent_id`, `path`, `component`,`component_name`) VALUES + ('应用新增', 'application:manage:create',3,1,24,'','',''); + -- -- 角色菜单关联表的结构 `system_role_menu` -- @@ -197,14 +217,71 @@ CREATE TABLE `system_role_menu` ( -- --- 转存角色表的初始数据 `system_role_menu` +-- 转存角色菜单关联表的初始数据 `system_role_menu` -- INSERT INTO `system_role_menu` (`role_id`,`menu_id`) VALUES (1,1); +-- +-- 字典类型表的结构 `system_dict_type` +-- +CREATE TABLE `system_dict_type` ( + `id` BIGINT(20) NOT NULL, + `name` VARCHAR(100) NOT NULL, + `type` VARCHAR(100) NOT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存字典类型表的初始数据 `system_dict_type` +-- + +INSERT INTO `system_dict_type` (`id`,`name`,`type`) VALUES + (1,'系统状态','common_status'), + (2,'角色类型','system_role_type'), + (3,'菜单类型','system_menu_type'); + + +-- +-- 字典数据表的结构 `system_dict_data` +-- +CREATE TABLE `system_dict_data` ( + `id` BIGINT(20) NOT NULL AUTO_INCREMENT, + `label` VARCHAR(100) NOT NULL, + `value` VARCHAR(100) NOT NULL, + `sort` int(10) NOT NULL DEFAULT '0', + `dict_type` VARCHAR(100) NOT NULL, + `status` TINYINT(4) NOT NULL DEFAULT '0', + `remark` VARCHAR(500) DEFAULT NULL, + `creator` VARCHAR(64) DEFAULT NULL, + `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, + `updater` VARCHAR(64) DEFAULT NULL, + `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `deleted` BIT(1) DEFAULT b'0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- 转存字典数据表的初始数据 `system_dict_data` +-- +INSERT INTO `system_dict_data` (`dict_type`,`label`,`value`,`sort`,`remark`) VALUES + ('system_role_type','内置','1',1,'内置角色'), + ('system_role_type','自定义','2',2,'自定义角色'), + ('system_menu_type','目录','1',1,''), + ('system_menu_type','菜单','2',2,''), + ('system_menu_type','按钮','3',3,''), + ('common_status','关闭','1',1,'关闭状态'), + ('common_status','开启','0',0,'开启状态'); -- -- 应用表的结构 `system_application` -- diff --git a/ssadmin-server/.gitignore b/ssadmin-parent-server/.gitignore similarity index 100% rename from ssadmin-server/.gitignore rename to ssadmin-parent-server/.gitignore diff --git a/ssadmin-server/Dockerfile b/ssadmin-parent-server/Dockerfile similarity index 80% rename from ssadmin-server/Dockerfile rename to ssadmin-parent-server/Dockerfile index 4d6c9ae..5870f28 100644 --- a/ssadmin-server/Dockerfile +++ b/ssadmin-parent-server/Dockerfile @@ -1,10 +1,11 @@ FROM eclipse-temurin:8-jre +## 创建目录,并使用它作为工作目录 RUN mkdir -p /ssadmin-server WORKDIR /ssadmin-server ## 将Jar 文件复制到镜像中 -COPY ./ssadmin-system/ssadmin-system-biz/target/ssadmin-system-biz.jar app.jar +COPY ./ssadmin-server/target/ssadmin-server.jar app.jar ## 设置 TZ 时区 ENV TZ=Asia/Shanghai diff --git a/ssadmin-server/README.md b/ssadmin-parent-server/README.md similarity index 100% rename from ssadmin-server/README.md rename to ssadmin-parent-server/README.md diff --git a/ssadmin-server/pom.xml b/ssadmin-parent-server/pom.xml similarity index 94% rename from ssadmin-server/pom.xml rename to ssadmin-parent-server/pom.xml index 369310d..a9f715e 100644 --- a/ssadmin-server/pom.xml +++ b/ssadmin-parent-server/pom.xml @@ -16,13 +16,11 @@ - - ssadmin-system - ssadmin-common + + ssadmin-server + ssadmin-framework - ssadmin-module-security - ssadmin-test - ssadmin-module-web + ssadmin-module-system ssadmin-application-demo @@ -56,7 +54,7 @@ org.projectlombok lombok - 1.18.24 + 1.18.30 diff --git a/ssadmin-server/ssadmin-application-demo/pom.xml b/ssadmin-parent-server/ssadmin-application-demo/pom.xml similarity index 87% rename from ssadmin-server/ssadmin-application-demo/pom.xml rename to ssadmin-parent-server/ssadmin-application-demo/pom.xml index 133d798..fd0b801 100644 --- a/ssadmin-server/ssadmin-application-demo/pom.xml +++ b/ssadmin-parent-server/ssadmin-application-demo/pom.xml @@ -25,12 +25,12 @@ edu.ssadmin - ssadmin-system-api + ssadmin-module-system-api 1.0 edu.ssadmin - ssadmin-module-security + ssadmin-spring-boot-starter-security 1.0 diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java similarity index 92% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java index 41004bc..096a231 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java +++ b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/ApplicationController.java @@ -30,7 +30,7 @@ public class ApplicationController { @PostMapping("/create") @ApiOperation("新增应用") - //@PreAuthorize("@ss.hasPermission('application:manage:create')") + @PreAuthorize("@ss.hasPermission('application:manage:create')") public CommonResult create(@Valid @RequestBody ApplicationCreateReqVO reqVO) { applicationService.createApplication(reqVO); @@ -40,7 +40,7 @@ public class ApplicationController { @GetMapping("/get-list") @ApiOperation("获取应用信息列表") - //@PreAuthorize("@ss.hasPermission('application:manage:get-list')") + @PreAuthorize("@ss.hasPermission('application:manage:get-list')") public CommonResult> getList() { // 获取列表信息 List list = applicationService.getApplicationList(); diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationCreateReqVO.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/controller/admin/vo/ApplicationRespVO.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/convert/ApplicationConvert.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/dataobject/ApplicationDO.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/mapper/ApplicationMapper.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationService.java diff --git a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java similarity index 96% rename from ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java rename to ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java index 6895a00..6e9e2bf 100644 --- a/ssadmin-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-application-demo/src/main/java/edu/ssadmin/application/service/ApplicationServiceImpl.java @@ -4,7 +4,7 @@ import edu.ssadmin.application.controller.admin.vo.ApplicationCreateReqVO; import edu.ssadmin.application.convert.ApplicationConvert; import edu.ssadmin.application.dataobject.ApplicationDO; import edu.ssadmin.application.mapper.ApplicationMapper; -import edu.ssadmin.server.api.user.AdminUserApi; +import edu.ssadmin.system.api.user.AdminUserApi; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/ssadmin-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml b/ssadmin-parent-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml similarity index 100% rename from ssadmin-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml rename to ssadmin-parent-server/ssadmin-application-demo/src/main/resources/edu/ssadmin/application/mapper/ApplicationMapper.xml diff --git a/ssadmin-parent-server/ssadmin-framework/pom.xml b/ssadmin-parent-server/ssadmin-framework/pom.xml new file mode 100644 index 0000000..c9c12b8 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-framework/pom.xml @@ -0,0 +1,23 @@ + + + + ssadmin-parrent-server + edu.ssadmin + 1.0 + + 4.0.0 + + ssadmin-framework + pom + 1.0 + + + ssadmin-common + ssadmin-spring-boot-starter-security + ssadmin-spring-boot-starter-test + ssadmin-spring-boot-starter-web + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-common/pom.xml b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/pom.xml similarity index 91% rename from ssadmin-server/ssadmin-common/pom.xml rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/pom.xml index 1760c18..ae04f37 100644 --- a/ssadmin-server/ssadmin-common/pom.xml +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/pom.xml @@ -6,7 +6,7 @@ edu.ssadmin - ssadmin-parrent-server + ssadmin-framework 1.0 @@ -27,6 +27,7 @@ org.projectlombok lombok + 1.18.30 diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/core/IntArrayValuable.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/core/IntArrayValuable.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/core/IntArrayValuable.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/core/IntArrayValuable.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/core/KeyValue.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/core/KeyValue.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/core/KeyValue.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/core/KeyValue.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/enums/CommonStatusEnum.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/enums/CommonStatusEnum.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/enums/CommonStatusEnum.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/enums/CommonStatusEnum.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCode.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCode.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCode.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCode.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ErrorCodeConstants.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/GlobalErrorCodeConstants.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/GlobalErrorCodeConstants.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/GlobalErrorCodeConstants.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/GlobalErrorCodeConstants.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/ServiceException.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java similarity index 74% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java index 74c69b3..554144a 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/exception/util/ServiceExceptionUtil.java @@ -5,13 +5,30 @@ import edu.ssadmin.common.exception.ErrorCode; import edu.ssadmin.common.exception.ServiceException; import lombok.extern.slf4j.Slf4j; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + @Slf4j public class ServiceExceptionUtil { + private static final ConcurrentMap MESSAGES = new ConcurrentHashMap<>(); + public static ServiceException exception(ErrorCode errorCode) { return exception2(errorCode.getCode(), errorCode.getMsg()); } + + public static ServiceException exception(ErrorCode errorCode, Object... params) { + String messagePattern = MESSAGES.getOrDefault(errorCode.getCode(), errorCode.getMsg()); + return exception0(errorCode.getCode(), messagePattern, params); + } + + public static ServiceException exception0(Integer code, String messagePattern, Object... params) { + String message = doFormat(code, messagePattern, params); + return new ServiceException(code, message); + } + + public static ServiceException exception2(Integer code, String message) { return new ServiceException(code, message); } diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/handler/GlobalExceptionHandler.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/handler/GlobalExceptionHandler.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/handler/GlobalExceptionHandler.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/handler/GlobalExceptionHandler.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/CommonResult.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/CollectionUtils.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/JsonUtils.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ObjectUtils.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ServletUtils.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ValidationUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ValidationUtils.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ValidationUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/utils/ValidationUtils.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/validation/Mobile.java diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java similarity index 100% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-common/src/main/java/edu/ssadmin/common/validation/MobileValidator.java diff --git a/ssadmin-server/ssadmin-module-security/pom.xml b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/pom.xml similarity index 83% rename from ssadmin-server/ssadmin-module-security/pom.xml rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/pom.xml index bf9e108..5fd74b7 100644 --- a/ssadmin-server/ssadmin-module-security/pom.xml +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/pom.xml @@ -6,11 +6,11 @@ edu.ssadmin - ssadmin-parrent-server + ssadmin-framework 1.0 - ssadmin-module-security + ssadmin-spring-boot-starter-security ${project.artifactId} @@ -25,7 +25,7 @@ edu.ssadmin - ssadmin-system-api + ssadmin-module-system-api 1.0 @@ -52,7 +52,7 @@ edu.ssadmin - ssadmin-module-web + ssadmin-spring-boot-starter-web 1.0 diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/annotations/PreAuthenticated.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/AuthorizeRequestsCustomizer.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/SecurityProperties.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java similarity index 89% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java index 09ba46a..8a78f59 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/SsadminSecurityAutoConfiguration.java @@ -5,15 +5,11 @@ import edu.ssadmin.security.handler.AccessDeniedHandlerImpl; import edu.ssadmin.security.handler.AuthenticationEntryPointImpl; import edu.ssadmin.security.service.SecurityFrameworkService; import edu.ssadmin.security.service.SecurityFrameworkServiceImpl; -import edu.ssadmin.server.api.permission.PermissionApi; +import edu.ssadmin.system.api.permission.PermissionApi; import edu.ssadmin.web.core.handler.GlobalExceptionHandler; -import org.springframework.beans.factory.config.MethodInvokingFactoryBean; -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.AuthenticationEntryPoint; diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/config/WebSecurityConfigurerAdapter.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/filter/TokenAuthenticationFilter.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/handler/AccessDeniedHandlerImpl.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/handler/AuthenticationEntryPointImpl.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkService.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java similarity index 77% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java index aab6d6b..d0a5951 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/service/SecurityFrameworkServiceImpl.java @@ -1,15 +1,10 @@ package edu.ssadmin.security.service; -import cn.hutool.core.collection.CollUtil; import lombok.AllArgsConstructor; -import edu.ssadmin.server.api.permission.PermissionApi; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import edu.ssadmin.system.api.permission.PermissionApi; import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; -import javax.annotation.Resource; -import java.util.Arrays; /** * 默认的 {@link SecurityFrameworkService} 实现类 diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/JwtTokenUtil.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/JwtTokenUtil.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/JwtTokenUtil.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/JwtTokenUtil.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/PasswordUtil.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/PasswordUtil.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/PasswordUtil.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/PasswordUtil.java diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java similarity index 100% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-security/src/main/java/edu/ssadmin/security/util/SecurityFrameworkUtils.java diff --git a/ssadmin-server/ssadmin-test/pom.xml b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/pom.xml similarity index 93% rename from ssadmin-server/ssadmin-test/pom.xml rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/pom.xml index db43300..78aab93 100644 --- a/ssadmin-server/ssadmin-test/pom.xml +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - ssadmin-parrent-server + ssadmin-framework edu.ssadmin 1.0 4.0.0 - ssadmin-test + ssadmin-spring-boot-starter-test 18 diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java similarity index 100% rename from ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/config/SqlInitializationTestConfiguration.java diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java similarity index 100% rename from ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/ut/BaseDbUnitTest.java diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java similarity index 100% rename from ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/util/AssertUtils.java diff --git a/ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java similarity index 100% rename from ssadmin-server/ssadmin-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-test/src/main/java/edu/ssadmin/framework/test/core/util/RandomUtils.java diff --git a/ssadmin-server/ssadmin-module-web/pom.xml b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/pom.xml similarity index 91% rename from ssadmin-server/ssadmin-module-web/pom.xml rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/pom.xml index 71f07cf..d5d9bb6 100644 --- a/ssadmin-server/ssadmin-module-web/pom.xml +++ b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/pom.xml @@ -3,13 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - ssadmin-parrent-server + ssadmin-framework edu.ssadmin 1.0 4.0.0 - ssadmin-module-web + ssadmin-spring-boot-starter-web 18 diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java similarity index 100% rename from ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/config/SsadminWebAutoConfiguration.java diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/config/WebProperties.java similarity index 100% rename from ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/config/WebProperties.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/config/WebProperties.java diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java similarity index 100% rename from ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/core/handler/GlobalExceptionHandler.java diff --git a/ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java b/ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java similarity index 100% rename from ssadmin-server/ssadmin-module-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java rename to ssadmin-parent-server/ssadmin-framework/ssadmin-spring-boot-starter-web/src/main/java/edu/ssadmin/web/core/utils/WebFrameworkUtils.java diff --git a/ssadmin-server/ssadmin-system/pom.xml b/ssadmin-parent-server/ssadmin-module-system/pom.xml similarity index 88% rename from ssadmin-server/ssadmin-system/pom.xml rename to ssadmin-parent-server/ssadmin-module-system/pom.xml index dd7f5df..d48de53 100644 --- a/ssadmin-server/ssadmin-system/pom.xml +++ b/ssadmin-parent-server/ssadmin-module-system/pom.xml @@ -9,8 +9,8 @@ 4.0.0 - ssadmin-system-api - ssadmin-system-biz + ssadmin-module-system-api + ssadmin-module-system-biz ssadmin-system pom diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/pom.xml similarity index 94% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/pom.xml index 8645576..e452e49 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/pom.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/pom.xml @@ -10,7 +10,7 @@ 1.0 - ssadmin-system-api + ssadmin-module-system-api 1.0 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/permission/PermissionApi.java similarity index 96% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/permission/PermissionApi.java index e6f79d5..e4ae537 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/permission/PermissionApi.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/permission/PermissionApi.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.api.permission; +package edu.ssadmin.system.api.permission; import java.util.Collection; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/user/AdminUserApi.java similarity index 95% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/user/AdminUserApi.java index 2b7c568..830c9f6 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/api/user/AdminUserApi.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/api/user/AdminUserApi.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.api.user; +package edu.ssadmin.system.api.user; import java.util.Collection; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/MenuTypeEnum.java similarity index 72% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/MenuTypeEnum.java index 25ca933..3608cc0 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/MenuTypeEnum.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/MenuTypeEnum.java @@ -1,12 +1,9 @@ -package edu.ssadmin.server.enums.permission; +package edu.ssadmin.system.enums.permission; -import edu.ssadmin.common.pojo.AccessToken; import lombok.AllArgsConstructor; import lombok.Getter; -import javax.validation.Valid; - /** * 菜单类型枚举类 * diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/RoleCodeEnum.java similarity index 92% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/RoleCodeEnum.java index 192ce56..14157d5 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/java/edu/ssadmin/server/enums/permission/RoleCodeEnum.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/java/edu/ssadmin/system/enums/permission/RoleCodeEnum.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.enums.permission; +package edu.ssadmin.system.enums.permission; import edu.ssadmin.common.utils.ObjectUtils; import lombok.AllArgsConstructor; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-dev.yml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-dev.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-dev.yml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-dev.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-local.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-local.yml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-local.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-prod.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-prod.yml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application-prod.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application.yml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/application.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/mappers/AdminUserMapper.xml similarity index 92% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/mappers/AdminUserMapper.xml index efb578b..2075859 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-api/src/main/resources/mappers/AdminUserMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -45,11 +45,11 @@ WHERE status = #{status} AND deleted = 0 - + INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,loginIp,loginDate) VALUES (#{id}, #{username}, #{password}, #{nickname},#{avatar},#{email},#{mobile},#{status},#{loginIp},#{loginDate}) - + UPDATE system_users username = #{username}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/pom.xml similarity index 47% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/pom.xml index c0139a9..da2ed14 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/pom.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/pom.xml @@ -10,34 +10,38 @@ 1.0 - ssadmin-system-biz + ssadmin-module-system-biz ${project.artifactId} - - - edu.ssadmin - ssadmin-system-api + ssadmin-module-system-api 1.0 edu.ssadmin - ssadmin-module-security + ssadmin-spring-boot-starter-security 1.0 + + + org.projectlombok + lombok + 1.18.30 + org.mapstruct mapstruct 1.5.0.Final - - - - - + + org.mapstruct + mapstruct-processor + 1.5.0.Final + provided + edu.ssadmin ssadmin-common @@ -49,50 +53,12 @@ ssadmin-application-demo 1.0 - - - org.springframework.boot - spring-boot-starter-test - test - edu.ssadmin - ssadmin-test + ssadmin-spring-boot-starter-test 1.0 test - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - - - org.mapstruct - mapstruct-processor - 1.5.0.Final - - - org.projectlombok - lombok - ${lombok.version} - - - - - - - diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/permission/PermissionApiImpl.java similarity index 85% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/permission/PermissionApiImpl.java index 06406d3..9d1a639 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/permission/PermissionApiImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/permission/PermissionApiImpl.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.api.permission; +package edu.ssadmin.system.api.permission; -import edu.ssadmin.server.service.permission.PermissionService; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.service.permission.PermissionService; +import edu.ssadmin.system.service.user.AdminUserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/user/AdminUserApiImpl.java similarity index 89% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/user/AdminUserApiImpl.java index 7c87646..1557fa7 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/api/user/AdminUserApiImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/api/user/AdminUserApiImpl.java @@ -1,6 +1,6 @@ -package edu.ssadmin.server.api.user; +package edu.ssadmin.system.api.user; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.service.user.AdminUserService; import org.springframework.stereotype.Service; import static edu.ssadmin.security.util.SecurityFrameworkUtils.getUserName; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/Demo.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/Demo.java similarity index 89% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/Demo.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/Demo.java index 9258b8e..f82ae60 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/Demo.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/Demo.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller; +package edu.ssadmin.system.controller; import edu.ssadmin.common.pojo.CommonResult; import org.springframework.web.bind.annotation.GetMapping; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/AdminAuthController.java similarity index 79% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/AdminAuthController.java index 4f43598..df738a5 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/AdminAuthController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/AdminAuthController.java @@ -1,20 +1,20 @@ -package edu.ssadmin.server.controller.admin.auth; +package edu.ssadmin.system.controller.admin.auth; import cn.hutool.core.collection.CollUtil; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; -import edu.ssadmin.server.convert.auth.AuthConvert; -import edu.ssadmin.server.dataobject.permission.MenuDO; -import edu.ssadmin.server.dataobject.permission.RoleDO; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.service.auth.AdminAuthService; -import edu.ssadmin.server.service.permission.MenuService; -import edu.ssadmin.server.service.permission.PermissionService; -import edu.ssadmin.server.service.permission.RoleService; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.controller.admin.auth.vo.AuthPermissionInfoRespVO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginRespVO; +import edu.ssadmin.system.convert.auth.AuthConvert; +import edu.ssadmin.system.dataobject.permission.MenuDO; +import edu.ssadmin.system.dataobject.permission.RoleDO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.service.auth.AdminAuthService; +import edu.ssadmin.system.service.permission.MenuService; +import edu.ssadmin.system.service.permission.PermissionService; +import edu.ssadmin.system.service.permission.RoleService; +import edu.ssadmin.system.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -90,7 +90,6 @@ public class AdminAuthController { // 1.3 获得菜单列表 Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); List menuList = menuService.getMenuList(menuIds); - System.out.println(menuList.get(0).getVisible()); menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单 // 2. 拼接结果返回 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginReqVO.java similarity index 96% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginReqVO.java index c36ae65..1252c04 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.auth.vo; +package edu.ssadmin.system.controller.admin.auth.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginRespVO.java similarity index 93% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginRespVO.java index aeb806c..bf52869 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthLoginRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthLoginRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.auth.vo; +package edu.ssadmin.system.controller.admin.auth.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthMenuRespVO.java similarity index 91% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthMenuRespVO.java index cfd61a7..c2df5a0 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthMenuRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthMenuRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.auth.vo; +package edu.ssadmin.system.controller.admin.auth.vo; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java similarity index 95% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java index 26731a4..3dac2c0 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/auth/vo/AuthPermissionInfoRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/auth/vo/AuthPermissionInfoRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.auth.vo; +package edu.ssadmin.system.controller.admin.auth.vo; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/captcha/CaptchaController.java similarity index 40% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/captcha/CaptchaController.java index 0c84046..871ff0f 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/captcha/CaptchaController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/captcha/CaptchaController.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.captcha; +package edu.ssadmin.system.controller.admin.captcha; public class CaptchaController { } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dept/DeptController.java similarity index 39% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dept/DeptController.java index 32761b5..ba0fb20 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/dept/DeptController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dept/DeptController.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.dept; +package edu.ssadmin.system.controller.admin.dept; public class DeptController { } diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictDataController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictDataController.java new file mode 100644 index 0000000..23f5604 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictDataController.java @@ -0,0 +1,78 @@ +package edu.ssadmin.system.controller.admin.dict; + +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.system.controller.admin.dict.vo.data.*; +import edu.ssadmin.system.convert.dict.DictDataConvert; +import edu.ssadmin.system.dataobject.dict.DictDataDO; +import edu.ssadmin.system.service.dict.DictDataService; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +import java.util.List; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/system/dict-data") +@Validated +public class DictDataController { + + @Resource + private DictDataService dictDataService; + + @PostMapping("/create") + @ApiOperation("新增字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:create')") + public CommonResult createDictData(@Valid @RequestBody DictDataCreateReqVO reqVO) { + Long dictDataId = dictDataService.createDictData(reqVO); + return success(dictDataId); + } + + @PutMapping("/update") + @ApiOperation("修改字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:update')") + public CommonResult updateDictData(@Valid @RequestBody DictDataUpdateReqVO reqVO) { + dictDataService.updateDictData(reqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除字典数据") + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictData(Long id) { + dictDataService.deleteDictData(id); + return success(true); + } + + @GetMapping("/list-all-simple") + @ApiOperation("获得全部字典数据列表") + // 无需添加权限认证,因为前端全局都需要 + public CommonResult> getSimpleDictDataList() { + List list = dictDataService.getDictDataList(); + List list1 =DictDataConvert.INSTANCE.convertList(list); +// list1.forEach(System.out::println); +// return success(list1); + return success(DictDataConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/list") + @ApiOperation("/获得字典类型的信息列表") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult> getDictTypeList(@Valid DictDataListReqVO reqVO) { + return success(DictDataConvert.INSTANCE.convertList01(dictDataService.getDictDataList01(reqVO))); + } + + @GetMapping(value = "/get") + @ApiOperation("/查询字典数据详细") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult getDictData(@RequestParam("id") Long id) { + return success(DictDataConvert.INSTANCE.convert(dictDataService.getDictData(id))); + } + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictTypeController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictTypeController.java new file mode 100644 index 0000000..c432aa4 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/DictTypeController.java @@ -0,0 +1,74 @@ +package edu.ssadmin.system.controller.admin.dict; + +import edu.ssadmin.common.pojo.CommonResult; +import edu.ssadmin.system.controller.admin.dict.vo.type.*; +import edu.ssadmin.system.convert.dict.DictTypeConvert; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import edu.ssadmin.system.service.dict.DictTypeService; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static edu.ssadmin.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/system/dict-type") +@Validated +public class DictTypeController { + + @Resource + private DictTypeService dictTypeService; + + @PostMapping("/create") + @ApiOperation("创建字典类型") + @PreAuthorize("@ss.hasPermission('system:dict:create')") + public CommonResult createDictType(@Valid @RequestBody DictTypeCreateReqVO reqVO) { + Long dictTypeId = dictTypeService.createDictType(reqVO); + return success(dictTypeId); + } + + @PutMapping("/update") + @ApiOperation("修改字典类型") + @PreAuthorize("@ss.hasPermission('system:dict:update')") + public CommonResult updateDictType(@Valid @RequestBody DictTypeUpdateReqVO reqVO) { + dictTypeService.updateDictType(reqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除字典类型") + @PreAuthorize("@ss.hasPermission('system:dict:delete')") + public CommonResult deleteDictType(Long id) { + dictTypeService.deleteDictType(id); + return success(true); + } + + @ApiOperation("/获得字典类型的分页列表") + @GetMapping("/list") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult> ListDictTypes(@Valid DictTypeListReqVO reqVO) { + return success(DictTypeConvert.INSTANCE.convertList01(dictTypeService.getDictTypeList(reqVO))); + } + + @ApiOperation("/查询字典类型详细") + @GetMapping(value = "/get") + @PreAuthorize("@ss.hasPermission('system:dict:query')") + public CommonResult getDictType(@RequestParam("id") Long id) { + return success(DictTypeConvert.INSTANCE.convert(dictTypeService.getDictType(id))); + } + + @GetMapping("/list-all-simple") + @ApiOperation("获得全部字典类型列表") + // 无需添加权限认证,因为前端全局都需要 + public CommonResult> getSimpleDictTypeList() { + List list = dictTypeService.getDictTypeList(); + return success(DictTypeConvert.INSTANCE.convertList(list)); + } +} \ No newline at end of file diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataBaseVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataBaseVO.java new file mode 100644 index 0000000..f9bda61 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataBaseVO.java @@ -0,0 +1,37 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 字典数据 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class DictDataBaseVO { + + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @NotBlank(message = "字典标签不能为空") + @Size(max = 100, message = "字典标签长度不能超过100个字符") + private String label; + + @NotBlank(message = "字典键值不能为空") + @Size(max = 100, message = "字典键值长度不能超过100个字符") + private String value; + + @NotBlank(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型长度不能超过100个字符") + private String dictType; + + @NotNull(message = "状态不能为空") +// @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}") + private Integer status; + + private String remark; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java new file mode 100644 index 0000000..6b23312 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataCreateReqVO.java @@ -0,0 +1,10 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataCreateReqVO extends DictDataBaseVO { + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataListReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataListReqVO.java new file mode 100644 index 0000000..48c4195 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataListReqVO.java @@ -0,0 +1,20 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.Size; + +@Data +//@EqualsAndHashCode(callSuper = true) +public class DictDataListReqVO { + + @Size(max = 100, message = "字典标签长度不能超过100个字符") + private String label; + + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + private String dictType; + + private Integer status; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataRespVO.java new file mode 100644 index 0000000..b299fc2 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataRespVO.java @@ -0,0 +1,20 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DictDataRespVO extends DictDataBaseVO { + + private Long id; + + private LocalDateTime createTime; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java new file mode 100644 index 0000000..bef0ab3 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataSimpleRespVO.java @@ -0,0 +1,24 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.Data; + +@Data +public class DictDataSimpleRespVO { + + private String dictType; + + private String value; + + private String label; + + @Override + public String toString() { + return "DictDataSimpleRespVO{" + + "label='" + label + '\'' + + ", value='" + value + '\'' + + ", dictType='" + dictType + '\'' + + '}'; + } + + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java new file mode 100644 index 0000000..c345a30 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/data/DictDataUpdateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.system.controller.admin.dict.vo.data; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataUpdateReqVO extends DictDataBaseVO { + + @NotNull(message = "字典数据编号不能为空") + private Long id; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeBaseVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeBaseVO.java new file mode 100644 index 0000000..a02b0f9 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeBaseVO.java @@ -0,0 +1,25 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class DictTypeBaseVO { + + @NotBlank(message = "字典名称不能为空") + @Size(max = 100, message = "字典类型名称长度不能超过100个字符") + private String name; + + @NotNull(message = "状态不能为空") + private Integer status; + + private String remark; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java new file mode 100644 index 0000000..96ccd3c --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeCreateReqVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DictTypeCreateReqVO extends DictTypeBaseVO { + + @NotNull(message = "字典类型不能为空") + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + private String type; + +} \ No newline at end of file diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeListReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeListReqVO.java new file mode 100644 index 0000000..3247880 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeListReqVO.java @@ -0,0 +1,24 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.Size; +import java.time.LocalDateTime; + +@Data +//@EqualsAndHashCode(callSuper = true) +public class DictTypeListReqVO { + + private String name; + + @Size(max = 100, message = "字典类型类型长度不能超过100个字符") + private String type; + + private Integer status; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime[] createTime; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeRespVO.java new file mode 100644 index 0000000..8748d26 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeRespVO.java @@ -0,0 +1,22 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class DictTypeRespVO extends DictTypeBaseVO { + + private Long id; + + private String type; + + private LocalDateTime createTime; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java new file mode 100644 index 0000000..d13d36c --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeSimpleRespVO.java @@ -0,0 +1,17 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DictTypeSimpleRespVO { + + private Long id; + + private String name; + + private String type; +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java new file mode 100644 index 0000000..d90edeb --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/dict/vo/type/DictTypeUpdateReqVO.java @@ -0,0 +1,15 @@ +package edu.ssadmin.system.controller.admin.dict.vo.type; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DictTypeUpdateReqVO extends DictTypeBaseVO { + + @NotNull(message = "字典类型编号不能为空") + private Long id; + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/package-info.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/package-info.java new file mode 100644 index 0000000..e322d3f --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/package-info.java @@ -0,0 +1 @@ +package edu.ssadmin.system.controller.admin; \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/MenuController.java similarity index 90% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/MenuController.java index dafdf62..f520ebc 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/MenuController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/MenuController.java @@ -1,11 +1,11 @@ -package edu.ssadmin.server.controller.admin.permission; +package edu.ssadmin.system.controller.admin.permission; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.permission.vo.menu.*; -import edu.ssadmin.server.convert.permission.MenuConvert; -import edu.ssadmin.server.dataobject.permission.MenuDO; -import edu.ssadmin.server.service.permission.MenuService; +import edu.ssadmin.system.controller.admin.permission.vo.menu.*; +import edu.ssadmin.system.convert.permission.MenuConvert; +import edu.ssadmin.system.dataobject.permission.MenuDO; +import edu.ssadmin.system.service.permission.MenuService; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/PermissionController.java similarity index 88% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/PermissionController.java index 7d2af34..acd710b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/PermissionController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/PermissionController.java @@ -1,16 +1,15 @@ -package edu.ssadmin.server.controller.admin.permission; +package edu.ssadmin.system.controller.admin.permission; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; -import edu.ssadmin.server.service.permission.PermissionService; +import edu.ssadmin.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; +import edu.ssadmin.system.service.permission.PermissionService; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.validation.Valid; import java.util.Set; import static edu.ssadmin.common.pojo.CommonResult.success; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/RoleController.java similarity index 81% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/RoleController.java index ae505e6..102b35c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/RoleController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/RoleController.java @@ -1,20 +1,18 @@ -package edu.ssadmin.server.controller.admin.permission; +package edu.ssadmin.system.controller.admin.permission; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.permission.vo.role.*; -import edu.ssadmin.server.convert.permission.RoleConvert; -import edu.ssadmin.server.dataobject.permission.RoleDO; -import edu.ssadmin.server.service.permission.RoleService; +import edu.ssadmin.system.controller.admin.permission.vo.role.*; +import edu.ssadmin.system.convert.permission.RoleConvert; +import edu.ssadmin.system.dataobject.permission.RoleDO; +import edu.ssadmin.system.service.permission.RoleService; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; -import java.io.IOException; import java.util.Comparator; import java.util.List; @@ -68,6 +66,12 @@ public class RoleController { return success(RoleConvert.INSTANCE.convert(role)); } + @GetMapping("/page") + @ApiOperation("获得角色信息列表") + @PreAuthorize("@ss.hasPermission('system:role:query')") + public CommonResult> getRolePage(RoleListReqVO reqVO) { + return success(RoleConvert.INSTANCE.convertList03(roleService.getRoleList01(reqVO))); + } @GetMapping("/list-all-simple") @ApiOperation("获取角色精简信息列表") diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuBaseVO.java similarity index 95% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuBaseVO.java index 45d6c5b..e29db2f 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuBaseVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuBaseVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java similarity index 70% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java index 748b342..1647d22 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuCreateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuCreateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuListReqVO.java similarity index 64% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuListReqVO.java index 0095943..135999a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuListReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuListReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuRespVO.java similarity index 85% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuRespVO.java index bdf5de7..a07131a 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java similarity index 80% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java index 9abfef6..f2e79a6 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuSimpleRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuSimpleRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java similarity index 80% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java index 8c4a29a..f1bb6e4 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/menu/MenuUpdateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/menu/MenuUpdateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.menu; +package edu.ssadmin.system.controller.admin.permission.vo.menu; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java similarity index 83% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java index dcdb2cf..a0741ba 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.permission; +package edu.ssadmin.system.controller.admin.permission.vo.permission; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java similarity index 83% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java index 3424f66..66c6745 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/permission/PermissionAssignUserRoleReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.permission; +package edu.ssadmin.system.controller.admin.permission.vo.permission; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleBaseVO.java similarity index 92% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleBaseVO.java index d4b6216..7001c29 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleBaseVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleBaseVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleCreateReqVO.java similarity index 70% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleCreateReqVO.java index fb6f7b6..e8daf39 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleCreateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleCreateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleListReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleListReqVO.java new file mode 100644 index 0000000..0fe06ec --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleListReqVO.java @@ -0,0 +1,22 @@ +package edu.ssadmin.system.controller.admin.permission.vo.role; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Data +//@EqualsAndHashCode(callSuper = true) +public class RoleListReqVO { + + private String name; + + private String code; + + private Integer status; + +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// private LocalDateTime[] createTime; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleRespVO.java similarity index 85% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleRespVO.java index 8b9a48c..b06eb9d 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java similarity index 77% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java index 9bc6255..b7bc5ef 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleSimpleRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleSimpleRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java similarity index 80% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java index a4e09be..58161d5 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java similarity index 84% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java index f82e865..afa8878 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/permission/vo/role/RoleUpdateStatusReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.permission.vo.role; +package edu.ssadmin.system.controller.admin.permission.vo.role; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserController.java similarity index 91% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserController.java index c0388eb..d1aa059 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserController.java @@ -1,11 +1,11 @@ -package edu.ssadmin.server.controller.admin.user; +package edu.ssadmin.system.controller.admin.user; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.user.vo.user.*; -import edu.ssadmin.server.convert.user.UserConvert; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.controller.admin.user.vo.user.*; +import edu.ssadmin.system.convert.user.UserConvert; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.service.user.AdminUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserProfileController.java similarity index 86% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserProfileController.java index e624380..4985d42 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/UserProfileController.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/UserProfileController.java @@ -1,13 +1,12 @@ -package edu.ssadmin.server.controller.admin.user; +package edu.ssadmin.system.controller.admin.user; -import cn.hutool.core.collection.CollUtil; import edu.ssadmin.common.pojo.CommonResult; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import edu.ssadmin.server.convert.user.UserConvert; -import edu.ssadmin.server.service.user.AdminUserService; -import edu.ssadmin.server.utils.AdminLoginInfo; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileRespVO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.system.convert.user.UserConvert; +import edu.ssadmin.system.service.user.AdminUserService; +import edu.ssadmin.system.utils.AdminLoginInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileRespVO.java similarity index 83% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileRespVO.java index 0c6a4ef..5ed49e4 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileRespVO.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.controller.admin.user.vo.profile; +package edu.ssadmin.system.controller.admin.user.vo.profile; -import edu.ssadmin.server.controller.admin.user.vo.user.UserBaseVO; +import edu.ssadmin.system.controller.admin.user.vo.user.UserBaseVO; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java similarity index 88% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java index 2861c56..11017d3 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.profile; +package edu.ssadmin.system.controller.admin.user.vo.profile; import lombok.Data; import org.hibernate.validator.constraints.Length; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java similarity index 77% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java index fce2e58..5001e99 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/profile/UserProfileUpdateReqVO.java @@ -1,8 +1,7 @@ -package edu.ssadmin.server.controller.admin.user.vo.profile; +package edu.ssadmin.system.controller.admin.user.vo.profile; import edu.ssadmin.common.validation.Mobile; import lombok.Data; -import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Email; import javax.validation.constraints.Size; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserBaseVO.java similarity index 93% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserBaseVO.java index 2a72b06..7386253 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserBaseVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserBaseVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import edu.ssadmin.common.validation.Mobile; import lombok.Data; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserCreateReqVO.java similarity index 87% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserCreateReqVO.java index 36b51fc..95eace1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserCreateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserCreateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserListRespVO.java similarity index 85% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserListRespVO.java index 489417f..8765e4e 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserListRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserListRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserRespVO.java similarity index 88% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserRespVO.java index 463cdf8..5801a92 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.AllArgsConstructor; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserSimpleRespVO.java similarity index 81% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserSimpleRespVO.java index d7d2e7a..83604fa 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserSimpleRespVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java similarity index 88% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java index e75a068..2676206 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdatePasswordReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.Data; import org.hibernate.validator.constraints.Length; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdateReqVO.java similarity index 82% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdateReqVO.java index aaa36c7..b2b72e4 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/user/vo/user/UserUpdateReqVO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/controller/admin/user/vo/user/UserUpdateReqVO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.controller.admin.user.vo.user; +package edu.ssadmin.system.controller.admin.user.vo.user; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/auth/AuthConvert.java similarity index 55% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/auth/AuthConvert.java index c0eb84c..a728eb1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/auth/AuthConvert.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/auth/AuthConvert.java @@ -1,13 +1,13 @@ -package edu.ssadmin.server.convert.auth; +package edu.ssadmin.system.convert.auth; import cn.hutool.core.collection.CollUtil; -import edu.ssadmin.common.pojo.AccessToken; -import edu.ssadmin.server.controller.admin.auth.vo.AuthPermissionInfoRespVO; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; -import edu.ssadmin.server.dataobject.permission.MenuDO; -import edu.ssadmin.server.dataobject.permission.RoleDO; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.enums.permission.MenuTypeEnum; +import edu.ssadmin.system.controller.admin.auth.vo.AuthPermissionInfoRespVO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginRespVO; +import edu.ssadmin.system.dataobject.AccessToken; +import edu.ssadmin.system.dataobject.permission.MenuDO; +import edu.ssadmin.system.dataobject.permission.RoleDO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.enums.permission.MenuTypeEnum; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import org.slf4j.LoggerFactory; @@ -16,25 +16,18 @@ import java.util.*; import static edu.ssadmin.common.utils.CollectionUtils.convertSet; import static edu.ssadmin.common.utils.CollectionUtils.filterList; -import static edu.ssadmin.server.dataobject.permission.MenuDO.ID_ROOT; +import static edu.ssadmin.system.dataobject.permission.MenuDO.ID_ROOT; -@Mapper +@Mapper(componentModel = "spring") public interface AuthConvert { AuthConvert INSTANCE = Mappers.getMapper(AuthConvert.class); - default AuthLoginRespVO convert(AccessToken bean){ - return AuthLoginRespVO.builder() - .userId(bean.getUserId()) - .accessToken(bean.getAccessToken()) - .refreshToken(bean.getRefreshToken()) - .expiresTime(bean.getExpiresTime()) - .build(); - } + AuthLoginRespVO convert(AccessToken bean); default AuthPermissionInfoRespVO convert(AdminUserDO user, List roleList, List menuList) { return AuthPermissionInfoRespVO.builder() - .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).username(user.getUsername()).avatar(user.getAvatar()).build()) + .user(AuthPermissionInfoRespVO.UserVO.builder().id(user.getId()).username(user.getUsername()).nickname(user.getNickname()).avatar(user.getAvatar()).build()) .roles(convertSet(roleList, RoleDO::getCode)) // 权限标识信息 .permissions(convertSet(menuList, MenuDO::getPermission)) @@ -43,20 +36,7 @@ public interface AuthConvert { .build(); } - default AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO bean){ - return AuthPermissionInfoRespVO.MenuVO.builder() - .id(bean.getId()) - .parentId(bean.getParentId()) - .name(bean.getName()) - .path(bean.getPath()) - .component(bean.getComponent()) - .componentName(bean.getComponentName()) - .icon(bean.getIcon()) - .visible(bean.getVisible()) - .keepAlive(bean.getKeepAlive()) - .alwaysShow(bean.getAlwaysShow()) - .build(); - } + AuthPermissionInfoRespVO.MenuVO convertTreeNode(MenuDO bean); /** * 将菜单列表,构建成菜单树 @@ -65,7 +45,6 @@ public interface AuthConvert { * @return 菜单树 */ default List buildMenuTree(List menuList) { - System.out.println(menuList.get(0).getVisible()); if (CollUtil.isEmpty(menuList)) { return Collections.emptyList(); } @@ -98,20 +77,3 @@ public interface AuthConvert { } } - - - -// public LoginRespVO convert(AccessToken bean) { -// if ( bean == null ) { -// return null; -// } -// -// // 使用AccessToken bean的属性值创建LoginRespVO对象 -// LoginRespVO loginRespVO = new LoginRespVO(); -// loginRespVO.setUserId(bean.getUserId()); -// loginRespVO.setAccessToken(bean.getAccessToken()); -// loginRespVO.setRefreshToken(bean.getRefreshToken()); -// loginRespVO.setExpiresTime(bean.getExpiresTime()); -// -// return loginRespVO; -// } \ No newline at end of file diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictDataConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictDataConvert.java new file mode 100644 index 0000000..2fa6466 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictDataConvert.java @@ -0,0 +1,34 @@ +package edu.ssadmin.system.convert.dict; + +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataRespVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataSimpleRespVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import edu.ssadmin.system.dataobject.dict.DictDataDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface DictDataConvert { + + DictDataConvert INSTANCE = Mappers.getMapper(DictDataConvert.class); + + DictDataSimpleRespVO map(DictDataDO bean); + + List convertList(List list); + + DictDataRespVO convert(DictDataDO bean); + + List convertList01(List List); + + DictDataDO convert(DictDataUpdateReqVO bean); + + DictDataDO convert(DictDataCreateReqVO bean); + +// DictDataRespDTO convert02(DictDataDO bean); + + // List convertList03(List list); + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictTypeConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictTypeConvert.java new file mode 100644 index 0000000..a3cf1f5 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/dict/DictTypeConvert.java @@ -0,0 +1,30 @@ +package edu.ssadmin.system.convert.dict; + +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeRespVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeSimpleRespVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper(componentModel = "spring") +public interface DictTypeConvert { + + DictTypeConvert INSTANCE = Mappers.getMapper(DictTypeConvert.class); + + List convertList01(List bean); + + DictTypeRespVO convert(DictTypeDO bean); + + DictTypeDO convert(DictTypeCreateReqVO bean); + + DictTypeDO convert(DictTypeUpdateReqVO bean); + + DictTypeSimpleRespVO map(DictTypeDO bean); + + List convertList(List list); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/MenuConvert.java similarity index 57% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/MenuConvert.java index a40ff85..8e4e68c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/MenuConvert.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/MenuConvert.java @@ -1,16 +1,16 @@ -package edu.ssadmin.server.convert.permission; +package edu.ssadmin.system.convert.permission; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuRespVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuSimpleRespVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; -import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuRespVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuSimpleRespVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.system.dataobject.permission.MenuDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; -@Mapper +@Mapper(componentModel = "spring") public interface MenuConvert { MenuConvert INSTANCE = Mappers.getMapper(MenuConvert.class); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/RoleConvert.java similarity index 53% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/RoleConvert.java index acfcb53..39a9e64 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/permission/RoleConvert.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/permission/RoleConvert.java @@ -1,16 +1,16 @@ -package edu.ssadmin.server.convert.permission; +package edu.ssadmin.system.convert.permission; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleRespVO; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleSimpleRespVO; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; -import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleRespVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleSimpleRespVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.system.dataobject.permission.RoleDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; -@Mapper +@Mapper(componentModel = "spring") public interface RoleConvert { RoleConvert INSTANCE = Mappers.getMapper(RoleConvert.class); @@ -25,6 +25,8 @@ public interface RoleConvert { List convertList02(List list); + List convertList03(List list); + // RoleDO convert(RoleCreateReqBO bean); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/user/UserConvert.java similarity index 75% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/user/UserConvert.java index 4bde133..336bcdc 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/convert/user/UserConvert.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/convert/user/UserConvert.java @@ -1,15 +1,15 @@ -package edu.ssadmin.server.convert.user; +package edu.ssadmin.system.convert.user; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileRespVO; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.*; -import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileRespVO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.system.controller.admin.user.vo.user.*; +import edu.ssadmin.system.dataobject.user.AdminUserDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; import java.util.List; -@Mapper +@Mapper(componentModel = "spring") public interface UserConvert { UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); diff --git a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/AccessToken.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/AccessToken.java similarity index 90% rename from ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/AccessToken.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/AccessToken.java index 62c1f84..238abae 100644 --- a/ssadmin-server/ssadmin-common/src/main/java/edu/ssadmin/common/pojo/AccessToken.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/AccessToken.java @@ -1,4 +1,4 @@ -package edu.ssadmin.common.pojo; +package edu.ssadmin.system.dataobject; import lombok.Data; @@ -26,4 +26,4 @@ public class AccessToken { * 过期时间 */ private LocalDateTime expiresTime; -} +} \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/BaseDO.java similarity index 92% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/BaseDO.java index 27e58e3..e5cd056 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/BaseDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/BaseDO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.dataobject.base; +package edu.ssadmin.system.dataobject.base; import lombok.Data; import java.io.Serializable; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/TenantBaseDO.java similarity index 83% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/TenantBaseDO.java index db74b2b..601789c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/base/TenantBaseDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/base/TenantBaseDO.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.dataobject.base; +package edu.ssadmin.system.dataobject.base; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictDataDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictDataDO.java new file mode 100644 index 0000000..612ecab --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictDataDO.java @@ -0,0 +1,59 @@ +package edu.ssadmin.system.dataobject.dict; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.system.dataobject.base.BaseDO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class DictDataDO extends BaseDO { + + /** + * 字典数据编号 + */ + private Long id; + /** + * 字典排序 + */ + private Integer sort; + /** + * 字典标签 + */ + private String label; + /** + * 字典值 + */ + private String value; + /** + * 字典类型 + * + * 冗余 {@link DictDataDO#getDictType()} + */ + private String dictType; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + + @Override + public String toString() { + return "DictDataDO{" + + "id=" + id + + ", sort=" + sort + + ", label='" + label + '\'' + + ", value='" + value + '\'' + + ", dictType='" + dictType + '\'' + + ", status=" + status + + ", remark='" + remark + '\'' + + '}'; + } + + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictTypeDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictTypeDO.java new file mode 100644 index 0000000..65bf264 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/dict/DictTypeDO.java @@ -0,0 +1,40 @@ +package edu.ssadmin.system.dataobject.dict; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.system.dataobject.base.BaseDO; +import lombok.*; + +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DictTypeDO extends BaseDO { + + /** + * 字典主键 + */ + private Long id; + /** + * 字典名称 + */ + private String name; + /** + * 字典类型 + */ + private String type; + /** + * 状态 + * + * 枚举 {@link CommonStatusEnum} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/MenuDO.java similarity index 93% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/MenuDO.java index 55c3dcb..7d55bb3 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/MenuDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/MenuDO.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.dataobject.permission; +package edu.ssadmin.system.dataobject.permission; -import edu.ssadmin.server.enums.permission.MenuTypeEnum; -import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.system.enums.permission.MenuTypeEnum; +import edu.ssadmin.system.dataobject.base.BaseDO; import edu.ssadmin.common.enums.CommonStatusEnum; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleDO.java similarity index 86% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleDO.java index b081bb5..cadb5f9 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleDO.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.dataobject.permission; +package edu.ssadmin.system.dataobject.permission; import edu.ssadmin.common.enums.CommonStatusEnum; -import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.system.dataobject.base.BaseDO; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleMenuDO.java similarity index 75% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleMenuDO.java index ad6b7ef..c25b465 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/RoleMenuDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/RoleMenuDO.java @@ -1,6 +1,6 @@ -package edu.ssadmin.server.dataobject.permission; +package edu.ssadmin.system.dataobject.permission; -import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.system.dataobject.base.BaseDO; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/UserRoleDO.java similarity index 75% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/UserRoleDO.java index ec09c16..959c480 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/permission/UserRoleDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/permission/UserRoleDO.java @@ -1,6 +1,6 @@ -package edu.ssadmin.server.dataobject.permission; +package edu.ssadmin.system.dataobject.permission; -import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.system.dataobject.base.BaseDO; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/user/AdminUserDO.java similarity index 91% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/user/AdminUserDO.java index ac39c31..9cf1207 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/dataobject/user/AdminUserDO.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/dataobject/user/AdminUserDO.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.dataobject.user; +package edu.ssadmin.system.dataobject.user; import edu.ssadmin.common.enums.CommonStatusEnum; -import edu.ssadmin.server.dataobject.base.BaseDO; +import edu.ssadmin.system.dataobject.base.BaseDO; import lombok.*; import java.time.LocalDateTime; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictDataMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictDataMapper.java new file mode 100644 index 0000000..c01c3d4 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictDataMapper.java @@ -0,0 +1,38 @@ +package edu.ssadmin.system.mapper.dict; + +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataListReqVO; +import edu.ssadmin.system.dataobject.dict.DictDataDO; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import io.swagger.models.auth.In; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +@Mapper +public interface DictDataMapper { + + void insert(DictDataDO dictData); + + void updateById(DictDataDO dictData); + + void deleteById(Long id); + + DictDataDO selectById(Long id); + + DictDataDO selectByDictTypeAndValue(@Param("dictType")String dictType, @Param("value")String value); + + DictDataDO selectByDictTypeAndLabel(@Param("dictType")String dictType, @Param("label")String label) ; + + List selectByDictTypeAndValues(@Param("dictType")String dictType, @Param("values")Collection values) ; + + long selectCountByDictType(String dictType) ; + + List selectList(DictDataListReqVO reqVO) ; + + List selectListByStatus(Integer status); + + List selectListByTypeAndStatus(@Param("dictType") String dictType, @Param("status") Integer status); +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictTypeMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictTypeMapper.java new file mode 100644 index 0000000..ffdadcb --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/dict/DictTypeMapper.java @@ -0,0 +1,35 @@ +package edu.ssadmin.system.mapper.dict; + +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeListReqVO; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; + +@Mapper +public interface DictTypeMapper { + + + void insert(DictTypeDO dictType); + + void updateById(DictTypeDO dictType); + + void deleteById(Long id); + + DictTypeDO selectById(Long id); + + List selectListWithoutParas() ; +// +// List selectBatchIds(Collection ids); + + List selectList(DictTypeListReqVO reqVO); + + DictTypeDO selectByType(String type); + + DictTypeDO selectByName(String name); + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/MenuMapper.java similarity index 78% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/MenuMapper.java index e50050a..6465479 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/MenuMapper.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/MenuMapper.java @@ -1,7 +1,7 @@ -package edu.ssadmin.server.mapper.permission; +package edu.ssadmin.system.mapper.permission; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; -import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.system.dataobject.permission.MenuDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMapper.java similarity index 66% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMapper.java index 44e5433..398e221 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMapper.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMapper.java @@ -1,7 +1,8 @@ -package edu.ssadmin.server.mapper.permission; +package edu.ssadmin.system.mapper.permission; -import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleListReqVO; +import edu.ssadmin.system.dataobject.permission.RoleDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; @@ -26,4 +27,5 @@ public interface RoleMapper { List selectList(); + List selectList01(RoleListReqVO reqVO); } diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMenuMapper.java similarity index 83% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMenuMapper.java index 5ecf7ff..a7e287b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/RoleMenuMapper.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/RoleMenuMapper.java @@ -1,6 +1,6 @@ -package edu.ssadmin.server.mapper.permission; +package edu.ssadmin.system.mapper.permission; -import edu.ssadmin.server.dataobject.permission.RoleMenuDO; +import edu.ssadmin.system.dataobject.permission.RoleMenuDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/UserRoleMapper.java similarity index 82% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/UserRoleMapper.java index ed10fdd..2dc28cd 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/permission/UserRoleMapper.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/permission/UserRoleMapper.java @@ -1,6 +1,6 @@ -package edu.ssadmin.server.mapper.permission; +package edu.ssadmin.system.mapper.permission; -import edu.ssadmin.server.dataobject.permission.UserRoleDO; +import edu.ssadmin.system.dataobject.permission.UserRoleDO; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/user/AdminUserMapper.java similarity index 81% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/user/AdminUserMapper.java index 7f3671b..555ea28 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/mapper/user/AdminUserMapper.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/mapper/user/AdminUserMapper.java @@ -1,8 +1,7 @@ -package edu.ssadmin.server.mapper.user; +package edu.ssadmin.system.mapper.user; -import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthService.java similarity index 49% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthService.java index e80d707..2097a80 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthService.java @@ -1,8 +1,8 @@ -package edu.ssadmin.server.service.auth; +package edu.ssadmin.system.service.auth; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; -import edu.ssadmin.server.dataobject.user.AdminUserDO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginRespVO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; public interface AdminAuthService { diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthServiceImpl.java similarity index 87% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthServiceImpl.java index 11ad825..a34a236 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/auth/AdminAuthServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/auth/AdminAuthServiceImpl.java @@ -1,14 +1,14 @@ -package edu.ssadmin.server.service.auth; +package edu.ssadmin.system.service.auth; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.exception.GlobalErrorCodeConstants; -import edu.ssadmin.security.service.TokenService; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; -import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; -import edu.ssadmin.server.convert.auth.AuthConvert; -import edu.ssadmin.common.pojo.AccessToken; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginRespVO; +import edu.ssadmin.system.convert.auth.AuthConvert; +import edu.ssadmin.system.dataobject.AccessToken; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.service.token.TokenService; +import edu.ssadmin.system.service.user.AdminUserService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataService.java new file mode 100644 index 0000000..250e5b7 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataService.java @@ -0,0 +1,107 @@ +package edu.ssadmin.system.service.dict; + +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataListReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import edu.ssadmin.system.dataobject.dict.DictDataDO; + +import java.util.Collection; +import java.util.List; + +/** + * 字典数据 Service 接口 + * + * @author ruoyi + */ +public interface DictDataService { + + /** + * 创建字典数据 + * + * @param reqVO 字典数据信息 + * @return 字典数据编号 + */ + Long createDictData(DictDataCreateReqVO reqVO); + + /** + * 更新字典数据 + * + * @param reqVO 字典数据信息 + */ + void updateDictData(DictDataUpdateReqVO reqVO); + + /** + * 删除字典数据 + * + * @param id 字典数据编号 + */ + void deleteDictData(Long id); + + /** + * 获得字典数据列表 + * + * @return 字典数据全列表 + */ + List getDictDataList(); + + /** + * 获得字典数据分页列表 + * + * @param reqVO 分页请求 + * @return 字典数据分页列表 + */ + List getDictDataList01(DictDataListReqVO reqVO); + + /** + * 获得字典数据列表 + * + * @param dictType 字典类型 + * @return 字典数据列表 + */ + List getEnabledDictDataListByType(String dictType); + + /** + * 获得字典数据详情 + * + * @param id 字典数据编号 + * @return 字典数据 + */ + DictDataDO getDictData(Long id); + + /** + * 获得指定字典类型的数据数量 + * + * @param dictType 字典类型 + * @return 数据数量 + */ + long countByDictType(String dictType); + + /** + * 校验字典数据们是否有效。如下情况,视为无效: + * 1. 字典数据不存在 + * 2. 字典数据被禁用 + * + * @param dictType 字典类型 + * @param values 字典数据值的数组 + */ + void validateDictDataList(String dictType, Collection values); + + /** + * 获得指定的字典数据 + * + * @param dictType 字典类型 + * @param value 字典数据值 + * @return 字典数据 + */ + DictDataDO getDictData(String dictType, String value); + + /** + * 解析获得指定的字典数据,从缓存中 + * + * @param dictType 字典类型 + * @param label 字典数据标签 + * @return 字典数据 + */ + DictDataDO parseDictData(String dictType, String label); +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataServiceImpl.java new file mode 100644 index 0000000..eddfb84 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictDataServiceImpl.java @@ -0,0 +1,187 @@ +package edu.ssadmin.system.service.dict; + +import cn.hutool.core.collection.CollUtil; +import com.google.common.annotations.VisibleForTesting; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.common.utils.CollectionUtils; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataListReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.data.DictDataUpdateReqVO; +import edu.ssadmin.system.convert.dict.DictDataConvert; +import edu.ssadmin.system.dataobject.dict.DictDataDO; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import edu.ssadmin.system.mapper.dict.DictDataMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Map; + +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 字典数据 Service 实现类 + * + * @author ruoyi + */ +@Service +@Slf4j +public class DictDataServiceImpl implements DictDataService { + + /** + * 排序 dictType > sort + */ + private static final Comparator COMPARATOR_TYPE_AND_SORT = Comparator + .comparing(DictDataDO::getDictType) + .thenComparingInt(DictDataDO::getSort); + + @Resource + private DictTypeService dictTypeService; + + @Resource + private DictDataMapper dictDataMapper; + + @Override + public List getDictDataList() { + List list = dictDataMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); +// // 添加null检查 +// if (list != null && COMPARATOR_TYPE_AND_SORT != null) { +// System.out.println(list.get(0).getValue()); +// list.sort(COMPARATOR_TYPE_AND_SORT); +// } +// list.forEach(System.out::println); + return list; + } + + @Override + public List getDictDataList01(DictDataListReqVO reqVO) { + return dictDataMapper.selectList(reqVO); + } + + @Override + public List getEnabledDictDataListByType(String dictType) { + List list = dictDataMapper.selectListByTypeAndStatus(dictType, CommonStatusEnum.ENABLE.getStatus()); + list.sort(COMPARATOR_TYPE_AND_SORT); + return list; + } + + @Override + public DictDataDO getDictData(Long id) { + return dictDataMapper.selectById(id); + } + + @Override + public Long createDictData(DictDataCreateReqVO reqVO) { + // 校验正确性 + validateDictDataForCreateOrUpdate(null, reqVO.getValue(), reqVO.getDictType()); + + // 插入字典类型 + DictDataDO dictData = DictDataConvert.INSTANCE.convert(reqVO); + dictDataMapper.insert(dictData); + return dictData.getId(); + } + + @Override + public void updateDictData(DictDataUpdateReqVO reqVO) { + // 校验正确性 + validateDictDataForCreateOrUpdate(reqVO.getId(), reqVO.getValue(), reqVO.getDictType()); + + // 更新字典类型 + DictDataDO updateObj = DictDataConvert.INSTANCE.convert(reqVO); + dictDataMapper.updateById(updateObj); + } + + @Override + public void deleteDictData(Long id) { + // 校验是否存在 + validateDictDataExists(id); + + // 删除字典数据 + dictDataMapper.deleteById(id); + } + + @Override + public long countByDictType(String dictType) { + return dictDataMapper.selectCountByDictType(dictType); + } + + private void validateDictDataForCreateOrUpdate(Long id, String value, String dictType) { + // 校验自己存在 + validateDictDataExists(id); + // 校验字典类型有效 + validateDictTypeExists(dictType); + // 校验字典数据的值的唯一性 + validateDictDataValueUnique(id, dictType, value); + } + + @VisibleForTesting + public void validateDictDataValueUnique(Long id, String dictType, String value) { + DictDataDO dictData = dictDataMapper.selectByDictTypeAndValue(dictType, value); + if (dictData == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典数据 + if (id == null) { + throw exception(DICT_DATA_VALUE_DUPLICATE); + } + if (!dictData.getId().equals(id)) { + throw exception(DICT_DATA_VALUE_DUPLICATE); + } + } + + @VisibleForTesting + public void validateDictDataExists(Long id) { + if (id == null) { + return; + } + DictDataDO dictData = dictDataMapper.selectById(id); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + } + + @VisibleForTesting + public void validateDictTypeExists(String type) { + DictTypeDO dictType = dictTypeService.getDictType(type); + if (dictType == null) { + throw exception(DICT_TYPE_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictType.getStatus())) { + throw exception(DICT_TYPE_NOT_ENABLE); + } + } + + @Override + public void validateDictDataList(String dictType, Collection values) { + if (CollUtil.isEmpty(values)) { + return; + } + Map dictDataMap = CollectionUtils.convertMap( + dictDataMapper.selectByDictTypeAndValues(dictType, values), DictDataDO::getValue); + // 校验 + values.forEach(value -> { + DictDataDO dictData = dictDataMap.get(value); + if (dictData == null) { + throw exception(DICT_DATA_NOT_EXISTS); + } + if (!CommonStatusEnum.ENABLE.getStatus().equals(dictData.getStatus())) { + throw exception(DICT_DATA_NOT_ENABLE, dictData.getLabel()); + } + }); + } + + @Override + public DictDataDO getDictData(String dictType, String value) { + return dictDataMapper.selectByDictTypeAndValue(dictType, value); + } + + @Override + public DictDataDO parseDictData(String dictType, String label) { + return dictDataMapper.selectByDictTypeAndLabel(dictType, label); + } + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeService.java new file mode 100644 index 0000000..ad677ab --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeService.java @@ -0,0 +1,70 @@ +package edu.ssadmin.system.service.dict; + +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeListReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; + +import java.util.List; + +/** + * 字典类型 Service 接口 + * + * @author 芋道源码 + */ +public interface DictTypeService { + + /** + * 创建字典类型 + * + * @param reqVO 字典类型信息 + * @return 字典类型编号 + */ + Long createDictType(DictTypeCreateReqVO reqVO); + + /** + * 更新字典类型 + * + * @param reqVO 字典类型信息 + */ + void updateDictType(DictTypeUpdateReqVO reqVO); + + /** + * 删除字典类型 + * + * @param id 字典类型编号 + */ + void deleteDictType(Long id); + + /** + * 获得字典类型分页列表 + * + * @param reqVO 分页请求 + * @return 字典类型分页列表 + */ + List getDictTypeList(DictTypeListReqVO reqVO); + + /** + * 获得字典类型详情 + * + * @param id 字典类型编号 + * @return 字典类型 + */ + DictTypeDO getDictType(Long id); + + /** + * 获得字典类型详情 + * + * @param type 字典类型 + * @return 字典类型详情 + */ + DictTypeDO getDictType(String type); + + /** + * 获得全部字典类型列表 + * + * @return 字典类型列表 + */ + List getDictTypeList(); + +} diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeServiceImpl.java new file mode 100644 index 0000000..2e6d353 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/dict/DictTypeServiceImpl.java @@ -0,0 +1,141 @@ +package edu.ssadmin.system.service.dict; + +import cn.hutool.core.util.StrUtil; +import com.google.common.annotations.VisibleForTesting; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeCreateReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeListReqVO; +import edu.ssadmin.system.controller.admin.dict.vo.type.DictTypeUpdateReqVO; +import edu.ssadmin.system.convert.dict.DictTypeConvert; +import edu.ssadmin.system.dataobject.dict.DictTypeDO; +import edu.ssadmin.system.mapper.dict.DictTypeMapper; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; + +import static edu.ssadmin.common.exception.ErrorCodeConstants.*; +import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 字典类型 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class DictTypeServiceImpl implements DictTypeService { + + @Resource + private DictDataServiceImpl dictDataService; + + @Resource + private DictTypeMapper dictTypeMapper; + + @Override + public List getDictTypeList(DictTypeListReqVO reqVO) { + return dictTypeMapper.selectList(reqVO); + } + + @Override + public DictTypeDO getDictType(Long id) { + return dictTypeMapper.selectById(id); + } + + @Override + public DictTypeDO getDictType(String type) { + return dictTypeMapper.selectByType(type); + } + + @Override + public Long createDictType(DictTypeCreateReqVO reqVO) { + // 校验正确性 + validateDictTypeForCreateOrUpdate(null, reqVO.getName(), reqVO.getType()); + + // 插入字典类型 + DictTypeDO dictType = DictTypeConvert.INSTANCE.convert(reqVO); + dictTypeMapper.insert(dictType); + return dictType.getId(); + } + + @Override + public void updateDictType(DictTypeUpdateReqVO reqVO) { + // 校验正确性 + validateDictTypeForCreateOrUpdate(reqVO.getId(), reqVO.getName(), null); + + // 更新字典类型 + DictTypeDO updateObj = DictTypeConvert.INSTANCE.convert(reqVO); + dictTypeMapper.updateById(updateObj); + } + + @Override + public void deleteDictType(Long id) { + // 校验是否存在 + DictTypeDO dictType = validateDictTypeExists(id); + // 校验是否有字典数据 + if (dictDataService.countByDictType(dictType.getType()) > 0) { + throw exception(DICT_TYPE_HAS_CHILDREN); + } + // 删除字典类型 + dictTypeMapper.deleteById(id); + } + + @Override + public List getDictTypeList() { + return dictTypeMapper.selectListWithoutParas(); + } + + private void validateDictTypeForCreateOrUpdate(Long id, String name, String type) { + // 校验自己存在 + validateDictTypeExists(id); + // 校验字典类型的名字的唯一性 + validateDictTypeNameUnique(id, name); + // 校验字典类型的类型的唯一性 + validateDictTypeUnique(id, type); + } + + @VisibleForTesting + void validateDictTypeNameUnique(Long id, String name) { + DictTypeDO dictType = dictTypeMapper.selectByName(name); + if (dictType == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(DICT_TYPE_NAME_DUPLICATE); + } + if (!dictType.getId().equals(id)) { + throw exception(DICT_TYPE_NAME_DUPLICATE); + } + } + + @VisibleForTesting + void validateDictTypeUnique(Long id, String type) { + if (StrUtil.isEmpty(type)) { + return; + } + DictTypeDO dictType = dictTypeMapper.selectByType(type); + if (dictType == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的字典类型 + if (id == null) { + throw exception(DICT_TYPE_TYPE_DUPLICATE); + } + if (!dictType.getId().equals(id)) { + throw exception(DICT_TYPE_TYPE_DUPLICATE); + } + } + + @VisibleForTesting + DictTypeDO validateDictTypeExists(Long id) { + if (id == null) { + return null; + } + DictTypeDO dictType = dictTypeMapper.selectById(id); + if (dictType == null) { + throw exception(DICT_TYPE_NOT_EXISTS); + } + return dictType; + } + +} diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuService.java similarity index 80% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuService.java index 0cff6cd..c6287f4 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuService.java @@ -1,9 +1,9 @@ -package edu.ssadmin.server.service.permission; +package edu.ssadmin.system.service.permission; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; -import edu.ssadmin.server.dataobject.permission.MenuDO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.system.dataobject.permission.MenuDO; import java.util.Collection; import java.util.List; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuServiceImpl.java similarity index 90% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuServiceImpl.java index 6a50f0f..bd86f05 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/MenuServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/MenuServiceImpl.java @@ -1,13 +1,12 @@ -package edu.ssadmin.server.service.permission; - -import cn.hutool.core.collection.CollUtil; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuListReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.menu.MenuUpdateReqVO; -import edu.ssadmin.server.convert.permission.MenuConvert; -import edu.ssadmin.server.dataobject.permission.MenuDO; -import edu.ssadmin.server.enums.permission.MenuTypeEnum; -import edu.ssadmin.server.mapper.permission.MenuMapper; +package edu.ssadmin.system.service.permission; + +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuListReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.menu.MenuUpdateReqVO; +import edu.ssadmin.system.convert.permission.MenuConvert; +import edu.ssadmin.system.dataobject.permission.MenuDO; +import edu.ssadmin.system.enums.permission.MenuTypeEnum; +import edu.ssadmin.system.mapper.permission.MenuMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -19,7 +18,7 @@ import java.util.List; import static edu.ssadmin.common.exception.ErrorCodeConstants.*; import static edu.ssadmin.common.exception.util.ServiceExceptionUtil.exception; import static edu.ssadmin.common.utils.CollectionUtils.convertList; -import static edu.ssadmin.server.dataobject.permission.MenuDO.ID_ROOT; +import static edu.ssadmin.system.dataobject.permission.MenuDO.ID_ROOT; /** * 菜单 Service 实现 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionService.java similarity index 98% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionService.java index 101a1f2..933f1a7 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionService.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.service.permission; +package edu.ssadmin.system.service.permission; import java.util.Collection; import java.util.Set; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionServiceImpl.java similarity index 94% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionServiceImpl.java index a92e7cd..c5aaf88 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/PermissionServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/PermissionServiceImpl.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.service.permission; +package edu.ssadmin.system.service.permission; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; @@ -7,13 +7,13 @@ import cn.hutool.extra.spring.SpringUtil; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.utils.CollectionUtils; -import edu.ssadmin.server.dataobject.permission.MenuDO; -import edu.ssadmin.server.dataobject.permission.RoleDO; -import edu.ssadmin.server.dataobject.permission.RoleMenuDO; -import edu.ssadmin.server.dataobject.permission.UserRoleDO; -import edu.ssadmin.server.mapper.permission.RoleMenuMapper; -import edu.ssadmin.server.mapper.permission.UserRoleMapper; -import edu.ssadmin.server.service.user.AdminUserService; +import edu.ssadmin.system.dataobject.permission.MenuDO; +import edu.ssadmin.system.dataobject.permission.RoleDO; +import edu.ssadmin.system.dataobject.permission.RoleMenuDO; +import edu.ssadmin.system.dataobject.permission.UserRoleDO; +import edu.ssadmin.system.mapper.permission.RoleMenuMapper; +import edu.ssadmin.system.mapper.permission.UserRoleMapper; +import edu.ssadmin.system.service.user.AdminUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleService.java similarity index 81% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleService.java index 316970e..f40acd8 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleService.java @@ -1,13 +1,13 @@ -package edu.ssadmin.server.service.permission; +package edu.ssadmin.system.service.permission; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; -import edu.ssadmin.server.dataobject.permission.RoleDO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleListReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.system.dataobject.permission.RoleDO; import javax.validation.Valid; import java.util.Collection; import java.util.List; -import java.util.Set; /** * 角色 Service 接口 @@ -79,6 +79,7 @@ public interface RoleService { */ List getRoleList(); + List getRoleList01(RoleListReqVO reqVO); /** * 判断角色编号数组中,是否有管理员 * @@ -86,4 +87,6 @@ public interface RoleService { * @return 是否有管理员 */ boolean hasAnySuperAdmin(Collection ids); + + } \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleServiceImpl.java similarity index 89% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleServiceImpl.java index 7a32e01..d28a15b 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/permission/RoleServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/permission/RoleServiceImpl.java @@ -1,14 +1,15 @@ -package edu.ssadmin.server.service.permission; +package edu.ssadmin.system.service.permission; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.extra.spring.SpringUtil; import edu.ssadmin.common.enums.CommonStatusEnum; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleCreateReqVO; -import edu.ssadmin.server.controller.admin.permission.vo.role.RoleUpdateReqVO; -import edu.ssadmin.server.convert.permission.RoleConvert; -import edu.ssadmin.server.dataobject.permission.RoleDO; -import edu.ssadmin.server.enums.permission.RoleCodeEnum; -import edu.ssadmin.server.mapper.permission.RoleMapper; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleCreateReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleListReqVO; +import edu.ssadmin.system.controller.admin.permission.vo.role.RoleUpdateReqVO; +import edu.ssadmin.system.convert.permission.RoleConvert; +import edu.ssadmin.system.dataobject.permission.RoleDO; +import edu.ssadmin.system.enums.permission.RoleCodeEnum; +import edu.ssadmin.system.mapper.permission.RoleMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -151,6 +152,10 @@ public class RoleServiceImpl implements RoleService { return roleMapper.selectList(); } + @Override + public List getRoleList01(RoleListReqVO reqVO){ + return roleMapper.selectList01(reqVO); + } @Override public boolean hasAnySuperAdmin(Collection ids) { if (CollectionUtil.isEmpty(ids)) { diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenService.java similarity index 43% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenService.java index 59ad76a..10d29a5 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenService.java @@ -1,10 +1,10 @@ -package edu.ssadmin.security.service; +package edu.ssadmin.system.service.token; -import edu.ssadmin.common.pojo.AccessToken; +import edu.ssadmin.system.dataobject.AccessToken; public interface TokenService { - AccessToken createAccessToken(String username,Long userId); + AccessToken createAccessToken(String username, Long userId); boolean isValidated(String token); String getUsernameFromToken(String token); } diff --git a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenServiceImpl.java similarity index 88% rename from ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenServiceImpl.java index 7e03796..17eb1a5 100644 --- a/ssadmin-server/ssadmin-module-security/src/main/java/edu/ssadmin/security/service/TokenServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/token/TokenServiceImpl.java @@ -1,7 +1,7 @@ -package edu.ssadmin.security.service; +package edu.ssadmin.system.service.token; -import edu.ssadmin.common.pojo.AccessToken; import edu.ssadmin.security.util.JwtTokenUtil; +import edu.ssadmin.system.dataobject.AccessToken; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -14,7 +14,7 @@ public class TokenServiceImpl implements TokenService { @Resource private JwtTokenUtil jwtTokenUtil; @Override - public AccessToken createAccessToken(String username,Long userId) { + public AccessToken createAccessToken(String username, Long userId) { // 生成访问令牌和刷新令牌 String accessToken = jwtTokenUtil.generateAccessToken(username); String refreshToken = jwtTokenUtil.generateRefreshToken(username); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserService.java similarity index 86% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserService.java index 2a4823a..5e65bac 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserService.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserService.java @@ -1,11 +1,10 @@ -package edu.ssadmin.server.service.user; - -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdatePasswordReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; -import edu.ssadmin.server.dataobject.user.AdminUserDO; +package edu.ssadmin.system.service.user; + +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.system.controller.admin.user.vo.user.UserCreateReqVO; +import edu.ssadmin.system.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; import javax.validation.Valid; import java.io.InputStream; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserServiceImpl.java similarity index 92% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserServiceImpl.java index 9da9d22..0561830 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/service/user/AdminUserServiceImpl.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/service/user/AdminUserServiceImpl.java @@ -1,19 +1,18 @@ -package edu.ssadmin.server.service.user; +package edu.ssadmin.system.service.user; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import edu.ssadmin.common.enums.CommonStatusEnum; import edu.ssadmin.common.utils.CollectionUtils; import edu.ssadmin.security.util.PasswordUtil; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; -import edu.ssadmin.server.controller.admin.user.vo.profile.UserProfileUpdateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserCreateReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdatePasswordReqVO; -import edu.ssadmin.server.controller.admin.user.vo.user.UserUpdateReqVO; -import edu.ssadmin.server.convert.user.UserConvert; -import edu.ssadmin.server.dataobject.user.AdminUserDO; -import edu.ssadmin.server.mapper.user.AdminUserMapper; -import edu.ssadmin.server.service.permission.PermissionService; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; +import edu.ssadmin.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; +import edu.ssadmin.system.controller.admin.user.vo.user.UserCreateReqVO; +import edu.ssadmin.system.controller.admin.user.vo.user.UserUpdateReqVO; +import edu.ssadmin.system.convert.user.UserConvert; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.mapper.user.AdminUserMapper; +import edu.ssadmin.system.service.permission.PermissionService; import org.springframework.stereotype.Service; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.transaction.annotation.Transactional; @@ -23,7 +22,6 @@ import javax.validation.Valid; import java.io.InputStream; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/utils/AdminLoginInfo.java similarity index 96% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/utils/AdminLoginInfo.java index 84167ed..be0b34c 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/utils/AdminLoginInfo.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/java/edu/ssadmin/system/utils/AdminLoginInfo.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server.utils; +package edu.ssadmin.system.utils; import edu.ssadmin.security.util.JwtTokenUtil; import org.springframework.beans.factory.annotation.Autowired; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictDataMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictDataMapper.xml new file mode 100644 index 0000000..31e1a8c --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictDataMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_dict_data (label,value,status,remark) VALUES + (#{label}, #{value}, #{status},#{remark}) + + + UPDATE system_dict_data + + label = #{label}, + value = #{value}, + sort = #{sort}, + parent_id = #{dictType}, + status = #{status}, + remark = #{remark}, + + + + WHERE id = #{id} + + + UPDATE system_dict_data + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + + diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictTypeMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictTypeMapper.xml new file mode 100644 index 0000000..cf1af07 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/dict/DictTypeMapper.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO system_dict_type (name,type,status,remark) VALUES + (#{name}, #{type}, #{status},#{remark}) + + + UPDATE system_dict_type + + name = #{name}, + type = #{type}, + status = #{status}, + remark = #{remark}, + + + + WHERE id = #{id} + + + UPDATE system_dict_type + SET deleted = 1 + WHERE id = #{id} AND deleted = 0 + + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/MenuMapper.xml similarity index 93% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/MenuMapper.xml index 0c79918..0b3edda 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/MenuMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/MenuMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -43,7 +43,7 @@ FROM system_menu WHERE deleted = 0 - SELECT * FROM system_menu @@ -66,11 +66,11 @@ SELECT * FROM system_menu WHERE permission = #{permission} - + INSERT INTO system_menu (name, permission,type,component,component_name,sort,parent_id,status,remark,path,icon,visible,keep_alive,always_show) VALUES (#{name}, #{permission}, #{type},#{component},#{componentName},#{sort},#{parentId},#{status},#{remark},#{path},#{icon},#{visible},#{keepAlive},#{alwaysShow}) - + UPDATE system_menu name = #{name}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMapper.xml similarity index 75% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMapper.xml index 8daec53..5e46726 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -41,11 +41,28 @@ - + + + INSERT INTO system_role (name, code,sort,status,remark) VALUES (#{name}, #{code},#{sort},#{status},#{remark}) - + UPDATE system_role name = #{name}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMenuMapper.xml similarity index 94% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMenuMapper.xml index 1f6b35e..40fd970 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/RoleMenuMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/RoleMenuMapper.xml @@ -2,10 +2,10 @@ - + - + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/UserRoleMapper.xml similarity index 94% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/UserRoleMapper.xml index 9107079..96bcda8 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/UserRoleMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/permission/UserRoleMapper.xml @@ -2,10 +2,10 @@ - + - + diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/user/AdminUserMapper.xml similarity index 93% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/user/AdminUserMapper.xml index 1a04f61..27959f2 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/mappers/AdminUserMapper.xml +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/main/resources/edu/ssadmin/system/mapper/user/AdminUserMapper.xml @@ -2,10 +2,10 @@ - + - + @@ -58,11 +58,11 @@ - + INSERT INTO system_users (id, username, password, nickname,avatar,email,mobile,status,remark,login_ip,login_date) VALUES (#{id}, #{username}, #{password}, #{nickname},#{avatar},#{email},#{mobile},#{status},#{remark},#{loginIp},#{loginDate}) - + UPDATE system_users username = #{username}, diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/ServerApplicationTests.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/ServerApplicationTests.java similarity index 86% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/ServerApplicationTests.java rename to ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/ServerApplicationTests.java index 0c99ce0..f5bb9a1 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/ServerApplicationTests.java +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/ServerApplicationTests.java @@ -1,4 +1,4 @@ -package edu.ssadmin.server; +package edu.ssadmin.system; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/service/auth/AdminAuthServiceImplTest.java b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/service/auth/AdminAuthServiceImplTest.java new file mode 100644 index 0000000..bf8b6f1 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-module-system/ssadmin-module-system-biz/src/test/java/edu/ssadmin/system/service/auth/AdminAuthServiceImplTest.java @@ -0,0 +1,284 @@ +package edu.ssadmin.system.service.auth; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.ReflectUtil; +import edu.ssadmin.common.enums.CommonStatusEnum; +import edu.ssadmin.system.controller.admin.auth.vo.AuthLoginReqVO; +import edu.ssadmin.system.dataobject.user.AdminUserDO; +import edu.ssadmin.system.service.user.AdminUserService; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; +import javax.validation.Validator; + +import java.util.function.Consumer; + +import static cn.hutool.core.util.RandomUtil.randomEle; +import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS; +import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_USER_DISABLED; +import static edu.ssadmin.framework.test.core.util.AssertUtils.assertPojoEquals; +import static edu.ssadmin.framework.test.core.util.AssertUtils.assertServiceException; +import static edu.ssadmin.framework.test.core.util.RandomUtils.randomPojo; +import static edu.ssadmin.framework.test.core.util.RandomUtils.randomString; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@Import(AdminAuthServiceImpl.class) +public class AdminAuthServiceImplTest { + + @Resource + private AdminAuthServiceImpl authService; + + @MockBean + private AdminUserService userService; + @MockBean + private Validator validator; + +// @BeforeEach +// public void setUp() { +// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +// // 注入一个 Validator 对象 +// ReflectUtil.setFieldValue(authService, "validator", +// Validation.buildDefaultValidatorFactory().getValidator()); +// } + + @Test + public void testAuthenticate_success() { + // 准备参数 + String username = RandomUtil.randomString(10); + String password = RandomUtil.randomString(10); + System.out.println(username); + System.out.println(password); + // mock user 数据 +// 单独pojo对象的随机生成和校验函数的实现 链式调用的实现 +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) +// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); + AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) + .andThen(o -> o.setPassword(password)) + .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); + // System.out.println(user.getUsername()); + when(userService.getUserByUsername(eq(username))).thenReturn(user); + // mock password 匹配 + when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); + + // 调用 + AdminUserDO loginUser = authService.authenticate(username, password); + // 校验 + assertPojoEquals(user, loginUser); + } + + @Test + public void testAuthenticate_userNotFound() { + // 准备参数 + String username = randomString(); + String password = randomString(); + + // 调用, 并断言异常 + assertServiceException(() -> authService.authenticate(username, password), + AUTH_LOGIN_BAD_CREDENTIALS); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +// && o.getUserId() == null) +// ); + } + + @Test + public void testAuthenticate_badCredentials() { + // 准备参数 + String username = randomString(); + String password = randomString(); + // mock user 数据 + AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) + .andThen(o -> o.setPassword(password)) + .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); + when(userService.getUserByUsername(eq(username))).thenReturn(user); + + // 调用, 并断言异常 + assertServiceException(() -> authService.authenticate(username, password), + AUTH_LOGIN_BAD_CREDENTIALS); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); + } + + @Test + public void testAuthenticate_userDisabled() { + // 准备参数 + String username = randomString(); + String password = randomString(); + // mock user 数据 + AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) + .andThen(o -> o.setPassword(password)) + .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); + when(userService.getUserByUsername(eq(username))).thenReturn(user); + // mock password 匹配 + when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); + + // 调用, 并断言异常 + assertServiceException(() -> authService.authenticate(username, password), + AUTH_LOGIN_USER_DISABLED); +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) +// && o.getUserId().equals(user.getId())) +// ); + } + + @Test + public void testLogin_success() { + // 准备参数 + AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, ((Consumer)o -> + o.setUsername("test_username")).andThen(o -> o.setPassword("test_password"))); + + // mock 验证码正确 + ReflectUtil.setFieldValue(authService, "captchaEnable", false); + // mock user 数据 + AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setId(1L)) + .andThen(o->o.setUsername("test_username")) + .andThen(o -> o.setPassword("test_password")) + .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); +// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") +// .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); + when(userService.getUserByUsername(eq("test_username"))).thenReturn(user); + // mock password 匹配 + when(userService.isPasswordMatch(eq("test_password"), eq(user.getPassword()))).thenReturn(true); +// // mock 缓存登录用户到 Redis +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) +// .thenReturn(accessTokenDO); + + // 调用,并校验 +// AuthLoginRespVO loginRespVO = authService.login(reqVO); +// assertPojoEquals(accessTokenDO, loginRespVO); + // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) +// && o.getUserId().equals(user.getId())) +// ); +// verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( +// user.getId(), UserTypeEnum.ADMIN.getValue(), +// reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); + } + +// @Test +// public void testValidateCaptcha_successWithEnable() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// // mock 验证通过 +// when(captchaService.verification(argThat(captchaVO -> { +// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +// return true; +// }))).thenReturn(ResponseModel.success()); +// +// // 调用,无需断言 +// authService.validateCaptcha(reqVO); +// } +// +// @Test +// public void testValidateCaptcha_successWithDisable() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码关闭 +// ReflectUtil.setFieldValue(authService, "captchaEnable", false); +// +// // 调用,无需断言 +// authService.validateCaptcha(reqVO); +// } +// +// @Test +// public void testValidateCaptcha_constraintViolationException() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class).setCaptchaVerification(null); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// +// // 调用,并断言异常 +// assertThrows(ConstraintViolationException.class, () -> authService.validateCaptcha(reqVO), +// "验证码不能为空"); +// } +// +// +// @Test +// public void testCaptcha_fail() { +// // 准备参数 +// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); +// +// // mock 验证码打开 +// ReflectUtil.setFieldValue(authService, "captchaEnable", true); +// // mock 验证通过 +// when(captchaService.verification(argThat(captchaVO -> { +// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); +// return true; +// }))).thenReturn(ResponseModel.errorMsg("就是不对")); +// +// // 调用, 并断言异常 +// assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是不对"); +// // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) +// && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) +// ); +// } +// +// @Test +// public void testRefreshToken() { +// // 准备参数 +// String refreshToken = randomString(); +// // mock 方法 +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); +// when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) +// .thenReturn(accessTokenDO); +// +// // 调用 +// AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); +// // 断言 +// assertPojoEquals(accessTokenDO, loginRespVO); +// } +// +// @Test +// public void testLogout_success() { +// // 准备参数 +// String token = randomString(); +// // mock +// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) +// .setUserType(UserTypeEnum.ADMIN.getValue())); +// when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); +// +// // 调用 +// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +// // 校验调用参数 +// verify(loginLogService).createLoginLog( +// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) +// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) +// ); +// // 调用,并校验 +// +// } +// +// @Test +// public void testLogout_fail() { +// // 准备参数 +// String token = randomString(); +// +// // 调用 +// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); +// // 校验调用参数 +// verify(loginLogService, never()).createLoginLog(any()); +// } + +} diff --git a/ssadmin-server/ssadmin-module-tmpl/pom.xml b/ssadmin-parent-server/ssadmin-module-tmpl/pom.xml similarity index 100% rename from ssadmin-server/ssadmin-module-tmpl/pom.xml rename to ssadmin-parent-server/ssadmin-module-tmpl/pom.xml diff --git a/ssadmin-parent-server/ssadmin-server/pom.xml b/ssadmin-parent-server/ssadmin-server/pom.xml new file mode 100644 index 0000000..a7b7515 --- /dev/null +++ b/ssadmin-parent-server/ssadmin-server/pom.xml @@ -0,0 +1,73 @@ + + + + ssadmin-parrent-server + edu.ssadmin + 1.0 + + 4.0.0 + + ssadmin-server + + + + edu.ssadmin + ssadmin-module-system-biz + 1.0 + + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + org.projectlombok + lombok + ${lombok.version} + + + org.mapstruct + mapstruct-processor + 1.5.0.Final + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + + + + + + \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java b/ssadmin-parent-server/ssadmin-server/src/main/java/edu/ssadmin/server/ServerApplication.java similarity index 82% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java rename to ssadmin-parent-server/ssadmin-server/src/main/java/edu/ssadmin/server/ServerApplication.java index aa7775a..a07cd35 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/ServerApplication.java +++ b/ssadmin-parent-server/ssadmin-server/src/main/java/edu/ssadmin/server/ServerApplication.java @@ -6,9 +6,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(scanBasePackages = "edu.ssadmin") -@ComponentScan(basePackages = {"edu.ssadmin.security","edu.ssadmin.web","edu.ssadmin.server","edu.ssadmin.application"}) +@ComponentScan(basePackages = {"edu.ssadmin.security","edu.ssadmin.web", "edu.ssadmin.system","edu.ssadmin.application"}) //@ComponentScan(basePackages = "edu.ssadmin.server.api.user") -@MapperScan({"edu.ssadmin.server.mapper","edu.ssadmin.application.mapper"}) +@MapperScan({"edu.ssadmin.system.mapper","edu.ssadmin.application.mapper"}) public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml b/ssadmin-parent-server/ssadmin-server/src/main/resources/application-dev.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/resources/application-dev.yml rename to ssadmin-parent-server/ssadmin-server/src/main/resources/application-dev.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-local.yml b/ssadmin-parent-server/ssadmin-server/src/main/resources/application-local.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-local.yml rename to ssadmin-parent-server/ssadmin-server/src/main/resources/application-local.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-prod.yml b/ssadmin-parent-server/ssadmin-server/src/main/resources/application-prod.yml similarity index 100% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application-prod.yml rename to ssadmin-parent-server/ssadmin-server/src/main/resources/application-prod.yml diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application.yml b/ssadmin-parent-server/ssadmin-server/src/main/resources/application.yml similarity index 94% rename from ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application.yml rename to ssadmin-parent-server/ssadmin-server/src/main/resources/application.yml index 41205f4..7acccae 100644 --- a/ssadmin-server/ssadmin-system/ssadmin-system-api/src/main/resources/application.yml +++ b/ssadmin-parent-server/ssadmin-server/src/main/resources/application.yml @@ -32,9 +32,6 @@ spring: #允许出现单引号 allow_single_quotes: true -mybatis: - mapper-locations: classpath:mappers/*.xml - ssadmin: info: version: 1.0.0 diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java deleted file mode 100644 index 03f9365..0000000 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/main/java/edu/ssadmin/server/controller/admin/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package edu.ssadmin.server.controller.admin; \ No newline at end of file diff --git a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java b/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java deleted file mode 100644 index 1043665..0000000 --- a/ssadmin-server/ssadmin-system/ssadmin-system-biz/src/test/java/edu/ssadmin/server/service/auth/AdminAuthServiceImplTest.java +++ /dev/null @@ -1,288 +0,0 @@ -//package edu.ssadmin.server.service.auth; -// -//import cn.hutool.core.util.RandomUtil; -//import cn.hutool.core.util.ReflectUtil; -//import edu.ssadmin.common.enums.CommonStatusEnum; -//import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginReqVO; -//import edu.ssadmin.server.controller.admin.auth.vo.AuthLoginRespVO; -//import edu.ssadmin.server.dataobject.user.AdminUserDO; -//import edu.ssadmin.server.service.user.AdminUserService; -//import org.junit.jupiter.api.BeforeEach; -//import org.junit.jupiter.api.Test; -//import org.springframework.boot.test.mock.mockito.MockBean; -//import org.springframework.context.annotation.Import; -// -//import javax.annotation.Resource; -//import javax.validation.ConstraintViolationException; -//import javax.validation.Validation; -//import javax.validation.Validator; -// -//import java.util.function.Consumer; -// -//import static cn.hutool.core.util.RandomUtil.randomEle; -//import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_BAD_CREDENTIALS; -//import static edu.ssadmin.common.exception.ErrorCodeConstants.AUTH_LOGIN_USER_DISABLED; -//import static edu.ssadmin.framework.test.core.util.AssertUtils.assertPojoEquals; -//import static edu.ssadmin.framework.test.core.util.AssertUtils.assertServiceException; -//import static edu.ssadmin.framework.test.core.util.RandomUtils.randomPojo; -//import static edu.ssadmin.framework.test.core.util.RandomUtils.randomString; -//import static org.junit.jupiter.api.Assertions.assertEquals; -//import static org.junit.jupiter.api.Assertions.assertThrows; -//import static org.mockito.ArgumentMatchers.*; -//import static org.mockito.ArgumentMatchers.any; -//import static org.mockito.Mockito.*; -// -//@Import(AdminAuthServiceImpl.class) -//public class AdminAuthServiceImplTest { -// -// @Resource -// private AdminAuthServiceImpl authService; -// -// @MockBean -// private AdminUserService userService; -// @MockBean -// private Validator validator; -// -//// @BeforeEach -//// public void setUp() { -//// ReflectUtil.setFieldValue(authService, "captchaEnable", false); -//// // 注入一个 Validator 对象 -//// ReflectUtil.setFieldValue(authService, "validator", -//// Validation.buildDefaultValidatorFactory().getValidator()); -//// } -// -// @Test -// public void testAuthenticate_success() { -// // 准备参数 -// String username = RandomUtil.randomString(10); -// String password = RandomUtil.randomString(10); -// System.out.println(username); -// System.out.println(password); -// // mock user 数据 -// //单独pojo对象的随机生成和校验函数的实现 链式调用的实现 -//// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setUsername(username) -//// .setPassword(password).setStatus(CommonStatusEnum.ENABLE.getStatus())); -// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) -// .andThen(o -> o.setPassword(password)) -// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); -// // System.out.println(user.getUsername()); -// when(userService.getUserByUsername(eq(username))).thenReturn(user); -// // mock password 匹配 -// when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); -// -// // 调用 -// AdminUserDO loginUser = authService.authenticate(username, password); -// // 校验 -// assertPojoEquals(user, loginUser); -// } -// -// @Test -// public void testAuthenticate_userNotFound() { -// // 准备参数 -// String username = randomString(); -// String password = randomString(); -// -// // 调用, 并断言异常 -// assertServiceException(() -> authService.authenticate(username, password), -// AUTH_LOGIN_BAD_CREDENTIALS); -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -//// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) -//// && o.getUserId() == null) -//// ); -// } -// -// @Test -// public void testAuthenticate_badCredentials() { -// // 准备参数 -// String username = randomString(); -// String password = randomString(); -// // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) -// .andThen(o -> o.setPassword(password)) -// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); -// when(userService.getUserByUsername(eq(username))).thenReturn(user); -// -// // 调用, 并断言异常 -// assertServiceException(() -> authService.authenticate(username, password), -// AUTH_LOGIN_BAD_CREDENTIALS); -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -//// && o.getResult().equals(LoginResultEnum.BAD_CREDENTIALS.getResult()) -//// && o.getUserId().equals(user.getId())) -//// ); -// } -// -// @Test -// public void testAuthenticate_userDisabled() { -// // 准备参数 -// String username = randomString(); -// String password = randomString(); -// // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setUsername(username)) -// .andThen(o -> o.setPassword(password)) -// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); -// when(userService.getUserByUsername(eq(username))).thenReturn(user); -// // mock password 匹配 -// when(userService.isPasswordMatch(eq(password), eq(user.getPassword()))).thenReturn(true); -// -// // 调用, 并断言异常 -// assertServiceException(() -> authService.authenticate(username, password), -// AUTH_LOGIN_USER_DISABLED); -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -//// && o.getResult().equals(LoginResultEnum.USER_DISABLED.getResult()) -//// && o.getUserId().equals(user.getId())) -//// ); -// } -// -// @Test -// public void testLogin_success() { -// // 准备参数 -// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class, ((Consumer)o -> -// o.setUsername("test_username")).andThen(o -> o.setPassword("test_password"))); -// -// // mock 验证码正确 -// ReflectUtil.setFieldValue(authService, "captchaEnable", false); -// // mock user 数据 -// AdminUserDO user = randomPojo(AdminUserDO.class, ((Consumer) o -> o.setId(1L)) -// .andThen(o->o.setUsername("test_username")) -// .andThen(o -> o.setPassword("test_password")) -// .andThen(o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()))); -//// AdminUserDO user = randomPojo(AdminUserDO.class, o -> o.setId(1L).setUsername("test_username") -//// .setPassword("test_password").setStatus(CommonStatusEnum.ENABLE.getStatus())); -// when(userService.getUserByUsername(eq("test_username"))).thenReturn(user); -// // mock password 匹配 -// when(userService.isPasswordMatch(eq("test_password"), eq(user.getPassword()))).thenReturn(true); -//// // mock 缓存登录用户到 Redis -//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -//// .setUserType(UserTypeEnum.ADMIN.getValue())); -//// when(oauth2TokenService.createAccessToken(eq(1L), eq(UserTypeEnum.ADMIN.getValue()), eq("default"), isNull())) -//// .thenReturn(accessTokenDO); -// -// // 调用,并校验 -//// AuthLoginRespVO loginRespVO = authService.login(reqVO); -//// assertPojoEquals(accessTokenDO, loginRespVO); -// // 校验调用参数 -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -//// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult()) -//// && o.getUserId().equals(user.getId())) -//// ); -//// verify(socialUserService).bindSocialUser(eq(new SocialUserBindReqDTO( -//// user.getId(), UserTypeEnum.ADMIN.getValue(), -//// reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState()))); -// } -// -//// @Test -//// public void testValidateCaptcha_successWithEnable() { -//// // 准备参数 -//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -//// -//// // mock 验证码打开 -//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -//// // mock 验证通过 -//// when(captchaService.verification(argThat(captchaVO -> { -//// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); -//// return true; -//// }))).thenReturn(ResponseModel.success()); -//// -//// // 调用,无需断言 -//// authService.validateCaptcha(reqVO); -//// } -//// -//// @Test -//// public void testValidateCaptcha_successWithDisable() { -//// // 准备参数 -//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -//// -//// // mock 验证码关闭 -//// ReflectUtil.setFieldValue(authService, "captchaEnable", false); -//// -//// // 调用,无需断言 -//// authService.validateCaptcha(reqVO); -//// } -//// -//// @Test -//// public void testValidateCaptcha_constraintViolationException() { -//// // 准备参数 -//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class).setCaptchaVerification(null); -//// -//// // mock 验证码打开 -//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -//// -//// // 调用,并断言异常 -//// assertThrows(ConstraintViolationException.class, () -> authService.validateCaptcha(reqVO), -//// "验证码不能为空"); -//// } -//// -//// -//// @Test -//// public void testCaptcha_fail() { -//// // 准备参数 -//// AuthLoginReqVO reqVO = randomPojo(AuthLoginReqVO.class); -//// -//// // mock 验证码打开 -//// ReflectUtil.setFieldValue(authService, "captchaEnable", true); -//// // mock 验证通过 -//// when(captchaService.verification(argThat(captchaVO -> { -//// assertEquals(reqVO.getCaptchaVerification(), captchaVO.getCaptchaVerification()); -//// return true; -//// }))).thenReturn(ResponseModel.errorMsg("就是不对")); -//// -//// // 调用, 并断言异常 -//// assertServiceException(() -> authService.validateCaptcha(reqVO), AUTH_LOGIN_CAPTCHA_CODE_ERROR, "就是不对"); -//// // 校验调用参数 -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGIN_USERNAME.getType()) -//// && o.getResult().equals(LoginResultEnum.CAPTCHA_CODE_ERROR.getResult())) -//// ); -//// } -//// -//// @Test -//// public void testRefreshToken() { -//// // 准备参数 -//// String refreshToken = randomString(); -//// // mock 方法 -//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class); -//// when(oauth2TokenService.refreshAccessToken(eq(refreshToken), eq("default"))) -//// .thenReturn(accessTokenDO); -//// -//// // 调用 -//// AuthLoginRespVO loginRespVO = authService.refreshToken(refreshToken); -//// // 断言 -//// assertPojoEquals(accessTokenDO, loginRespVO); -//// } -//// -//// @Test -//// public void testLogout_success() { -//// // 准备参数 -//// String token = randomString(); -//// // mock -//// OAuth2AccessTokenDO accessTokenDO = randomPojo(OAuth2AccessTokenDO.class, o -> o.setUserId(1L) -//// .setUserType(UserTypeEnum.ADMIN.getValue())); -//// when(oauth2TokenService.removeAccessToken(eq(token))).thenReturn(accessTokenDO); -//// -//// // 调用 -//// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); -//// // 校验调用参数 -//// verify(loginLogService).createLoginLog( -//// argThat(o -> o.getLogType().equals(LoginLogTypeEnum.LOGOUT_SELF.getType()) -//// && o.getResult().equals(LoginResultEnum.SUCCESS.getResult())) -//// ); -//// // 调用,并校验 -//// -//// } -//// -//// @Test -//// public void testLogout_fail() { -//// // 准备参数 -//// String token = randomString(); -//// -//// // 调用 -//// authService.logout(token, LoginLogTypeEnum.LOGOUT_SELF.getType()); -//// // 校验调用参数 -//// verify(loginLogService, never()).createLoginLog(any()); -//// } -// -//} diff --git a/ssadmin-web/.browserslistrc b/ssadmin-web/.browserslistrc deleted file mode 100644 index 214388f..0000000 --- a/ssadmin-web/.browserslistrc +++ /dev/null @@ -1,3 +0,0 @@ -> 1% -last 2 versions -not dead diff --git a/ssadmin-web/.env.development b/ssadmin-web/.env.development deleted file mode 100644 index 232a9e3..0000000 --- a/ssadmin-web/.env.development +++ /dev/null @@ -1,11 +0,0 @@ -# 当你运行 npm run serve (或 yarn serve)时, -# Vue CLI会使用 .env.development 文件中定义的环境变量。 - - -ENV = 'development' -# 那么当你运行在开发模式下(例如,使用 npm run serve 命令)时, -# 该变量会被加载并可在代码中使用。例如 if (process.env.ENV === 'development') - -# 接口地址 -VUE_APP_BASE_API = 'http://localhost:28080' -VUE_APP_PATH = '' \ No newline at end of file diff --git a/ssadmin-web/.env.mock b/ssadmin-web/.env.mock deleted file mode 100644 index c0c8637..0000000 --- a/ssadmin-web/.env.mock +++ /dev/null @@ -1,8 +0,0 @@ -# 当启动服务器时,使用 --mode local 标志 -# 会加载 local 模式的环境变量文件 - -ENV = 'development' - -# 接口地址 -VUE_APP_BASE_API = 'https://mock.apifox.cn' -VUE_APP_PATH = '/m1/2428381-0-default/admin-api' \ No newline at end of file diff --git a/ssadmin-web/.env.production b/ssadmin-web/.env.production deleted file mode 100644 index 38fe173..0000000 --- a/ssadmin-web/.env.production +++ /dev/null @@ -1,12 +0,0 @@ -# 当你运行 npm run build (或 yarn build)时, -# Vue CLI会使用 会使用 .env.production 文件中定义的环境变量。 - -ENV = 'production' -# 将 ENV = production 设置为环境变量 -# 通常是为了在代码中区分当前是在什么样的环境下运行的, -# 从而可以根据不同的环境做不同的操作。 - -# 如果后端使用了 Nginx 反向代理,此处需要改为 '/' -# VUE_APP_BASE_API = 'http://ssadmin.hello1023.com' -VUE_APP_BASE_API = / -VUE_APP_PATH = '' \ No newline at end of file diff --git a/ssadmin-web/.npmrc b/ssadmin-web/.npmrc deleted file mode 100644 index 13df002..0000000 --- a/ssadmin-web/.npmrc +++ /dev/null @@ -1,4 +0,0 @@ -phantomjs_cdnurl=http://cnpmjs.org/downloads -chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver -sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ -registry=https://registry.npmmirror.com \ No newline at end of file diff --git a/ssadmin-web/Dockerfile b/ssadmin-web/Dockerfile deleted file mode 100644 index 35c56e2..0000000 --- a/ssadmin-web/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM node:16-alpine as build-stage - -WORKDIR /admim - -COPY .npmrc package.json yarn.lock ./ -RUN yarn install --frozen-lockfile - -COPY . . -ARG NODE_ENV="" -RUN env ${NODE_ENV} yarn build:prod - -## -- nginx -- -FROM nginx:alpine - -ENV TZ=Asia/Shanghai - -COPY ./nginx.conf /etc/nginx/conf.d/default.conf -COPY --from=build-stage /admim/dist /usr/share/nginx/html - -EXPOSE 80 \ No newline at end of file diff --git a/ssadmin-web/README.md b/ssadmin-web/README.md deleted file mode 100644 index f94dac7..0000000 --- a/ssadmin-web/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# ssadmin-web - -## Project setup - -```bash -yarn install -``` - -### Compiles and hot-reloads for development - -```bash -yarn serve -``` - -### Compiles and minifies for production - -```bash -yarn build -``` - -### Customize configuration - -See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/ssadmin-web/babel.config.js b/ssadmin-web/babel.config.js deleted file mode 100644 index e955840..0000000 --- a/ssadmin-web/babel.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset' - ] -} diff --git a/ssadmin-web/jsconfig.json b/ssadmin-web/jsconfig.json deleted file mode 100644 index 4aafc5f..0000000 --- a/ssadmin-web/jsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "module": "esnext", - "baseUrl": "./", - "moduleResolution": "node", - "paths": { - "@/*": [ - "src/*" - ] - }, - "lib": [ - "esnext", - "dom", - "dom.iterable", - "scripthost" - ] - } -} diff --git a/ssadmin-web/nginx.conf b/ssadmin-web/nginx.conf deleted file mode 100644 index 83be2a7..0000000 --- a/ssadmin-web/nginx.conf +++ /dev/null @@ -1,26 +0,0 @@ -server { - listen 80 default_server; - server_name _; ## 重要!!!修改成你的外网 IP/域名 - - gzip on; - gzip_min_length 1k; # 设置允许压缩的页面最小字节数 - gzip_buffers 4 16k; # 用来存储 gzip 的压缩结果 - gzip_http_version 1.1; # 识别 HTTP 协议版本 - gzip_comp_level 2; # 设置 gzip 的压缩比 1-9。1 压缩比最小但最快,而 9 相反 - gzip_types text/plain application/x-javascript text/css application/xml application/javascript; # 指定压缩类型 - gzip_proxied any; # 无论后端服务器的 headers 头返回什么信息,都无条件启用压缩 - - location / { ## 前端项目 - root /usr/share/nginx/html/; - index index.html index.htm; - try_files $uri $uri/ /index.html; - } - - location /api/ { ## 后端项目 - 管理后台 - proxy_pass http://ssadmin-server:28080/admin-api/; ## 重要!!!proxy_pass 需要设置为后端项目所在服务器的 IP - proxy_set_header Host $http_host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header REMOTE-HOST $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } -} diff --git a/ssadmin-web/package.json b/ssadmin-web/package.json deleted file mode 100644 index afbfee5..0000000 --- a/ssadmin-web/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "ssadmin-web", - "version": "0.1.0", - "private": true, - "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "build:prod": "vue-cli-service build", - "local": "vue-cli-service serve --mode local", - "mock": "vue-cli-service serve --mode mock", - "clean": "rimraf node_modules" - }, - "dependencies": { - "axios": "^1.6.0", - "core-js": "^3.8.3", - "element-ui": "^2.15.14", - "vue": "^2.6.14", - "vue-router": "^3.5.1", - "vuex": "^3.6.2" - }, - "devDependencies": { - "@vue/cli-plugin-babel": "~5.0.0", - "@vue/cli-plugin-router": "~5.0.0", - "@vue/cli-plugin-vuex": "~5.0.0", - "@vue/cli-service": "~5.0.0", - "sass": "^1.32.7", - "sass-loader": "^12.0.0", - "vue-template-compiler": "^2.6.14", - "webpack": "^5.0.0" - } -} diff --git a/ssadmin-web/public/favicon.ico b/ssadmin-web/public/favicon.ico deleted file mode 100644 index df36fcfb72584e00488330b560ebcf34a41c64c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/ssadmin-web/src/api/system/role.js b/ssadmin-web/src/api/system/role.js deleted file mode 100644 index 1df809a..0000000 --- a/ssadmin-web/src/api/system/role.js +++ /dev/null @@ -1,75 +0,0 @@ -import request from '@/utils/request' - -// 查询角色列表 -export function listRole(query) { - return request({ - url: '/system/role/page', - method: 'get', - params: query - }) -} - -// 查询角色(精简)列表 -export function listSimpleRoles() { - return request({ - url: '/system/role/list-all-simple', - method: 'get' - }) -} - -// 查询角色详细 -export function getRole(roleId) { - return request({ - url: '/system/role/get?id=' + roleId, - method: 'get' - }) -} - -// 新增角色 -export function addRole(data) { - return request({ - url: '/system/role/create', - method: 'post', - data: data - }) -} - -// 修改角色 -export function updateRole(data) { - return request({ - url: '/system/role/update', - method: 'put', - data: data - }) -} - -// 角色状态修改 -export function changeRoleStatus(id, status) { - const data = { - id, - status - } - return request({ - url: '/system/role/update-status', - method: 'put', - data: data - }) -} - -// 删除角色 -export function delRole(roleId) { - return request({ - url: '/system/role/delete?id=' + roleId, - method: 'delete' - }) -} - -// 导出角色 -export function exportRole(query) { - return request({ - url: '/system/role/export', - method: 'get', - params: query, - responseType: 'blob' - }) -} diff --git a/ssadmin-web/src/assets/logo.png b/ssadmin-web/src/assets/logo.png deleted file mode 100644 index f3d2503fc2a44b5053b0837ebea6e87a2d339a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 zcmaKRcUV(fvo}bjDT-7nLI_nlK}sT_69H+`qzVWDA|yaU?}j417wLi^B1KB1SLsC& zL0ag7$U(XW5YR7p&Ux?sP$d4lvMt8C^+TcQu4F zQqv!UF!I+kw)c0jhd6+g6oCr9P?7)?!qX1ui*iL{p}sKCAGuJ{{W)0z1pLF|=>h}& zt(2Lr0Z`2ig8<5i%Zk}cO5Fm=LByqGWaS`oqChZdEFmc`0hSb#gg|Aap^{+WKOYcj zHjINK)KDG%&s?Mt4CL(T=?;~U@bU2x_mLKN!#GJuK_CzbNw5SMEJorG!}_5;?R>@1 zSl)jns3WlU7^J%=(hUtfmuUCU&C3%8B5C^f5>W2Cy8jW3#{Od{lF1}|?c61##3dzA zsPlFG;l_FzBK}8>|H_Ru_H#!_7$UH4UKo3lKOA}g1(R&|e@}GINYVzX?q=_WLZCgh z)L|eJMce`D0EIwgRaNETDsr+?vQknSGAi=7H00r`QnI%oQnFxm`G2umXso9l+8*&Q z7WqF|$p49js$mdzo^BXpH#gURy=UO;=IMrYc5?@+sR4y_?d*~0^YP7d+y0{}0)zBM zIKVM(DBvICK#~7N0a+PY6)7;u=dutmNqK3AlsrUU9U`d;msiucB_|8|2kY=(7XA;G zwDA8AR)VCA#JOkxm#6oHNS^YVuOU;8p$N)2{`;oF|rQ?B~K$%rHDxXs+_G zF5|-uqHZvSzq}L;5Kcy_P+x0${33}Ofb6+TX&=y;;PkEOpz%+_bCw_{<&~ zeLV|!bP%l1qxywfVr9Z9JI+++EO^x>ZuCK);=$VIG1`kxK8F2M8AdC$iOe3cj1fo(ce4l-9 z7*zKy3={MixvUk=enQE;ED~7tv%qh&3lR<0m??@w{ILF|e#QOyPkFYK!&Up7xWNtL zOW%1QMC<3o;G9_S1;NkPB6bqbCOjeztEc6TsBM<(q9((JKiH{01+Ud=uw9B@{;(JJ z-DxI2*{pMq`q1RQc;V8@gYAY44Z!%#W~M9pRxI(R?SJ7sy7em=Z5DbuDlr@*q|25V)($-f}9c#?D%dU^RS<(wz?{P zFFHtCab*!rl(~j@0(Nadvwg8q|4!}L^>d?0al6}Rrv9$0M#^&@zjbfJy_n!%mVHK4 z6pLRIQ^Uq~dnyy$`ay51Us6WaP%&O;@49m&{G3z7xV3dLtt1VTOMYl3UW~Rm{Eq4m zF?Zl_v;?7EFx1_+#WFUXxcK78IV)FO>42@cm@}2I%pVbZqQ}3;p;sDIm&knay03a^ zn$5}Q$G!@fTwD$e(x-~aWP0h+4NRz$KlnO_H2c< z(XX#lPuW_%H#Q+c&(nRyX1-IadKR-%$4FYC0fsCmL9ky3 zKpxyjd^JFR+vg2!=HWf}2Z?@Td`0EG`kU?{8zKrvtsm)|7>pPk9nu@2^z96aU2<#` z2QhvH5w&V;wER?mopu+nqu*n8p~(%QkwSs&*0eJwa zMXR05`OSFpfyRb!Y_+H@O%Y z0=K^y6B8Gcbl?SA)qMP3Z+=C(?8zL@=74R=EVnE?vY!1BQy2@q*RUgRx4yJ$k}MnL zs!?74QciNb-LcG*&o<9=DSL>1n}ZNd)w1z3-0Pd^4ED1{qd=9|!!N?xnXjM!EuylY z5=!H>&hSofh8V?Jofyd!h`xDI1fYAuV(sZwwN~{$a}MX^=+0TH*SFp$vyxmUv7C*W zv^3Gl0+eTFgBi3FVD;$nhcp)ka*4gSskYIqQ&+M}xP9yLAkWzBI^I%zR^l1e?bW_6 zIn{mo{dD=)9@V?s^fa55jh78rP*Ze<3`tRCN4*mpO$@7a^*2B*7N_|A(Ve2VB|)_o z$=#_=aBkhe(ifX}MLT()@5?OV+~7cXC3r!%{QJxriXo9I%*3q4KT4Xxzyd{ z9;_%=W%q!Vw$Z7F3lUnY+1HZ*lO;4;VR2+i4+D(m#01OYq|L_fbnT;KN<^dkkCwtd zF7n+O7KvAw8c`JUh6LmeIrk4`F3o|AagKSMK3))_5Cv~y2Bb2!Ibg9BO7Vkz?pAYX zoI=B}+$R22&IL`NCYUYjrdhwjnMx_v=-Qcx-jmtN>!Zqf|n1^SWrHy zK|MwJ?Z#^>)rfT5YSY{qjZ&`Fjd;^vv&gF-Yj6$9-Dy$<6zeP4s+78gS2|t%Z309b z0^fp~ue_}i`U9j!<|qF92_3oB09NqgAoehQ`)<)dSfKoJl_A6Ec#*Mx9Cpd-p#$Ez z={AM*r-bQs6*z$!*VA4|QE7bf@-4vb?Q+pPKLkY2{yKsw{&udv_2v8{Dbd zm~8VAv!G~s)`O3|Q6vFUV%8%+?ZSVUa(;fhPNg#vab@J*9XE4#D%)$UU-T5`fwjz! z6&gA^`OGu6aUk{l*h9eB?opVdrHK>Q@U>&JQ_2pR%}TyOXGq_6s56_`U(WoOaAb+K zXQr#6H}>a-GYs9^bGP2Y&hSP5gEtW+GVC4=wy0wQk=~%CSXj=GH6q z-T#s!BV`xZVxm{~jr_ezYRpqqIcXC=Oq`b{lu`Rt(IYr4B91hhVC?yg{ol4WUr3v9 zOAk2LG>CIECZ-WIs0$N}F#eoIUEtZudc7DPYIjzGqDLWk_A4#(LgacooD z2K4IWs@N`Bddm-{%oy}!k0^i6Yh)uJ1S*90>|bm3TOZxcV|ywHUb(+CeX-o1|LTZM zwU>dY3R&U)T(}5#Neh?-CWT~@{6Ke@sI)uSuzoah8COy)w)B)aslJmp`WUcjdia-0 zl2Y}&L~XfA`uYQboAJ1;J{XLhYjH){cObH3FDva+^8ioOQy%Z=xyjGLmWMrzfFoH; zEi3AG`_v+%)&lDJE;iJWJDI@-X9K5O)LD~j*PBe(wu+|%ar~C+LK1+-+lK=t# z+Xc+J7qp~5q=B~rD!x78)?1+KUIbYr^5rcl&tB-cTtj+e%{gpZZ4G~6r15+d|J(ky zjg@@UzMW0k9@S#W(1H{u;Nq(7llJbq;;4t$awM;l&(2s+$l!Ay9^Ge|34CVhr7|BG z?dAR83smef^frq9V(OH+a+ki#q&-7TkWfFM=5bsGbU(8mC;>QTCWL5ydz9s6k@?+V zcjiH`VI=59P-(-DWXZ~5DH>B^_H~;4$)KUhnmGo*G!Tq8^LjfUDO)lASN*=#AY_yS zqW9UX(VOCO&p@kHdUUgsBO0KhXxn1sprK5h8}+>IhX(nSXZKwlNsjk^M|RAaqmCZB zHBolOHYBas@&{PT=R+?d8pZu zUHfyucQ`(umXSW7o?HQ3H21M`ZJal+%*)SH1B1j6rxTlG3hx1IGJN^M7{$j(9V;MZ zRKybgVuxKo#XVM+?*yTy{W+XHaU5Jbt-UG33x{u(N-2wmw;zzPH&4DE103HV@ER86 z|FZEmQb|&1s5#`$4!Cm}&`^{(4V}OP$bk`}v6q6rm;P!H)W|2i^e{7lTk2W@jo_9q z*aw|U7#+g59Fv(5qI`#O-qPj#@_P>PC#I(GSp3DLv7x-dmYK=C7lPF8a)bxb=@)B1 zUZ`EqpXV2dR}B&r`uM}N(TS99ZT0UB%IN|0H%DcVO#T%L_chrgn#m6%x4KE*IMfjX zJ%4veCEqbXZ`H`F_+fELMC@wuy_ch%t*+Z+1I}wN#C+dRrf2X{1C8=yZ_%Pt6wL_~ zZ2NN-hXOT4P4n$QFO7yYHS-4wF1Xfr-meG9Pn;uK51?hfel`d38k{W)F*|gJLT2#T z<~>spMu4(mul-8Q3*pf=N4DcI)zzjqAgbE2eOT7~&f1W3VsdD44Ffe;3mJp-V@8UC z)|qnPc12o~$X-+U@L_lWqv-RtvB~%hLF($%Ew5w>^NR82qC_0FB z)=hP1-OEx?lLi#jnLzH}a;Nvr@JDO-zQWd}#k^an$Kwml;MrD&)sC5b`s0ZkVyPkb zt}-jOq^%_9>YZe7Y}PhW{a)c39G`kg(P4@kxjcYfgB4XOOcmezdUI7j-!gs7oAo2o zx(Ph{G+YZ`a%~kzK!HTAA5NXE-7vOFRr5oqY$rH>WI6SFvWmahFav!CfRMM3%8J&c z*p+%|-fNS_@QrFr(at!JY9jCg9F-%5{nb5Bo~z@Y9m&SHYV`49GAJjA5h~h4(G!Se zZmK{Bo7ivCfvl}@A-ptkFGcWXAzj3xfl{evi-OG(TaCn1FAHxRc{}B|x+Ua1D=I6M z!C^ZIvK6aS_c&(=OQDZfm>O`Nxsw{ta&yiYPA~@e#c%N>>#rq)k6Aru-qD4(D^v)y z*>Rs;YUbD1S8^D(ps6Jbj0K3wJw>L4m)0e(6Pee3Y?gy9i0^bZO?$*sv+xKV?WBlh zAp*;v6w!a8;A7sLB*g-^<$Z4L7|5jXxxP1}hQZ<55f9<^KJ>^mKlWSGaLcO0=$jem zWyZkRwe~u{{tU63DlCaS9$Y4CP4f?+wwa(&1ou)b>72ydrFvm`Rj-0`kBJgK@nd(*Eh!(NC{F-@=FnF&Y!q`7){YsLLHf0_B6aHc# z>WIuHTyJwIH{BJ4)2RtEauC7Yq7Cytc|S)4^*t8Va3HR zg=~sN^tp9re@w=GTx$;zOWMjcg-7X3Wk^N$n;&Kf1RgVG2}2L-(0o)54C509C&77i zrjSi{X*WV=%C17((N^6R4Ya*4#6s_L99RtQ>m(%#nQ#wrRC8Y%yxkH;d!MdY+Tw@r zjpSnK`;C-U{ATcgaxoEpP0Gf+tx);buOMlK=01D|J+ROu37qc*rD(w`#O=3*O*w9?biwNoq3WN1`&Wp8TvKj3C z3HR9ssH7a&Vr<6waJrU zdLg!ieYz%U^bmpn%;(V%%ugMk92&?_XX1K@mwnVSE6!&%P%Wdi7_h`CpScvspMx?N zQUR>oadnG17#hNc$pkTp+9lW+MBKHRZ~74XWUryd)4yd zj98$%XmIL4(9OnoeO5Fnyn&fpQ9b0h4e6EHHw*l68j;>(ya`g^S&y2{O8U>1*>4zR zq*WSI_2o$CHQ?x0!wl9bpx|Cm2+kFMR)oMud1%n2=qn5nE&t@Fgr#=Zv2?}wtEz^T z9rrj=?IH*qI5{G@Rn&}^Z{+TW}mQeb9=8b<_a`&Cm#n%n~ zU47MvCBsdXFB1+adOO)03+nczfWa#vwk#r{o{dF)QWya9v2nv43Zp3%Ps}($lA02*_g25t;|T{A5snSY?3A zrRQ~(Ygh_ebltHo1VCbJb*eOAr;4cnlXLvI>*$-#AVsGg6B1r7@;g^L zFlJ_th0vxO7;-opU@WAFe;<}?!2q?RBrFK5U{*ai@NLKZ^};Ul}beukveh?TQn;$%9=R+DX07m82gP$=}Uo_%&ngV`}Hyv8g{u z3SWzTGV|cwQuFIs7ZDOqO_fGf8Q`8MwL}eUp>q?4eqCmOTcwQuXtQckPy|4F1on8l zP*h>d+cH#XQf|+6c|S{7SF(Lg>bR~l(0uY?O{OEVlaxa5@e%T&xju=o1`=OD#qc16 zSvyH*my(dcp6~VqR;o(#@m44Lug@~_qw+HA=mS#Z^4reBy8iV?H~I;{LQWk3aKK8$bLRyt$g?- 0) { - // 判断是否有权限 - const permissionFlag = value - const hasPermissions = permissions.some(permission => { - return all_permission === permission || permissionFlag.includes(permission) - }) - // 如果没有权限,则移除元素 - if (!hasPermissions) { - el.parentNode && el.parentNode.removeChild(el) - } - } else { - throw new Error(`请设置操作权限标签值`) - } - } -} diff --git a/ssadmin-web/src/directive/permission/hasRole.js b/ssadmin-web/src/directive/permission/hasRole.js deleted file mode 100644 index ed5cd96..0000000 --- a/ssadmin-web/src/directive/permission/hasRole.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * 角色权限处理 - * Copyright (c) 2019 ruoyi - */ - -import store from '@/store' - -export default { - inserted(el, binding, vnode) { - const { value } = binding - const super_admin = "admin"; - const roles = store.getters && store.getters.roles // 用户拥有的角色标识的数组 - - if (value && value instanceof Array && value.length > 0) { - // 判断是否有角色 - const roleFlag = value - const hasRole = roles.some(role => { - return super_admin === role || roleFlag.includes(role) - }) - // 如果没有角色,则移除元素 - if (!hasRole) { - el.parentNode && el.parentNode.removeChild(el) - } - } else { - throw new Error(`请设置角色权限标签值"`) - } - } -} diff --git a/ssadmin-web/src/layout/index.vue b/ssadmin-web/src/layout/index.vue deleted file mode 100644 index facc3cc..0000000 --- a/ssadmin-web/src/layout/index.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - diff --git a/ssadmin-web/src/main.js b/ssadmin-web/src/main.js deleted file mode 100644 index 75c6860..0000000 --- a/ssadmin-web/src/main.js +++ /dev/null @@ -1,21 +0,0 @@ -import Vue from 'vue' -import App from './App.vue' -import router from './router' -import store from './store' -import ElementUI from 'element-ui'; -import 'element-ui/lib/theme-chalk/index.css'; -import './permission' -import directive from "@/directive"; -import plugins from "@/plugins"; - -Vue.use(ElementUI); -Vue.use(directive) -Vue.use(plugins) - -Vue.config.productionTip = false - -new Vue({ - router, - store, - render: h => h(App) -}).$mount('#app') diff --git a/ssadmin-web/src/permission.js b/ssadmin-web/src/permission.js deleted file mode 100644 index 1ac2a02..0000000 --- a/ssadmin-web/src/permission.js +++ /dev/null @@ -1,22 +0,0 @@ -import router from './router' -import { getAccessToken } from '@/utils/auth' - -router.beforeEach((to, from, next) => { - if (getAccessToken()) { // 如果有token - if (to.path === '/login') { - next({ path: '/' }) // 如果是去登录页,重定向到首页 - } else { - next() // 正常跳转 - } - } else { // 没有token - if (to.path === '/login') { - next() // 如果是去登录页,正常跳转 - } else { - next('/login') // 否则重定向到登录页 - } - } -}) - -router.afterEach(() => { - // 这里可以添加一些在路由跳转后需要执行的代码 -}) diff --git a/ssadmin-web/src/router/index.js b/ssadmin-web/src/router/index.js deleted file mode 100644 index 32d6b78..0000000 --- a/ssadmin-web/src/router/index.js +++ /dev/null @@ -1,74 +0,0 @@ -import Vue from 'vue' -import VueRouter from 'vue-router' -import HomeView from '../views/HomeView.vue' -/* Layout */ -import Layout from '@/layout' - -Vue.use(VueRouter) - -const routes = [ - { - path: '/', - component: Layout, // 修改为 Layout 组件 - children: [ - { - path: '', - component: () => import( '../views/HomeView.vue'), - name: 'home' - } - ] - }, - { - path: '/rbac', - component: Layout, - children: [{ - path: 'user/list', - component:() => import( '../views/User/List.vue') - }, - { - path: 'user/add', - component:() => import( '../views/User/Add.vue') - } - ] - }, - { - path: '/system', - component: Layout, - children: [ - { - path: 'user', - component:() => import( '../views/system/user/index.vue') - } - ] - }, - { - path: '/application', - component: Layout, - children: [ - { - path: 'manage', - component:() => import( '../views/application/applicationManagement.vue') - } - ] - }, - { - path: '/login', - name: 'login', - component: () => import('../views/Login.vue') - }, - -] - -// 防止连续点击多次路由报错 -let routerPush = VueRouter.prototype.push; -VueRouter.prototype.push = function push(location) { - return routerPush.call(this, location).catch(err => err) -} - -const router = new VueRouter({ - mode: 'history', - base: process.env.BASE_URL, - routes -}) - -export default router diff --git a/ssadmin-web/src/store/getters.js b/ssadmin-web/src/store/getters.js deleted file mode 100644 index c104976..0000000 --- a/ssadmin-web/src/store/getters.js +++ /dev/null @@ -1,16 +0,0 @@ -const getters = { - userId: state => state.user.id, - token: state => state.user.token, - avatar: state => state.user.avatar, - name: state => state.user.name, - nickname: state => state.user.nickname, - introduction: state => state.user.introduction, - roles: state => state.user.roles, - permissions: state => state.user.permissions, - permission_routes: state => state.permission.routes, - // 工具栏 - topbarRouters:state => state.permission.topbarRouters, - defaultRoutes:state => state.permission.defaultRoutes, - sidebarRouters:state => state.permission.sidebarRouters -} -export default getters diff --git a/ssadmin-web/src/store/index.js b/ssadmin-web/src/store/index.js deleted file mode 100644 index c7a2979..0000000 --- a/ssadmin-web/src/store/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' -import user from './modules/user' -import permission from './modules/permission' -import getters from './getters' - -Vue.use(Vuex) - -const store = new Vuex.Store({ - modules: { - user, - permission, - }, - getters -}) - -export default store diff --git a/ssadmin-web/src/store/modules/permission.js b/ssadmin-web/src/store/modules/permission.js deleted file mode 100644 index f26a10b..0000000 --- a/ssadmin-web/src/store/modules/permission.js +++ /dev/null @@ -1 +0,0 @@ -//处理动态路由问题 diff --git a/ssadmin-web/src/store/modules/user.js b/ssadmin-web/src/store/modules/user.js deleted file mode 100644 index 5e796e9..0000000 --- a/ssadmin-web/src/store/modules/user.js +++ /dev/null @@ -1,106 +0,0 @@ -import {login, logout, getPermissionInfo} from '@/api/login' -import {setToken, removeToken} from '@/utils/auth' - -const user = { - state: { - id: 0, // 用户编号 - name: '', - avatar: '', - roles: [], - permissions: [] - }, - - mutations: { - SET_ID: (state, id) => { - state.id = id - }, - SET_NAME: (state, name) => { - state.name = name - }, - // SET_NICKNAME: (state, nickname) => { - // state.nickname = nickname - // }, - // SET_AVATAR: (state, avatar) => { - // state.avatar = avatar - // }, - SET_ROLES: (state, roles) => { - state.roles = roles - }, - SET_PERMISSIONS: (state, permissions) => { - state.permissions = permissions - } - }, - - actions: { - // 登录 - Login({ commit }, userInfo) { - const username = userInfo.username.trim() - const password = userInfo.password - return new Promise((resolve, reject) => { - login(username, password).then(res => { - res = res.data; - // 设置 token - setToken(res) - resolve() - }).catch(error => { - reject(error) - }) - }) - }, - - // 获取用户信息 - GetInfo({ commit, state }) { - return new Promise((resolve, reject) => { - getPermissionInfo().then(res => { - // 没有 data 数据,赋予个默认值 - if (!res) { - res = { - data: { - roles: [], - user: { - id: '', - avatar: '', - userName: '', - nickname: '' - } - } - } - } - - res = res.data; // 读取 data 数据 - const user = res.user - const avatar = ( user.avatar === "" || user.avatar == null ) ? require("@/assets/images/profile.jpg") : user.avatar; - if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 - commit('SET_ROLES', res.roles) - commit('SET_PERMISSIONS', res.permissions) - } else { - commit('SET_ROLES', ['ROLE_DEFAULT']) - } - commit('SET_ID', user.id) - commit('SET_NAME', user.userName) - commit('SET_NICKNAME', user.nickname) - commit('SET_AVATAR', avatar) - resolve(res) - }).catch(error => { - reject(error) - }) - }) - }, - - // 退出系统 - LogOut({ commit, state }) { - return new Promise((resolve, reject) => { - logout(state.token).then(() => { - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - resolve() - }).catch(error => { - reject(error) - }) - }) - } - } -} - -export default user diff --git a/ssadmin-web/src/utils/request.js b/ssadmin-web/src/utils/request.js deleted file mode 100644 index b5f710c..0000000 --- a/ssadmin-web/src/utils/request.js +++ /dev/null @@ -1,40 +0,0 @@ -import axios from 'axios'; -import { getAccessToken } from '@/utils/auth' - -const service = axios.create({ - // baseURL: 'https://mock.apifox.cn/m1/2428381-0-default/admin-api', - baseURL: '/api', - timeout: 5000 -}); - -service.interceptors.request.use( - config => { - // 在请求发送之前对请求数据进行处理 - if (getAccessToken()) { - config.headers['Authorization'] = 'Bearer ' + getAccessToken() // 携带token - } - - return config; - }, - error => { - // 对请求错误做些什么 - console.log(error); - return Promise.reject(error); - } -); - -service.interceptors.response.use( - response => { - // 对响应数据进行处理 - // ... - - return response.data; - }, - error => { - // 对响应错误做些什么 - console.log(error); - return Promise.reject(error); - } -); - -export default service; diff --git a/ssadmin-web/src/views/Login.vue b/ssadmin-web/src/views/Login.vue deleted file mode 100644 index 6e55382..0000000 --- a/ssadmin-web/src/views/Login.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - - - diff --git a/ssadmin-web/src/views/User/Add.vue b/ssadmin-web/src/views/User/Add.vue deleted file mode 100644 index a127822..0000000 --- a/ssadmin-web/src/views/User/Add.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/ssadmin-web/src/views/User/List.vue b/ssadmin-web/src/views/User/List.vue deleted file mode 100644 index b5eb434..0000000 --- a/ssadmin-web/src/views/User/List.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - - - diff --git a/ssadmin-web/vue.config.js b/ssadmin-web/vue.config.js deleted file mode 100644 index 9bc182d..0000000 --- a/ssadmin-web/vue.config.js +++ /dev/null @@ -1,20 +0,0 @@ -const { defineConfig } = require('@vue/cli-service') -module.exports = defineConfig({ - transpileDependencies: true, - devServer: { - proxy: { - "/api": { - target: "http://localhost:28080", - // target: "https://mock.apifox.cn", - // target: process.env.VUE_APP_BASE_API, - changeOrigin: true, - pathRewrite: { - //"^/api": process.env.VUE_APP_PATH - "^/api": "/admin-api" - } - } - } - } -}) - - diff --git a/ssadmin-web/yarn.lock b/ssadmin-web/yarn.lock deleted file mode 100644 index c1ce355..0000000 --- a/ssadmin-web/yarn.lock +++ /dev/null @@ -1,5779 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@achrinza/node-ipc@^9.2.5": - version "9.2.8" - resolved "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz" - integrity sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg== - dependencies: - "@node-ipc/js-queue" "2.0.3" - event-pubsub "4.3.0" - js-message "1.0.7" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== - dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.2.tgz" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== - -"@babel/core@^7.12.16": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/core/-/core-7.23.2.tgz" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.0.tgz" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.12.16", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.20", "@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.23.2.tgz" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.0.tgz" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - -"@babel/plugin-proposal-class-properties@^7.12.13": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-decorators@^7.12.13": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.2.tgz" - integrity sha512-eR0gJQc830fJVGz37oKLvt9W9uUIQSAovUl0e9sJ3YeO09dlcoBVYD3CLrjCj4qHdXmfiyTyFt8yeQYSN5fxLg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.2.0", "@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-async-generator-functions@^7.23.2": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz" - integrity sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== - dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== - dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" - -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.22.15", "@babel/plugin-transform-optional-chaining@^7.23.0": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.12.15": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.2.tgz" - integrity sha512-XOntj6icgzMS58jPVtQpiuF6ZFWxQiJavISGx5KGjRj+3gqZr8+N6Kx+N9BApWzgS+DOjIZfXXj0ZesenOWDyA== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/preset-env@^7.12.16": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.23.2.tgz" - integrity sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ== - dependencies: - "@babel/compat-data" "^7.23.2" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.23.2" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.23.0" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.23.0" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.23.0" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-modules-systemjs" "^7.23.0" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.23.0" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.23.0" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.12.13", "@babel/runtime@^7.8.4": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.2.tgz" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5": - version "7.22.15" - resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.15.tgz" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.22.5", "@babel/traverse@^7.23.2": - version "7.23.2" - resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.23.2.tgz" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.23.0.tgz" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@node-ipc/js-queue@2.0.3": - version "2.0.3" - resolved "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz" - integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw== - dependencies: - easy-stack "1.0.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.23" - resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.23.tgz" - integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.npmmirror.com/@sideway/address/-/address-4.1.4.tgz" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@soda/friendly-errors-webpack-plugin@^1.8.0": - version "1.8.1" - resolved "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz" - integrity sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg== - dependencies: - chalk "^3.0.0" - error-stack-parser "^2.0.6" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -"@soda/get-current-script@^1.0.2": - version "1.0.2" - resolved "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz" - integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/body-parser@*": - version "1.19.4" - resolved "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.4.tgz" - integrity sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.12" - resolved "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.12.tgz" - integrity sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.2" - resolved "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz" - integrity sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.37" - resolved "https://registry.npmmirror.com/@types/connect/-/connect-3.4.37.tgz" - integrity sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q== - dependencies: - "@types/node" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.6" - resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.6.tgz" - integrity sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.6" - resolved "https://registry.npmmirror.com/@types/eslint/-/eslint-8.44.6.tgz" - integrity sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.3" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.3.tgz" - integrity sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.39" - resolved "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz" - integrity sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.20" - resolved "https://registry.npmmirror.com/@types/express/-/express-4.17.20.tgz" - integrity sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-errors@*": - version "2.0.3" - resolved "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.3.tgz" - integrity sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA== - -"@types/http-proxy@^1.17.8": - version "1.17.13" - resolved "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.13.tgz" - integrity sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw== - dependencies: - "@types/node" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.14" - resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.14.tgz" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== - -"@types/mime@*", "@types/mime@^1": - version "1.3.4" - resolved "https://registry.npmmirror.com/@types/mime/-/mime-1.3.4.tgz" - integrity sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw== - -"@types/minimist@^1.2.0": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.4.tgz" - integrity sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ== - -"@types/node@*": - version "20.8.9" - resolved "https://registry.npmmirror.com/@types/node/-/node-20.8.9.tgz" - integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg== - dependencies: - undici-types "~5.26.4" - -"@types/normalize-package-data@^2.4.0": - version "2.4.3" - resolved "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz" - integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== - -"@types/parse-json@^4.0.0": - version "4.0.1" - resolved "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.1.tgz" - integrity sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng== - -"@types/qs@*": - version "6.9.9" - resolved "https://registry.npmmirror.com/@types/qs/-/qs-6.9.9.tgz" - integrity sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg== - -"@types/range-parser@*": - version "1.2.6" - resolved "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.6.tgz" - integrity sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA== - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/send@*": - version "0.17.3" - resolved "https://registry.npmmirror.com/@types/send/-/send-0.17.3.tgz" - integrity sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.3" - resolved "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.3.tgz" - integrity sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.4" - resolved "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.4.tgz" - integrity sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.35" - resolved "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.35.tgz" - integrity sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw== - dependencies: - "@types/node" "*" - -"@types/ws@^8.5.5": - version "8.5.8" - resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.5.8.tgz" - integrity sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg== - dependencies: - "@types/node" "*" - -"@vue/babel-helper-vue-jsx-merge-props@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz" - integrity sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA== - -"@vue/babel-helper-vue-transform-on@^1.1.5": - version "1.1.5" - resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz" - integrity sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w== - -"@vue/babel-plugin-jsx@^1.0.3": - version "1.1.5" - resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz" - integrity sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - "@vue/babel-helper-vue-transform-on" "^1.1.5" - camelcase "^6.3.0" - html-tags "^3.3.1" - svg-tags "^1.0.0" - -"@vue/babel-plugin-transform-vue-jsx@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz" - 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.4.0" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^5.0.8": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz" - integrity sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg== - dependencies: - "@babel/core" "^7.12.16" - "@babel/helper-compilation-targets" "^7.12.16" - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-proposal-class-properties" "^7.12.13" - "@babel/plugin-proposal-decorators" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/plugin-transform-runtime" "^7.12.15" - "@babel/preset-env" "^7.12.16" - "@babel/runtime" "^7.12.13" - "@vue/babel-plugin-jsx" "^1.0.3" - "@vue/babel-preset-jsx" "^1.1.2" - babel-plugin-dynamic-import-node "^2.3.3" - core-js "^3.8.3" - core-js-compat "^3.8.3" - semver "^7.3.4" - -"@vue/babel-preset-jsx@^1.1.2": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz" - integrity sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA== - dependencies: - "@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.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz" - integrity sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-composition-api-render-instance@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz" - integrity sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-functional-vue@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz" - integrity sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz" - integrity sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz" - integrity sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@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.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz" - integrity sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.4.0" - camelcase "^5.0.0" - -"@vue/cli-overlay@^5.0.8": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz" - integrity sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ== - -"@vue/cli-plugin-babel@~5.0.0": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz" - integrity sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ== - dependencies: - "@babel/core" "^7.12.16" - "@vue/babel-preset-app" "^5.0.8" - "@vue/cli-shared-utils" "^5.0.8" - babel-loader "^8.2.2" - thread-loader "^3.0.0" - webpack "^5.54.0" - -"@vue/cli-plugin-router@^5.0.8", "@vue/cli-plugin-router@~5.0.0": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz" - integrity sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg== - dependencies: - "@vue/cli-shared-utils" "^5.0.8" - -"@vue/cli-plugin-vuex@^5.0.8", "@vue/cli-plugin-vuex@~5.0.0": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz" - integrity sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA== - -"@vue/cli-service@~5.0.0": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz" - integrity sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw== - dependencies: - "@babel/helper-compilation-targets" "^7.12.16" - "@soda/friendly-errors-webpack-plugin" "^1.8.0" - "@soda/get-current-script" "^1.0.2" - "@types/minimist" "^1.2.0" - "@vue/cli-overlay" "^5.0.8" - "@vue/cli-plugin-router" "^5.0.8" - "@vue/cli-plugin-vuex" "^5.0.8" - "@vue/cli-shared-utils" "^5.0.8" - "@vue/component-compiler-utils" "^3.3.0" - "@vue/vue-loader-v15" "npm:vue-loader@^15.9.7" - "@vue/web-component-wrapper" "^1.3.0" - acorn "^8.0.5" - acorn-walk "^8.0.2" - address "^1.1.2" - autoprefixer "^10.2.4" - browserslist "^4.16.3" - case-sensitive-paths-webpack-plugin "^2.3.0" - cli-highlight "^2.1.10" - clipboardy "^2.3.0" - cliui "^7.0.4" - copy-webpack-plugin "^9.0.1" - css-loader "^6.5.0" - css-minimizer-webpack-plugin "^3.0.2" - cssnano "^5.0.0" - debug "^4.1.1" - default-gateway "^6.0.3" - dotenv "^10.0.0" - dotenv-expand "^5.1.0" - fs-extra "^9.1.0" - globby "^11.0.2" - hash-sum "^2.0.0" - html-webpack-plugin "^5.1.0" - is-file-esm "^1.0.0" - launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.1" - lodash.mapvalues "^4.6.0" - mini-css-extract-plugin "^2.5.3" - minimist "^1.2.5" - module-alias "^2.2.2" - portfinder "^1.0.26" - postcss "^8.2.6" - postcss-loader "^6.1.1" - progress-webpack-plugin "^1.0.12" - ssri "^8.0.1" - terser-webpack-plugin "^5.1.1" - thread-loader "^3.0.0" - vue-loader "^17.0.0" - vue-style-loader "^4.1.3" - webpack "^5.54.0" - webpack-bundle-analyzer "^4.4.0" - webpack-chain "^6.5.1" - webpack-dev-server "^4.7.3" - webpack-merge "^5.7.3" - webpack-virtual-modules "^0.4.2" - whatwg-fetch "^3.6.2" - -"@vue/cli-shared-utils@^5.0.8": - version "5.0.8" - resolved "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz" - integrity sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ== - dependencies: - "@achrinza/node-ipc" "^9.2.5" - chalk "^4.1.2" - execa "^1.0.0" - joi "^17.4.0" - launch-editor "^2.2.1" - lru-cache "^6.0.0" - node-fetch "^2.6.7" - open "^8.0.2" - ora "^5.3.0" - read-pkg "^5.1.1" - semver "^7.3.4" - strip-ansi "^6.0.0" - -"@vue/compiler-sfc@2.7.15": - version "2.7.15" - resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz" - integrity sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" - source-map "^0.6.1" - -"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.3.0": - version "3.3.0" - resolved "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz" - integrity sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.36" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - -"@vue/vue-loader-v15@npm:vue-loader@^15.9.7": - version "15.11.1" - resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz" - integrity sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -"@vue/web-component-wrapper@^1.3.0": - version "1.3.0" - resolved "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz" - integrity sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-walk@^8.0.0, acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.0.4, acorn@^8.0.5, acorn@^8.7.1, acorn@^8.8.2: - version "8.10.0" - resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -address@^1.1.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/address/-/address-1.2.2.tgz" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arch@^2.1.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -async-validator@~1.8.1: - version "1.8.5" - resolved "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz" - integrity sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA== - dependencies: - babel-runtime "6.x" - -async@^2.6.4: - version "2.6.4" - resolved "https://registry.npmmirror.com/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.2.4: - version "10.4.16" - resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.16.tgz" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -axios@^1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/axios/-/axios-1.6.0.tgz" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-helper-vue-jsx-merge-props@^2.0.0: - version "2.0.3" - resolved "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz" - integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== - -babel-loader@^8.2.2: - version "8.3.0" - resolved "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.3.0.tgz" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" - -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - -babel-runtime@6.x: - version "6.26.0" - resolved "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz" - integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@^3.1.1: - version "3.7.2" - resolved "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.1.1.tgz" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.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" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.1.tgz" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.5" - resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.5.tgz" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001554" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz" - integrity sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ== - -case-sensitive-paths-webpack-plugin@^2.3.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - -chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.2.tgz" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz" - integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-highlight@^2.1.10: - version "2.1.11" - resolved "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== - -clipboardy@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz" - integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== - dependencies: - arch "^2.1.1" - execa "^1.0.0" - is-wsl "^2.1.1" - -cliui@^7.0.2, cliui@^7.0.4: - version "7.0.4" - resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz" - 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" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-webpack-plugin@^9.0.1: - version "9.1.0" - resolved "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz" - integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== - dependencies: - fast-glob "^3.2.7" - glob-parent "^6.0.1" - globby "^11.0.3" - normalize-path "^3.0.0" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - -core-js-compat@^3.31.0, core-js-compat@^3.33.1, core-js-compat@^3.8.3: - version "3.33.1" - resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.33.1.tgz" - integrity sha512-6pYKNOgD/j/bkC5xS5IIg6bncid3rfrI42oBH1SQJbsmYPKF7rhzcFzYCcxYMmNQQ0rCEB8WqpW7QHndOggaeQ== - dependencies: - browserslist "^4.22.1" - -core-js@^2.4.0: - version "2.6.12" - resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-js@^3.8.3: - version "3.33.1" - resolved "https://registry.npmmirror.com/core-js/-/core-js-3.33.1.tgz" - integrity sha512-qVSq3s+d4+GsqN0teRCJtM6tdEEXyWxjzbhVrCHmBS5ZTM0FS2MOS0D13dUXAWDUN6a+lHI/N1hF9Ytz6iLl9Q== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-loader@^6.5.0: - version "6.8.1" - resolved "https://registry.npmmirror.com/css-loader/-/css-loader-6.8.1.tgz" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.8" - -css-minimizer-webpack-plugin@^3.0.2: - version "3.4.1" - resolved "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" - integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== - dependencies: - cssnano "^5.0.6" - jest-worker "^27.0.2" - postcss "^8.3.5" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^5.2.14: - version "5.2.14" - resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz" - integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.1" - postcss-convert-values "^5.1.3" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.7" - postcss-merge-rules "^5.1.4" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.4" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.1" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.2" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - -cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - -cssnano@^5.0.0, cssnano@^5.0.6: - version "5.1.15" - resolved "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz" - integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== - dependencies: - cssnano-preset-default "^5.2.14" - lilconfig "^2.0.3" - yaml "^1.10.2" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csstype@^3.1.0: - version "3.1.2" - resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deepmerge@^1.2.0, deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.4: - version "1.2.1" - resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -easy-stack@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz" - integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.535: - version "1.4.567" - resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz" - integrity sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w== - -element-ui@^2.15.14: - version "2.15.14" - resolved "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz" - integrity sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA== - dependencies: - async-validator "~1.8.1" - babel-helper-vue-jsx-merge-props "^2.0.0" - deepmerge "^1.2.0" - normalize-wheel "^1.0.1" - resize-observer-polyfill "^1.5.0" - throttle-debounce "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.1.4" - resolved "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz" - integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== - dependencies: - stackframe "^1.3.4" - -es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-pubsub@4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz" - integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.npmmirror.com/express/-/express-4.18.2.tgz" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.0.0, follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.3.6: - version "4.3.7" - resolved "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.5.tgz" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.2, globby@^11.0.3: - version "11.1.0" - resolved "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz" - integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== - -hash-sum@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz" - integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.npmmirror.com/html-entities/-/html-entities-2.4.0.tgz" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz" - integrity sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g== - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-webpack-plugin@^5.1.0: - version "5.5.3" - resolved "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immutable@^4.0.0: - version "4.3.4" - resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz" - integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-file-esm@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz" - integrity sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA== - dependencies: - read-pkg-up "^7.0.1" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -javascript-stringify@^2.0.1: - version "2.1.0" - resolved "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz" - integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== - -jest-worker@^27.0.2, jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joi@^17.4.0: - version "17.11.0" - resolved "https://registry.npmmirror.com/joi/-/joi-17.11.0.tgz" - integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -js-message@1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz" - integrity sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -launch-editor-middleware@^2.2.1: - version "2.6.1" - resolved "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz" - integrity sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g== - dependencies: - launch-editor "^2.6.1" - -launch-editor@^2.2.1, launch-editor@^2.6.0, launch-editor@^2.6.1: - version "2.6.1" - resolved "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.1.tgz" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -lilconfig@^2.0.3: - version "2.1.0" - resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.1.0, loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.4.2" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz" - integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.invokemap@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz" - integrity sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz" - integrity sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.pullall@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz" - integrity sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz" - integrity sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg== - dependencies: - ansi-escapes "^3.0.0" - cli-cursor "^2.0.0" - wrap-ansi "^3.0.1" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^4.1.2: - version "4.1.5" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.npmmirror.com/memfs/-/memfs-3.6.0.tgz" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz" - 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" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mini-css-extract-plugin@^2.5.3: - version "2.7.6" - resolved "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== - dependencies: - schema-utils "^4.0.0" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^3.1.1: - version "3.3.6" - resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -mkdirp@^0.5.6: - version "0.5.6" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -module-alias@^2.2.2: - version "2.2.3" - resolved "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz" - integrity sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -normalize-wheel@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz" - integrity sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.4" - resolved "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz" - integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.2, open@^8.0.9: - version "8.4.2" - resolved "https://registry.npmmirror.com/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -ora@^5.3.0: - version "5.4.1" - resolved "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -portfinder@^1.0.26: - version "1.0.32" - resolved "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz" - integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== - dependencies: - async "^2.6.4" - debug "^3.2.7" - mkdirp "^0.5.6" - -postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - -postcss-colormin@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz" - integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz" - integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - -postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - -postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - -postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - -postcss-loader@^6.1.1: - version "6.2.1" - resolved "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-merge-longhand@^5.1.7: - version "5.1.7" - resolved "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz" - integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.1" - -postcss-merge-rules@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz" - integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^5.1.4: - version "5.1.4" - resolved "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz" - integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - -postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz" - integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz" - integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - -postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^7.0.36: - version "7.0.39" - resolved "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.2.6, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.21: - version "8.4.31" - resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -"prettier@^1.18.2 || ^2.0.0": - version "2.8.8" - resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress-webpack-plugin@^1.0.12: - version "1.0.16" - resolved "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz" - integrity sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA== - dependencies: - chalk "^2.1.0" - figures "^2.0.0" - log-update "^2.3.0" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.1.1, read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^2.0.1: - version "2.3.8" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resize-observer-polyfill@^1.5.0: - version "1.5.1" - resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.10.0, resolve@^1.14.2: - version "1.22.8" - resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz" - integrity sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q== - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz" - 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" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -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" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@^12.0.0: - version "12.6.0" - resolved "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@^1.32.7: - version "1.69.5" - resolved "https://registry.npmmirror.com/sass/-/sass-1.69.5.tgz" - integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.2.0.tgz" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.1.1.tgz" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.4, semver@^7.3.5, semver@^7.3.8: - version "7.5.4" - resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.1.1.tgz" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/sirv/-/sirv-2.0.3.tgz" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^3.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stackframe@^1.3.4: - version "1.3.4" - resolved "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz" - integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -stylehacks@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz" - integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.1.1, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.10.0, terser@^5.16.8: - version "5.22.0" - resolved "https://registry.npmmirror.com/terser/-/terser-5.22.0.tgz" - integrity sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-loader@^3.0.0: - version "3.0.4" - resolved "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz" - integrity sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA== - dependencies: - json-parse-better-errors "^1.0.2" - loader-runner "^4.1.0" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - -throttle-debounce@^1.0.1: - version "1.1.0" - resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz" - integrity sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tslib@^2.0.3: - version "2.6.2" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-loader@^17.0.0: - version "17.3.0" - resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.3.0.tgz" - integrity sha512-VUURABiN0TIUz0yvJJ/V/rZjGUh10JZtD+IDI5bXFslzFi9mV6ebKkPzoqiSi8e0vh8Ip7JHJx+I0AzAG0KsCA== - dependencies: - chalk "^4.1.0" - hash-sum "^2.0.0" - watchpack "^2.4.0" - -vue-router@^3.5.1: - version "3.6.5" - resolved "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz" - integrity sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ== - -vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: - version "4.1.3" - resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz" - integrity sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.14: - version "2.7.15" - resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz" - integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue@^2.6.14: - version "2.7.15" - resolved "https://registry.npmmirror.com/vue/-/vue-2.7.15.tgz" - integrity sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ== - dependencies: - "@vue/compiler-sfc" "2.7.15" - csstype "^3.1.0" - -vuex@^3.6.2: - version "3.6.2" - resolved "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz" - integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw== - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-bundle-analyzer@^4.4.0: - version "4.9.1" - resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz" - integrity sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - is-plain-object "^5.0.0" - lodash.debounce "^4.0.8" - lodash.escape "^4.0.1" - lodash.flatten "^4.4.0" - lodash.invokemap "^4.6.0" - lodash.pullall "^4.2.0" - lodash.uniqby "^4.7.0" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-chain@^6.5.1: - version "6.5.1" - resolved "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz" - integrity sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.1" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.7.3: - version "4.15.1" - resolved "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-merge@^5.7.3: - version "5.10.0" - resolved "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack-virtual-modules@^0.4.2: - version "0.4.6" - resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz" - integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== - -webpack@^5.0.0, webpack@^5.54.0: - version "5.89.0" - resolved "https://registry.npmmirror.com/webpack/-/webpack-5.89.0.tgz" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-fetch@^3.6.2: - version "3.6.19" - resolved "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz" - integrity sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.14.2" - resolved "https://registry.npmmirror.com/ws/-/ws-8.14.2.tgz" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" diff --git a/vue-element-admin-master/.editorconfig b/vue-element-admin-master/.editorconfig new file mode 100644 index 0000000..3454886 --- /dev/null +++ b/vue-element-admin-master/.editorconfig @@ -0,0 +1,14 @@ +# https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/vue-element-admin-master/.env.development b/vue-element-admin-master/.env.development new file mode 100644 index 0000000..de583d0 --- /dev/null +++ b/vue-element-admin-master/.env.development @@ -0,0 +1,5 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = '/dev-api' diff --git a/vue-element-admin-master/.env.production b/vue-element-admin-master/.env.production new file mode 100644 index 0000000..80c8103 --- /dev/null +++ b/vue-element-admin-master/.env.production @@ -0,0 +1,6 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = '/prod-api' + diff --git a/vue-element-admin-master/.env.staging b/vue-element-admin-master/.env.staging new file mode 100644 index 0000000..a8793a0 --- /dev/null +++ b/vue-element-admin-master/.env.staging @@ -0,0 +1,8 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = '/stage-api' + diff --git a/vue-element-admin-master/.eslintignore b/vue-element-admin-master/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/vue-element-admin-master/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/vue-element-admin-master/.eslintrc.js b/vue-element-admin-master/.eslintrc.js new file mode 100644 index 0000000..c977505 --- /dev/null +++ b/vue-element-admin-master/.eslintrc.js @@ -0,0 +1,198 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/vue-element-admin-master/.github/FUNDING.yml b/vue-element-admin-master/.github/FUNDING.yml new file mode 100644 index 0000000..d540802 --- /dev/null +++ b/vue-element-admin-master/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +patreon: panjiachen +custom: https://panjiachen.github.io/vue-element-admin-site/donate diff --git a/vue-element-admin-master/.github/ISSUE_TEMPLATE/bug_report.md b/vue-element-admin-master/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100755 index 0000000..1a114bc --- /dev/null +++ b/vue-element-admin-master/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report(报告问题) +about: Create a report to help us improve +--- + + + +## Bug report(问题描述) + +#### Steps to reproduce(问题复现步骤) + + +#### Screenshot or Gif(截图或动态图) + + +#### Link to minimal reproduction(最小可在线还原demo) + + + +#### Other relevant information(格外信息) +- Your OS: +- Node.js version: +- vue-element-admin version: diff --git a/vue-element-admin-master/.github/ISSUE_TEMPLATE/feature_request.md b/vue-element-admin-master/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100755 index 0000000..c33d10d --- /dev/null +++ b/vue-element-admin-master/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature Request(新功能建议) +about: Suggest an idea for this project +--- + +## Feature request(新功能建议) + diff --git a/vue-element-admin-master/.github/ISSUE_TEMPLATE/question.md b/vue-element-admin-master/.github/ISSUE_TEMPLATE/question.md new file mode 100755 index 0000000..7608354 --- /dev/null +++ b/vue-element-admin-master/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,35 @@ +--- +name: Question(提问) +about: Asking questions about use +--- + +## Question(提问) + + + +#### Steps to reproduce(问题复现步骤) + + +#### Screenshot or Gif(截图或动态图) + + +#### Link to minimal reproduction(最小可在线还原demo) + + + +#### Other relevant information(格外信息) +- Your OS: +- Node.js version: +- vue-element-admin version: diff --git a/ssadmin-web/.gitignore b/vue-element-admin-master/.gitignore similarity index 52% rename from ssadmin-web/.gitignore rename to vue-element-admin-master/.gitignore index 403adbc..78a752d 100644 --- a/ssadmin-web/.gitignore +++ b/vue-element-admin-master/.gitignore @@ -1,17 +1,14 @@ .DS_Store -node_modules -/dist - - -# local env files -.env.local -.env.*.local - -# Log files +node_modules/ +dist/ npm-debug.log* yarn-debug.log* yarn-error.log* -pnpm-debug.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log # Editor directories and files .idea @@ -20,4 +17,7 @@ pnpm-debug.log* *.ntvs* *.njsproj *.sln -*.sw? +*.local + +package-lock.json +yarn.lock diff --git a/vue-element-admin-master/.travis.yml b/vue-element-admin-master/.travis.yml new file mode 100755 index 0000000..f4be7a0 --- /dev/null +++ b/vue-element-admin-master/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/vue-element-admin-master/LICENSE b/vue-element-admin-master/LICENSE new file mode 100644 index 0000000..6151575 --- /dev/null +++ b/vue-element-admin-master/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vue-element-admin-master/README.es.md b/vue-element-admin-master/README.es.md new file mode 100644 index 0000000..dc20fa4 --- /dev/null +++ b/vue-element-admin-master/README.es.md @@ -0,0 +1,228 @@ +

+ +

+ +

+ + vue + + + element-ui + + + Estado de Construcción + + + Licencia + + + Liberación Github + + + Gitter + + + Donación + +

+ +Español | [English](./README.md) | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) + +## Introducción + +[vue-element-admin](https://panjiachen.github.io/vue-element-admin) es una interfáz de administración preparada para producción. Está basada en [vue](https://github.com/vuejs/vue) y usa [element-ui](https://github.com/ElemeFE/element) como conjunto de herramientas de interfáz de usuario. + +Vue Element Admin es una solución práctica basada en la nueva plataforma de desarrollo de vue, construida con soporte a i18 para el manejo de múltiples lenguajes, plantillas estándares para aplicaciones de negocio y un conjunto de asombrosas características. Esta herramienta ayuda a construir largas y complejas Aplicacones de una sola página (SPA). Creo que lo que necesites hacer, este proyecto te ayudará. + +- [Vista Prévia de la Aplicación](https://panjiachen.github.io/vue-element-admin) + +- [Documentación](https://panjiachen.github.io/vue-element-admin-site/) + +- [Canal de Gitter](https://gitter.im/vue-element-admin/discuss) + +- [Para Donaciones](https://panjiachen.github.io/vue-element-admin-site/donate/) + +- [Enlace de Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki) + +- [Canal de Gitee](https://panjiachen.gitee.io/vue-element-admin/) + +- Plantilla base recomendada para usar: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +- Aplicación de Escritorio: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) +- Plantilla de Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Créditos: [@Armour](https://github.com/Armour)) +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +**Después de la versión `v4.1.0+`, la rama por defecto master no tendrá soporte para i18n. Por favor utilice la rama [i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), los cambios serán incluidos en la rama master** + +**la versión actual es `v4.0+` construida con `vue-cli`. Si encuentra algún problema, por favor coloque un [issue](https://github.com/PanJiaChen/vue-element-admin/issues/new). Si desea usar la versión anterior, puede cambiar de rama a [tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0), no relacionado con `vue-cli`** + +**Este proyecto no está soportado para versiones antigüas de navegadores (ej. IE).** + +## Preparación + +Necesita instalar [node](https://nodejs.org/) y [git](https://git-scm.com/) localmente. El proyecto es basado en [ES2015+](https://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [vue-cli](https://github.com/vuejs/vue-cli) , [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), toda la solicitud de datos simulada se realiza a través de [Mock.js](https://github.com/nuysoft/Mock). +Entendiendo y aprendiendo esto pudiera ayudarle con su proyecto. + +[![Edit on CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/PanJiaChen/vue-element-admin/tree/CodeSandbox) + +

+ +

+ +## Patrocinantes + +Sea un patrocinante y coloque su logo en nuestro LEEME en GitHub con un enlace directo a su sitio web. [[Se un Patrocinante]](https://www.patreon.com/panjiachen) + +### Akveo +

Get Java backend for Vue admin with 20% discount for 39$ use coupon code SWB0RAZPZR1M +

+ +### Flatlogic + +

Admin Dashboard Templates made with Vue, React and Angular.

+ +## Características + +``` +- Iniciar / Cerrar Sesión + +- Permisos de Autenticación + - Página de Permisos + - Directivas de permisos + - Página de configuración de permisos + - Autenticación por dos pasos + +- Construcción Multi-entorno + - Desarrollo (dev) + - sit + - Escenario de pruebas (stage), + - Producción (prod) + +- Características Globales + - I18n + - Temas dinámicos + - Menu lateral dinámico (soporte a rutas multi-nivel) + - Barra de rutas dinámica + - Tags-view (Pestañas de página, Soporta operación de clic derecho) + - Svg Sprite + - Datos de simulación con Mock + - Pantalla completa + - Menu lateral responsivo + +- Editor + - Editor de Texto Enriquecido + - Editor Markdown + - Editor JSON + +- Excel + - Exportación a Excel + - Carga de Excel + - Visualización de Excel + - Exportación como ZIP + +- Tabla + - Tabla Dinámica + - Tabla con Arrastrar y Soltar + - Tabla de edición en línea + +- Páginas de Error + - 401 + - 404 + +- Componentes + - Carga de Avatar + - Botón para subir al inicio + - Arrastrar y Soltar (Diaglogo) + - Arrastrar y Soltar (Seleccionar) + - Arrastrar y Soltar (Kanban) + - Arrastrar y Soltar (Lista) + - Panel de división + - Componente para soltar archivos + - Adhesión de objetos + - Contador hasta + +- Ejemplo Avanzado +- Registro de Errores +- Tablero de indicadores +- Página de Guías +- ECharts (Gráficos) +- Portapapeles +- Convertidor de Markdown a HTML +``` + +## Iniciando + +```bash +# clone el proyecto +git clone https://github.com/PanJiaChen/vue-element-admin.git + +# vaya al directorio clonado +cd vue-element-admin + +# instale las dependencias +npm install + +# corra el proyecto como desarrollador +npm run dev +``` + +Automáticamente se abrirá el siguiente enlace en su navegador http://localhost:9527 + +## Construcción + +```bash +# Construcción para entornos de prueba +npm run build:stage + +# Construcción para entornos de producción +npm run build:prod +``` + +## Avanzado + +```bash +# Vista previa con efectos de entorno +npm run preview + +# Vista previa con efectos + análisis de recursos estáticos +npm run preview -- --report + +# Chequeo de formato de código +npm run lint + +# Chequeo de formato de código y auto-corrección +npm run lint -- --fix +``` + +Vaya a [Documentación](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) para mayor información + +## Registro de Cambios + +Los cambios detallados por cada liberación se encuentran en [notas de liberación](https://github.com/PanJiaChen/vue-element-admin/releases). + +## Demostración en línea + +[Vista Prévia de la Aplicación](https://panjiachen.github.io/vue-element-admin) + +## Donación + +Si este proyecto es de mucha ayuda para ti, puedes comprarle al autor un vaso de jugo :tropical_drink: + +![Donar](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png) + +[dona por Paypal](https://www.paypal.me/panfree23) + +[Comprame un Café](https://www.buymeacoffee.com/Pan) + +## Navegadores Soportados + +Navegadores modernos e Internet Explorer 10+. + +| [IE / Edge](https://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](https://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](https://godban.github.io/browsers-support-badges/)
Chrome | [Safari](https://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge | últimas 2 versiones | últimas 2 versiones | últimas 2 versiones | + +## Licencia + +[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE) + +Copyright (c) 2017-presente PanJiaChen diff --git a/vue-element-admin-master/README.ja.md b/vue-element-admin-master/README.ja.md new file mode 100644 index 0000000..3bc3ce8 --- /dev/null +++ b/vue-element-admin-master/README.ja.md @@ -0,0 +1,224 @@ +

+ +

+ +

+ + vue + + + element-ui + + + Build Status + + + license + + + GitHub release + + + gitter + + + donate + +

+ +日本語 | [English](./README.md) | [简体中文](./README.zh-CN.md) | [Spanish](./README.es.md) + +## 概要 + +[vue-element-admin](https://panjiachen.github.io/vue-element-admin) は管理画面のフロントエンドのインタフェースで、[vue](https://github.com/vuejs/vue) と [element-ui](https://github.com/ElemeFE/element)を使っています。i18nの多言語対応、可変ルート、権限、典型的なビジネスアプリテンプレートであり、豊富なコンポーネントを提供しています。素早くビジネス用の管理画面の現型を構築に役立ちます。 + +- [デモページ](https://panjiachen.github.io/vue-element-admin) + +- [ドキュメント](https://panjiachen.github.io/vue-element-admin-site/) + +- [Gitter](https://gitter.im/vue-element-admin/discuss) + +- [Donate](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate) + +- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki) + +- おすすめシンプルテンプレート: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +- デスクトップバージョン: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) +- Typescriptバージョン: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (感謝: [@Armour](https://github.com/Armour)) +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +**バージョン`v4.1.0+`以降について、デフォルトのmasterブランチではi18nをサポートしていません。masterブランチと共にアップデートされる[i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n)を使用してください。 ** + +**現在のバージョン `v4.0+` は `vue-cli` で構築していて、バグ報告は[issue](https://github.com/PanJiaChen/vue-element-admin/issues/new)のissueでお願いします。旧バージョン[tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0)もあります。こちらは`vue-cli`に依存しないです。** + +**低いバージョンのブラウザはサーポートしないです(例えば ie),必要があれば polyfill を追加してください。 [詳細はこちら](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)** + +## 前準備 + +ローカル環境に [node](http://nodejs.org/) と [git](https://git-scm.com/)のインストールが必要です。[ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[vue-cli](https://github.com/vuejs/vue-cli) 、[axios](https://github.com/axios/axios) と [element-ui](https://github.com/ElemeFE/element)で開発しています。Requestは[Mock.js](https://github.com/nuysoft/Mock)のモックデータを使っています。 + +**バグ修正や新規機能追加のissue と pull requestは大歓迎です。** + +[![Edit on CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/PanJiaChen/vue-element-admin/tree/CodeSandbox) + +

+ +

+ +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen) + +### Akveo +

Get Java backend for Vue admin with 20% discount for 39$ use coupon code SWB0RAZPZR1M +

+ +### Flatlogic + +

Admin Dashboard Templates made with Vue, React and Angular.

+ +## 機能一覧 + +``` +- ログイン / ログアウト + +- Auth認証 + - ページ権限 + - 権限パーミッション + - 権限設定 + - 外部IDでログイン + +- 複数環境デプロイ + - dev + - sit + - stage + - prod + +- 共通機能 + - 多言語切替 + - テーマ切替 + - サイトメニュー(ルートから生成) + - パンくずリストナビゲーション + - タブナビゲーション + - Svg Sprite アイコン + - ローカル/バックエンド モック データ + - Screenfull + +- WYSIWYG + - TinyMCE + - Markdown + - JSON + +- Excel + - エクスポート + - インポート + - リード + - Zip + +- テーブル + - ダイナミックテーブル + - ドラッグアンドドロップテーブル + - インラインエディットテーブル + +- エラーページ + - 401 + - 404 + +- コンポーネント + - アバターアップロード + - トップに戻る + - ドラッグダイアログ + - ドラッグ選択 + - ドラッグKanban + - ドラッグリスト + - ペインの分割 + - Dropzone + - スティッキー + - CountTo + +- 高度なサンプル +- エラーログ +- ダッシュボード +- ガイドページ +- ECharts +- クリップボード +- Markdown to html +``` + +## Getting started + +```bash +# clone the project +git clone https://github.com/PanJiaChen/vue-element-admin.git + +# enter the project directory +cd vue-element-admin + +# install dependency +npm install + +# develop +npm run dev +``` + +http://localhost:9527 が自動的に開きます。 + +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` + +## Advanced + +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` + +詳細は [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) を参照してください。 + +## Changelog + +各リリースの詳細は [release notes](https://github.com/PanJiaChen/vue-element-admin/releases) にあります。 + +## Online Demo + +[Preview](https://panjiachen.github.io/vue-element-admin) + +## Donate + +If you find this project useful, you can buy author a glass of juice :tropical_drink: + +![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png) + +[Paypal Me](https://www.paypal.me/panfree23) + +[Buy me a coffee](https://www.buymeacoffee.com/Pan) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](https://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](https://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](https://godban.github.io/browsers-support-badges/)
Chrome | [Safari](https://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | + +## License + +[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE) + +Copyright (c) 2017-present PanJiaChen diff --git a/vue-element-admin-master/README.md b/vue-element-admin-master/README.md new file mode 100644 index 0000000..da4b8b9 --- /dev/null +++ b/vue-element-admin-master/README.md @@ -0,0 +1,243 @@ +

+ +

+ +

+ + vue + + + element-ui + + + Build Status + + + license + + + GitHub release + + + gitter + + + donate + +

+ +English | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) | [Spanish](./README.es.md) + +

+ SPONSORED BY +

+ + + + + + +
+ + + +
+ +## Introduction + +[vue-element-admin](https://panjiachen.github.io/vue-element-admin) is a production-ready front-end solution for admin interfaces. It is based on [vue](https://github.com/vuejs/vue) and uses the UI Toolkit [element-ui](https://github.com/ElemeFE/element). + +[vue-element-admin](https://panjiachen.github.io/vue-element-admin) is based on the newest development stack of vue and it has a built-in i18n solution, typical templates for enterprise applications, and lots of awesome features. It helps you build large and complex Single-Page Applications. I believe whatever your needs are, this project will help you. + +- [Preview](https://panjiachen.github.io/vue-element-admin) + +- [Documentation](https://panjiachen.github.io/vue-element-admin-site/) + +- [Gitter](https://gitter.im/vue-element-admin/discuss) + +- [Donate](https://panjiachen.github.io/vue-element-admin-site/donate/) + +- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki) + +- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 国内用户可访问该地址在线预览 + +- Base template recommends using: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +- Desktop: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) +- Typescript: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +**After the `v4.1.0+` version, the default master branch will not support i18n. Please use [i18n Branch](https://github.com/PanJiaChen/vue-element-admin/tree/i18n), it will keep up with the master update** + +**The current version is `v4.0+` build on `vue-cli`. If you find a problem, please put [issue](https://github.com/PanJiaChen/vue-element-admin/issues/new). If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0), it does not rely on `vue-cli`** + +**This project does not support low version browsers (e.g. IE). Please add polyfill by yourself.** + +## Preparation + +You need to install [node](https://nodejs.org/) and [git](https://git-scm.com/) locally. The project is based on [ES2015+](https://es6.ruanyifeng.com/), [vue](https://cn.vuejs.org/index.html), [vuex](https://vuex.vuejs.org/zh-cn/), [vue-router](https://router.vuejs.org/zh-cn/), [vue-cli](https://github.com/vuejs/vue-cli) , [axios](https://github.com/axios/axios) and [element-ui](https://github.com/ElemeFE/element), all request data is simulated using [Mock.js](https://github.com/nuysoft/Mock). +Understanding and learning this knowledge in advance will greatly help the use of this project. + +[![Edit on CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/PanJiaChen/vue-element-admin/tree/CodeSandbox) + +

+ +

+ +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen) + +### Akveo +

Get Java backend for Vue admin with 20% discount for 39$ use coupon code SWB0RAZPZR1M +

+ +### Flatlogic + +

Admin Dashboard Templates made with Vue, React and Angular.

+ +## Features + +``` +- Login / Logout + +- Permission Authentication + - Page permission + - Directive permission + - Permission configuration page + - Two-step login + +- Multi-environment build + - Develop (dev) + - sit + - Stage Test (stage) + - Production (prod) + +- Global Features + - I18n + - Multiple dynamic themes + - Dynamic sidebar (supports multi-level routing) + - Dynamic breadcrumb + - Tags-view (Tab page Support right-click operation) + - Svg Sprite + - Mock data + - Screenfull + - Responsive Sidebar + +- Editor + - Rich Text Editor + - Markdown Editor + - JSON Editor + +- Excel + - Export Excel + - Upload Excel + - Visualization Excel + - Export zip + +- Table + - Dynamic Table + - Drag And Drop Table + - Inline Edit Table + +- Error Page + - 401 + - 404 + +- Components + - Avatar Upload + - Back To Top + - Drag Dialog + - Drag Select + - Drag Kanban + - Drag List + - SplitPane + - Dropzone + - Sticky + - CountTo + +- Advanced Example +- Error Log +- Dashboard +- Guide Page +- ECharts +- Clipboard +- Markdown to html +``` + +## Getting started + +```bash +# clone the project +git clone https://github.com/PanJiaChen/vue-element-admin.git + +# enter the project directory +cd vue-element-admin + +# install dependency +npm install + +# develop +npm run dev +``` + +This will automatically open http://localhost:9527 + +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` + +## Advanced + +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` + +Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information + +## Changelog + +Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases). + +## Online Demo + +[Preview](https://panjiachen.github.io/vue-element-admin) + +## Donate + +If you find this project useful, you can buy author a glass of juice :tropical_drink: + +![donate](https://wpimg.wallstcn.com/bd273f0d-83a0-4ef2-92e1-9ac8ed3746b9.png) + +[Paypal Me](https://www.paypal.me/panfree23) + +[Buy me a coffee](https://www.buymeacoffee.com/Pan) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](https://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](https://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](https://godban.github.io/browsers-support-badges/)
Chrome | [Safari](https://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | + +## License + +[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE) + +Copyright (c) 2017-present PanJiaChen diff --git a/vue-element-admin-master/README.zh-CN.md b/vue-element-admin-master/README.zh-CN.md new file mode 100644 index 0000000..d34c65a --- /dev/null +++ b/vue-element-admin-master/README.zh-CN.md @@ -0,0 +1,266 @@ +

+ +

+ +

+ + vue + + + element-ui + + + Build Status + + + license + + + GitHub release + + + gitter + + + donate + +

+ +简体中文 | [English](./README.md) | [日本語](./README.ja.md) | [Spanish](./README.es.md) + +

+ SPONSORED BY +

+ + + + + + +
+ + + +
+ +## 简介 + +[vue-element-admin](https://panjiachen.github.io/vue-element-admin) 是一个后台前端解决方案,它基于 [vue](https://github.com/vuejs/vue) 和 [element-ui](https://github.com/ElemeFE/element)实现。它使用了最新的前端技术栈,内置了 i18n 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。相信不管你的需求是什么,本项目都能帮助到你。 + +- [在线预览](https://panjiachen.github.io/vue-element-admin) + +- [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +- [Gitter 讨论组](https://gitter.im/vue-element-admin/discuss) + +- [Donate](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate) + +- [Wiki](https://github.com/PanJiaChen/vue-element-admin/wiki) + +- [Gitee](https://panjiachen.gitee.io/vue-element-admin/) 在线预览(国内用户可访问该地址) + +- [国内访问文档](https://panjiachen.gitee.io/vue-element-admin-site/zh/) 文档(方便没翻墙的用户查看) + +- 基础模板建议使用: [vue-admin-template](https://github.com/PanJiaChen/vue-admin-template) +- 桌面端: [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) +- Typescript 版: [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (鸣谢: [@Armour](https://github.com/Armour)) +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +**`v4.1.0+`版本之后默认 master 分支将不支持国际化,有需要的请使用[i18n](https://github.com/PanJiaChen/vue-element-admin/tree/i18n)分支,它会和 master 保持同步更新** + +**该项目不支持低版本浏览器(如 ie),有需求请自行添加 polyfill [详情](https://github.com/PanJiaChen/vue-element-admin/wiki#babel-polyfill)** + +**目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若发现问题,欢迎提[issue](https://github.com/PanJiaChen/vue-element-admin/issues/new)。若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-element-admin/tree/tag/3.11.0),它不依赖 `vue-cli`** + +群主 **[圈子](https://jianshiapp.com/circles/1209)** 群主会经常分享一些技术相关的东西,或者加入 [qq 群](https://github.com/PanJiaChen/vue-element-admin/issues/602) 或者关注 [微博](https://weibo.com/u/3423485724?is_all=1) + +## 前序准备 + +你需要在本地安装 [node](http://nodejs.org/) 和 [git](https://git-scm.com/)。本项目技术栈基于 [ES2015+](http://es6.ruanyifeng.com/)、[vue](https://cn.vuejs.org/index.html)、[vuex](https://vuex.vuejs.org/zh-cn/)、[vue-router](https://router.vuejs.org/zh-cn/) 、[vue-cli](https://github.com/vuejs/vue-cli) 、[axios](https://github.com/axios/axios) 和 [element-ui](https://github.com/ElemeFE/element),所有的请求数据都使用[Mock.js](https://github.com/nuysoft/Mock)进行模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。 + +同时配套了系列教程文章,如何从零构建后一个完整的后台项目,建议大家先看完这些文章再来实践本项目 + +- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) +- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) +- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) +- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) +- [手摸手,带你用vue撸后台 系列五(v4.0新版本)](https://juejin.im/post/5c92ff94f265da6128275a85) +- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) +- [手摸手,带你优雅的使用 icon](https://juejin.im/post/59bb864b5188257e7a427c09) +- [手摸手,带你用合理的姿势使用 webpack4(上)](https://juejin.im/post/5b56909a518825195f499806) +- [手摸手,带你用合理的姿势使用 webpack4(下)](https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc) + +**如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr** + +[![Edit on CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/PanJiaChen/vue-element-admin/tree/CodeSandbox) + +

+ +

+ +## Sponsors + +Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor]](https://www.patreon.com/panjiachen) + +### Akveo +

Java 后端整合,可以使用优惠码:SWB0RAZPZR1M,获得20%的价格优化

+ +### Flatlogic + +

Admin Dashboard Templates made with Vue, React and Angular.

+ + +## 功能 + +``` +- 登录 / 注销 + +- 权限验证 + - 页面权限 + - 指令权限 + - 权限配置 + - 二步登录 + +- 多环境发布 + - dev + - sit + - stage + - prod + +- 全局功能 + - 国际化多语言 + - 多种动态换肤 + - 动态侧边栏(支持多级路由嵌套) + - 动态面包屑 + - 快捷导航(标签页) + - Svg Sprite 图标 + - 本地/后端 mock 数据 + - Screenfull全屏 + - 自适应收缩侧边栏 + +- 编辑器 + - 富文本 + - Markdown + - JSON 等多格式 + +- Excel + - 导出excel + - 导入excel + - 前端可视化excel + - 导出zip + +- 表格 + - 动态表格 + - 拖拽表格 + - 内联编辑 + +- 错误页面 + - 401 + - 404 + +- 組件 + - 头像上传 + - 返回顶部 + - 拖拽Dialog + - 拖拽Select + - 拖拽看板 + - 列表拖拽 + - SplitPane + - Dropzone + - Sticky + - CountTo + +- 综合实例 +- 错误日志 +- Dashboard +- 引导页 +- ECharts 图表 +- Clipboard(剪贴复制) +- Markdown2html +``` + +## 开发 + +```bash +# 克隆项目 +git clone https://github.com/PanJiaChen/vue-element-admin.git + +# 进入项目目录 +cd vue-element-admin + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 http://localhost:9527 + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` + +## 其它 + +```bash +# 预览发布环境效果 +npm run preview + +# 预览发布环境效果 + 静态资源分析 +npm run preview -- --report + +# 代码格式检查 +npm run lint + +# 代码格式检查并自动修复 +npm run lint -- --fix +``` + +更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +## Changelog + +Detailed changes for each release are documented in the [release notes](https://github.com/PanJiaChen/vue-element-admin/releases). + +## Online Demo + +[在线 Demo](https://panjiachen.github.io/vue-element-admin) + +## Donate + +如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 :tropical_drink: +![donate](https://panjiachen.github.io/donate/donation.png) + +[更多捐赠方式](https://panjiachen.gitee.io/vue-element-admin-site/zh/donate) + +[Paypal Me](https://www.paypal.me/panfree23) + +[Buy me a coffee](https://www.buymeacoffee.com/Pan) + +## 购买贴纸 + +你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,本项目将获得 2 元的捐赠。 + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](https://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](https://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](https://godban.github.io/browsers-support-badges/)
Chrome | [Safari](https://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions | + +## License + +[MIT](https://github.com/PanJiaChen/vue-element-admin/blob/master/LICENSE) + +Copyright (c) 2017-present PanJiaChen diff --git a/vue-element-admin-master/babel.config.js b/vue-element-admin-master/babel.config.js new file mode 100644 index 0000000..fb82b27 --- /dev/null +++ b/vue-element-admin-master/babel.config.js @@ -0,0 +1,14 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html + 'plugins': ['dynamic-import-node'] + } + } +} diff --git a/vue-element-admin-master/build/index.js b/vue-element-admin-master/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/vue-element-admin-master/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/vue-element-admin-master/jest.config.js b/vue-element-admin-master/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/vue-element-admin-master/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/vue-element-admin-master/jsconfig.json b/vue-element-admin-master/jsconfig.json new file mode 100644 index 0000000..958df04 --- /dev/null +++ b/vue-element-admin-master/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} \ No newline at end of file diff --git a/vue-element-admin-master/mock/article.js b/vue-element-admin-master/mock/article.js new file mode 100644 index 0000000..23d8ba5 --- /dev/null +++ b/vue-element-admin-master/mock/article.js @@ -0,0 +1,116 @@ +const Mock = require('mockjs') + +const List = [] +const count = 100 + +const baseContent = '

I am testing data, I am testing data.

' +const image_uri = 'https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3' + +for (let i = 0; i < count; i++) { + List.push(Mock.mock({ + id: '@increment', + timestamp: +Mock.Random.date('T'), + author: '@first', + reviewer: '@first', + title: '@title(5, 10)', + content_short: 'mock data', + content: baseContent, + forecast: '@float(0, 100, 2, 2)', + importance: '@integer(1, 3)', + 'type|1': ['CN', 'US', 'JP', 'EU'], + 'status|1': ['published', 'draft'], + display_time: '@datetime', + comment_disabled: true, + pageviews: '@integer(300, 5000)', + image_uri, + platforms: ['a-platform'] + })) +} + +module.exports = [ + { + url: '/vue-element-admin/article/list', + type: 'get', + response: config => { + const { importance, type, title, page = 1, limit = 20, sort } = config.query + + let mockList = List.filter(item => { + if (importance && item.importance !== +importance) return false + if (type && item.type !== type) return false + if (title && item.title.indexOf(title) < 0) return false + return true + }) + + if (sort === '-id') { + mockList = mockList.reverse() + } + + const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)) + + return { + code: 20000, + data: { + total: mockList.length, + items: pageList + } + } + } + }, + + { + url: '/vue-element-admin/article/detail', + type: 'get', + response: config => { + const { id } = config.query + for (const article of List) { + if (article.id === +id) { + return { + code: 20000, + data: article + } + } + } + } + }, + + { + url: '/vue-element-admin/article/pv', + type: 'get', + response: _ => { + return { + code: 20000, + data: { + pvData: [ + { key: 'PC', pv: 1024 }, + { key: 'mobile', pv: 1024 }, + { key: 'ios', pv: 1024 }, + { key: 'android', pv: 1024 } + ] + } + } + } + }, + + { + url: '/vue-element-admin/article/create', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + }, + + { + url: '/vue-element-admin/article/update', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] + diff --git a/vue-element-admin-master/mock/index.js b/vue-element-admin-master/mock/index.js new file mode 100644 index 0000000..2eed65d --- /dev/null +++ b/vue-element-admin-master/mock/index.js @@ -0,0 +1,60 @@ +const Mock = require('mockjs') +const { param2Obj } = require('./utils') + +const user = require('./user') +const role = require('./role') +const article = require('./article') +const search = require('./remote-search') + +const mocks = [ + ...user, + ...role, + ...article, + ...search +] + +// for front mock +// please use it cautiously, it will redefine XMLHttpRequest, +// which will cause many of your third-party libraries to be invalidated(like progress event). +function mockXHR() { + // mock patch + // https://github.com/nuysoft/Mock/issues/300 + Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send + Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + + if (this.responseType) { + this.custom.xhr.responseType = this.responseType + } + } + this.proxy_send(...arguments) + } + + function XHR2ExpressReqWrap(respond) { + return function(options) { + let result = null + if (respond instanceof Function) { + const { body, type, url } = options + // https://expressjs.com/en/4x/api.html#req + result = respond({ + method: type, + body: JSON.parse(body), + query: param2Obj(url) + }) + } else { + result = respond + } + return Mock.mock(result) + } + } + + for (const i of mocks) { + Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) + } +} + +module.exports = { + mocks, + mockXHR +} diff --git a/vue-element-admin-master/mock/mock-server.js b/vue-element-admin-master/mock/mock-server.js new file mode 100644 index 0000000..8941ec0 --- /dev/null +++ b/vue-element-admin-master/mock/mock-server.js @@ -0,0 +1,81 @@ +const chokidar = require('chokidar') +const bodyParser = require('body-parser') +const chalk = require('chalk') +const path = require('path') +const Mock = require('mockjs') + +const mockDir = path.join(process.cwd(), 'mock') + +function registerRoutes(app) { + let mockLastIndex + const { mocks } = require('./index.js') + const mocksForServer = mocks.map(route => { + return responseFake(route.url, route.type, route.response) + }) + for (const mock of mocksForServer) { + app[mock.type](mock.url, mock.response) + mockLastIndex = app._router.stack.length + } + const mockRoutesLength = Object.keys(mocksForServer).length + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } +} + +function unregisterRoutes() { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + +module.exports = app => { + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + app.use(bodyParser.json()) + app.use(bodyParser.urlencoded({ + extended: true + })) + + const mockRoutes = registerRoutes(app) + var mockRoutesLength = mockRoutes.mockRoutesLength + var mockStartIndex = mockRoutes.mockStartIndex + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignored: /mock-server/, + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add') { + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength) + + // clear routes cache + unregisterRoutes() + + const mockRoutes = registerRoutes(app) + mockRoutesLength = mockRoutes.mockRoutesLength + mockStartIndex = mockRoutes.mockStartIndex + + console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) + } catch (error) { + console.log(chalk.redBright(error)) + } + } + }) +} diff --git a/vue-element-admin-master/mock/remote-search.js b/vue-element-admin-master/mock/remote-search.js new file mode 100644 index 0000000..8fc4926 --- /dev/null +++ b/vue-element-admin-master/mock/remote-search.js @@ -0,0 +1,51 @@ +const Mock = require('mockjs') + +const NameList = [] +const count = 100 + +for (let i = 0; i < count; i++) { + NameList.push(Mock.mock({ + name: '@first' + })) +} +NameList.push({ name: 'mock-Pan' }) + +module.exports = [ + // username search + { + url: '/vue-element-admin/search/user', + type: 'get', + response: config => { + const { name } = config.query + const mockNameList = NameList.filter(item => { + const lowerCaseName = item.name.toLowerCase() + return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0) + }) + return { + code: 20000, + data: { items: mockNameList } + } + } + }, + + // transaction list + { + url: '/vue-element-admin/transaction/list', + type: 'get', + response: _ => { + return { + code: 20000, + data: { + total: 20, + 'items|20': [{ + order_no: '@guid()', + timestamp: +Mock.Random.date('T'), + username: '@name()', + price: '@float(1000, 15000, 0, 2)', + 'status|1': ['success', 'pending'] + }] + } + } + } + } +] diff --git a/vue-element-admin-master/mock/role/index.js b/vue-element-admin-master/mock/role/index.js new file mode 100644 index 0000000..4643f00 --- /dev/null +++ b/vue-element-admin-master/mock/role/index.js @@ -0,0 +1,98 @@ +const Mock = require('mockjs') +const { deepClone } = require('../utils') +const { asyncRoutes, constantRoutes } = require('./routes.js') + +const routes = deepClone([...constantRoutes, ...asyncRoutes]) + +const roles = [ + { + key: 'admin', + name: 'admin', + description: 'Super Administrator. Have access to view all pages.', + routes: routes + }, + { + key: 'editor', + name: 'editor', + description: 'Normal Editor. Can see all pages except permission page', + routes: routes.filter(i => i.path !== '/permission')// just a mock + }, + { + key: 'visitor', + name: 'visitor', + description: 'Just a visitor. Can only see the home page and the document page', + routes: [{ + path: '', + redirect: 'dashboard', + children: [ + { + path: 'dashboard', + name: 'Dashboard', + meta: { title: 'dashboard', icon: 'dashboard' } + } + ] + }] + } +] + +module.exports = [ + // mock get all routes form server + { + url: '/vue-element-admin/routes', + type: 'get', + response: _ => { + return { + code: 20000, + data: routes + } + } + }, + + // mock get all roles form server + { + url: '/vue-element-admin/roles', + type: 'get', + response: _ => { + return { + code: 20000, + data: roles + } + } + }, + + // add role + { + url: '/vue-element-admin/role', + type: 'post', + response: { + code: 20000, + data: { + key: Mock.mock('@integer(300, 5000)') + } + } + }, + + // update role + { + url: '/vue-element-admin/role/[A-Za-z0-9]', + type: 'put', + response: { + code: 20000, + data: { + status: 'success' + } + } + }, + + // delete role + { + url: '/vue-element-admin/role/[A-Za-z0-9]', + type: 'delete', + response: { + code: 20000, + data: { + status: 'success' + } + } + } +] diff --git a/vue-element-admin-master/mock/role/routes.js b/vue-element-admin-master/mock/role/routes.js new file mode 100644 index 0000000..d33f162 --- /dev/null +++ b/vue-element-admin-master/mock/role/routes.js @@ -0,0 +1,530 @@ +// Just a mock data + +const constantRoutes = [ + { + path: '/redirect', + component: 'layout/Layout', + hidden: true, + children: [ + { + path: '/redirect/:path*', + component: 'views/redirect/index' + } + ] + }, + { + path: '/login', + component: 'views/login/index', + hidden: true + }, + { + path: '/auth-redirect', + component: 'views/login/auth-redirect', + hidden: true + }, + { + path: '/404', + component: 'views/error-page/404', + hidden: true + }, + { + path: '/401', + component: 'views/error-page/401', + hidden: true + }, + { + path: '', + component: 'layout/Layout', + redirect: 'dashboard', + children: [ + { + path: 'dashboard', + component: 'views/dashboard/index', + name: 'Dashboard', + meta: { title: 'Dashboard', icon: 'dashboard', affix: true } + } + ] + }, + { + path: '/documentation', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/documentation/index', + name: 'Documentation', + meta: { title: 'Documentation', icon: 'documentation', affix: true } + } + ] + }, + { + path: '/guide', + component: 'layout/Layout', + redirect: '/guide/index', + children: [ + { + path: 'index', + component: 'views/guide/index', + name: 'Guide', + meta: { title: 'Guide', icon: 'guide', noCache: true } + } + ] + } +] + +const asyncRoutes = [ + { + path: '/permission', + component: 'layout/Layout', + redirect: '/permission/index', + alwaysShow: true, + meta: { + title: 'Permission', + icon: 'lock', + roles: ['admin', 'editor'] + }, + children: [ + { + path: 'page', + component: 'views/permission/page', + name: 'PagePermission', + meta: { + title: 'Page Permission', + roles: ['admin'] + } + }, + { + path: 'directive', + component: 'views/permission/directive', + name: 'DirectivePermission', + meta: { + title: 'Directive Permission' + } + }, + { + path: 'role', + component: 'views/permission/role', + name: 'RolePermission', + meta: { + title: 'Role Permission', + roles: ['admin'] + } + } + ] + }, + + { + path: '/icon', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/icons/index', + name: 'Icons', + meta: { title: 'Icons', icon: 'icon', noCache: true } + } + ] + }, + + { + path: '/components', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'ComponentDemo', + meta: { + title: 'Components', + icon: 'component' + }, + children: [ + { + path: 'tinymce', + component: 'views/components-demo/tinymce', + name: 'TinymceDemo', + meta: { title: 'Tinymce' } + }, + { + path: 'markdown', + component: 'views/components-demo/markdown', + name: 'MarkdownDemo', + meta: { title: 'Markdown' } + }, + { + path: 'json-editor', + component: 'views/components-demo/json-editor', + name: 'JsonEditorDemo', + meta: { title: 'Json Editor' } + }, + { + path: 'split-pane', + component: 'views/components-demo/split-pane', + name: 'SplitpaneDemo', + meta: { title: 'SplitPane' } + }, + { + path: 'avatar-upload', + component: 'views/components-demo/avatar-upload', + name: 'AvatarUploadDemo', + meta: { title: 'Avatar Upload' } + }, + { + path: 'dropzone', + component: 'views/components-demo/dropzone', + name: 'DropzoneDemo', + meta: { title: 'Dropzone' } + }, + { + path: 'sticky', + component: 'views/components-demo/sticky', + name: 'StickyDemo', + meta: { title: 'Sticky' } + }, + { + path: 'count-to', + component: 'views/components-demo/count-to', + name: 'CountToDemo', + meta: { title: 'Count To' } + }, + { + path: 'mixin', + component: 'views/components-demo/mixin', + name: 'ComponentMixinDemo', + meta: { title: 'componentMixin' } + }, + { + path: 'back-to-top', + component: 'views/components-demo/back-to-top', + name: 'BackToTopDemo', + meta: { title: 'Back To Top' } + }, + { + path: 'drag-dialog', + component: 'views/components-demo/drag-dialog', + name: 'DragDialogDemo', + meta: { title: 'Drag Dialog' } + }, + { + path: 'drag-select', + component: 'views/components-demo/drag-select', + name: 'DragSelectDemo', + meta: { title: 'Drag Select' } + }, + { + path: 'dnd-list', + component: 'views/components-demo/dnd-list', + name: 'DndListDemo', + meta: { title: 'Dnd List' } + }, + { + path: 'drag-kanban', + component: 'views/components-demo/drag-kanban', + name: 'DragKanbanDemo', + meta: { title: 'Drag Kanban' } + } + ] + }, + { + path: '/charts', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'Charts', + meta: { + title: 'Charts', + icon: 'chart' + }, + children: [ + { + path: 'keyboard', + component: 'views/charts/keyboard', + name: 'KeyboardChart', + meta: { title: 'Keyboard Chart', noCache: true } + }, + { + path: 'line', + component: 'views/charts/line', + name: 'LineChart', + meta: { title: 'Line Chart', noCache: true } + }, + { + path: 'mixchart', + component: 'views/charts/mixChart', + name: 'MixChart', + meta: { title: 'Mix Chart', noCache: true } + } + ] + }, + { + path: '/nested', + component: 'layout/Layout', + redirect: '/nested/menu1/menu1-1', + name: 'Nested', + meta: { + title: 'Nested', + icon: 'nested' + }, + children: [ + { + path: 'menu1', + component: 'views/nested/menu1/index', + name: 'Menu1', + meta: { title: 'Menu1' }, + redirect: '/nested/menu1/menu1-1', + children: [ + { + path: 'menu1-1', + component: 'views/nested/menu1/menu1-1', + name: 'Menu1-1', + meta: { title: 'Menu1-1' } + }, + { + path: 'menu1-2', + component: 'views/nested/menu1/menu1-2', + name: 'Menu1-2', + redirect: '/nested/menu1/menu1-2/menu1-2-1', + meta: { title: 'Menu1-2' }, + children: [ + { + path: 'menu1-2-1', + component: 'views/nested/menu1/menu1-2/menu1-2-1', + name: 'Menu1-2-1', + meta: { title: 'Menu1-2-1' } + }, + { + path: 'menu1-2-2', + component: 'views/nested/menu1/menu1-2/menu1-2-2', + name: 'Menu1-2-2', + meta: { title: 'Menu1-2-2' } + } + ] + }, + { + path: 'menu1-3', + component: 'views/nested/menu1/menu1-3', + name: 'Menu1-3', + meta: { title: 'Menu1-3' } + } + ] + }, + { + path: 'menu2', + name: 'Menu2', + component: 'views/nested/menu2/index', + meta: { title: 'Menu2' } + } + ] + }, + + { + path: '/example', + component: 'layout/Layout', + redirect: '/example/list', + name: 'Example', + meta: { + title: 'Example', + icon: 'example' + }, + children: [ + { + path: 'create', + component: 'views/example/create', + name: 'CreateArticle', + meta: { title: 'Create Article', icon: 'edit' } + }, + { + path: 'edit/:id(\\d+)', + component: 'views/example/edit', + name: 'EditArticle', + meta: { title: 'Edit Article', noCache: true }, + hidden: true + }, + { + path: 'list', + component: 'views/example/list', + name: 'ArticleList', + meta: { title: 'Article List', icon: 'list' } + } + ] + }, + + { + path: '/tab', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/tab/index', + name: 'Tab', + meta: { title: 'Tab', icon: 'tab' } + } + ] + }, + + { + path: '/error', + component: 'layout/Layout', + redirect: 'noRedirect', + name: 'ErrorPages', + meta: { + title: 'Error Pages', + icon: '404' + }, + children: [ + { + path: '401', + component: 'views/error-page/401', + name: 'Page401', + meta: { title: 'Page 401', noCache: true } + }, + { + path: '404', + component: 'views/error-page/404', + name: 'Page404', + meta: { title: 'Page 404', noCache: true } + } + ] + }, + + { + path: '/error-log', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'log', + component: 'views/error-log/index', + name: 'ErrorLog', + meta: { title: 'Error Log', icon: 'bug' } + } + ] + }, + + { + path: '/excel', + component: 'layout/Layout', + redirect: '/excel/export-excel', + name: 'Excel', + meta: { + title: 'Excel', + icon: 'excel' + }, + children: [ + { + path: 'export-excel', + component: 'views/excel/export-excel', + name: 'ExportExcel', + meta: { title: 'Export Excel' } + }, + { + path: 'export-selected-excel', + component: 'views/excel/select-excel', + name: 'SelectExcel', + meta: { title: 'Select Excel' } + }, + { + path: 'export-merge-header', + component: 'views/excel/merge-header', + name: 'MergeHeader', + meta: { title: 'Merge Header' } + }, + { + path: 'upload-excel', + component: 'views/excel/upload-excel', + name: 'UploadExcel', + meta: { title: 'Upload Excel' } + } + ] + }, + + { + path: '/zip', + component: 'layout/Layout', + redirect: '/zip/download', + alwaysShow: true, + meta: { title: 'Zip', icon: 'zip' }, + children: [ + { + path: 'download', + component: 'views/zip/index', + name: 'ExportZip', + meta: { title: 'Export Zip' } + } + ] + }, + + { + path: '/pdf', + component: 'layout/Layout', + redirect: '/pdf/index', + children: [ + { + path: 'index', + component: 'views/pdf/index', + name: 'PDF', + meta: { title: 'PDF', icon: 'pdf' } + } + ] + }, + { + path: '/pdf/download', + component: 'views/pdf/download', + hidden: true + }, + + { + path: '/theme', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'index', + component: 'views/theme/index', + name: 'Theme', + meta: { title: 'Theme', icon: 'theme' } + } + ] + }, + + { + path: '/clipboard', + component: 'layout/Layout', + redirect: 'noRedirect', + children: [ + { + path: 'index', + component: 'views/clipboard/index', + name: 'ClipboardDemo', + meta: { title: 'Clipboard Demo', icon: 'clipboard' } + } + ] + }, + + { + path: '/i18n', + component: 'layout/Layout', + children: [ + { + path: 'index', + component: 'views/i18n-demo/index', + name: 'I18n', + meta: { title: 'I18n', icon: 'international' } + } + ] + }, + + { + path: 'external-link', + component: 'layout/Layout', + children: [ + { + path: 'https://github.com/PanJiaChen/vue-element-admin', + meta: { title: 'External Link', icon: 'link' } + } + ] + }, + + { path: '*', redirect: '/404', hidden: true } +] + +module.exports = { + constantRoutes, + asyncRoutes +} diff --git a/vue-element-admin-master/mock/user.js b/vue-element-admin-master/mock/user.js new file mode 100644 index 0000000..0f737a0 --- /dev/null +++ b/vue-element-admin-master/mock/user.js @@ -0,0 +1,84 @@ + +const tokens = { + admin: { + token: 'admin-token' + }, + editor: { + token: 'editor-token' + } +} + +const users = { + 'admin-token': { + roles: ['admin'], + introduction: 'I am a super administrator', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Super Admin' + }, + 'editor-token': { + roles: ['editor'], + introduction: 'I am an editor', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Normal Editor' + } +} + +module.exports = [ + // user login + // { + // url: '/vue-element-admin/user/login', + // type: 'post', + // response: config => { + // const { username } = config.body + // const token = tokens[username] + // + // // mock error + // if (!token) { + // return { + // code: 60204, + // message: 'Account and password are incorrect.' + // } + // } + // + // return { + // code: 20000, + // data: token + // } + // } + // }, + + // get user info + // { + // url: '/vue-element-admin/user/info\.*', + // type: 'get', + // response: config => { + // const { token } = config.query + // const info = users[token] + // + // // mock error + // if (!info) { + // return { + // code: 50008, + // message: 'Login failed, unable to get user details.' + // } + // } + // + // return { + // code: 20000, + // data: info + // } + // } + // }, + + // user logout + { + url: '/vue-element-admin/user/logout', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] diff --git a/vue-element-admin-master/mock/utils.js b/vue-element-admin-master/mock/utils.js new file mode 100644 index 0000000..f909a29 --- /dev/null +++ b/vue-element-admin-master/mock/utils.js @@ -0,0 +1,48 @@ +/** + * @param {string} url + * @returns {Object} + */ +function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +module.exports = { + param2Obj, + deepClone +} diff --git a/vue-element-admin-master/package.json b/vue-element-admin-master/package.json new file mode 100644 index 0000000..8966e65 --- /dev/null +++ b/vue-element-admin-master/package.json @@ -0,0 +1,110 @@ +{ + "name": "vue-element-admin", + "version": "4.4.0", + "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features", + "author": "Pan ", + "scripts": { + "dev": "vue-cli-service serve", + "lint": "eslint --ext .js,.vue src", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "new": "plop", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit" + }, + "dependencies": { + "axios": "0.18.1", + "clipboard": "2.0.4", + "codemirror": "5.45.0", + "core-js": "3.6.5", + "driver.js": "0.9.5", + "dropzone": "5.5.1", + "echarts": "4.2.1", + "element-ui": "2.13.2", + "file-saver": "2.0.1", + "fuse.js": "3.4.4", + "js-cookie": "2.2.0", + "jsonlint": "1.6.3", + "jszip": "3.2.1", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "2.4.0", + "screenfull": "4.2.0", + "script-loader": "0.7.2", + "sortablejs": "1.8.4", + "vue": "2.6.10", + "vue-count-to": "1.0.13", + "vue-router": "3.0.2", + "vue-splitpane": "1.0.4", + "vuedraggable": "2.20.0", + "vuex": "3.1.0", + "xlsx": "0.14.1" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.4", + "@vue/cli-plugin-eslint": "4.4.4", + "@vue/cli-plugin-unit-jest": "4.4.4", + "@vue/cli-service": "4.4.4", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "9.5.1", + "babel-eslint": "10.1.0", + "babel-jest": "23.6.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "2.4.2", + "chokidar": "2.1.5", + "connect": "3.6.6", + "eslint": "6.7.2", + "eslint-plugin-vue": "6.2.2", + "html-webpack-plugin": "3.2.0", + "husky": "1.3.1", + "lint-staged": "8.1.5", + "mockjs": "1.0.1-beta3", + "plop": "2.3.0", + "runjs": "4.3.2", + "sass": "1.26.2", + "sass-loader": "8.0.2", + "script-ext-html-webpack-plugin": "2.1.3", + "serve-static": "1.13.2", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.0", + "vue-template-compiler": "2.6.10" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], + "bugs": { + "url": "https://github.com/PanJiaChen/vue-element-admin/issues" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "license": "MIT", + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "repository": { + "type": "git", + "url": "git+https://github.com/PanJiaChen/vue-element-admin.git" + } +} diff --git a/vue-element-admin-master/plop-templates/component/index.hbs b/vue-element-admin-master/plop-templates/component/index.hbs new file mode 100644 index 0000000..7661055 --- /dev/null +++ b/vue-element-admin-master/plop-templates/component/index.hbs @@ -0,0 +1,26 @@ +{{#if template}} + +{{/if}} + +{{#if script}} + +{{/if}} + +{{#if style}} + +{{/if}} diff --git a/vue-element-admin-master/plop-templates/component/prompt.js b/vue-element-admin-master/plop-templates/component/prompt.js new file mode 100644 index 0000000..3723e8e --- /dev/null +++ b/vue-element-admin-master/plop-templates/component/prompt.js @@ -0,0 +1,55 @@ +const { notEmpty } = require('../utils.js') + +module.exports = { + description: 'generate vue component', + prompts: [{ + type: 'input', + name: 'name', + message: 'component name please', + validate: notEmpty('name') + }, + { + type: 'checkbox', + name: 'blocks', + message: 'Blocks:', + choices: [{ + name: '