From 7711942d07ec97ed7af31a576744952cf5f38bf0 Mon Sep 17 00:00:00 2001 From: lensfrex Date: Fri, 21 Feb 2025 10:46:47 +0800 Subject: [PATCH] source upload --- .gitignore | 36 + backend/.gitignore | 40 + backend/Dockerfile | 7 + backend/docker-compose.yml | 54 + backend/docker/database.sql | 581 ++ backend/pom.xml | 273 + backend/src/main/java/rd/BackendMain.java | 26 + .../main/java/rd/configure/CorsFilter.java | 36 + ...tedGenericJackson2JsonRedisSerializer.java | 11 + .../java/rd/configure/JacksonConfigure.java | 29 + .../java/rd/configure/MybatisConfigure.java | 17 + .../java/rd/configure/OkhttpConfigure.java | 13 + .../java/rd/configure/OpenAPIConfigure.java | 32 + .../main/java/rd/configure/RdConfigure.java | 12 + .../java/rd/configure/RedisConfigure.java | 29 + .../java/rd/configure/SaTokenConfigure.java | 15 + .../rd/configure/ThreadPoolConfigure.java | 51 + .../src/main/java/rd/controller/Health.java | 13 + .../activity/ActivityController.java | 44 + .../activity/AdminActivityController.java | 44 + .../AdminActivityTargetController.java | 138 + .../course/AdminCourseController.java | 59 + .../controller/course/CourseController.java | 175 + .../course/CourseTeacherController.java | 72 + .../course/StudentCourseController.java | 76 + .../major/AdminMajorController.java | 35 + .../java/rd/controller/major/PublicMajor.java | 34 + .../schedule/AdminScheduleController.java | 68 + .../schedule/ScheduleController.java | 59 + .../schedule/StudentScheduleController.java | 102 + .../schedule/TeacherScheduleController.java | 32 + .../rd/controller/score/ScoreController.java | 66 + .../score/StudentScoreController.java | 31 + .../score/TeacherScoreController.java | 43 + .../student/AdminStudentController.java | 79 + .../controller/student/StudentController.java | 38 + .../teacher/AdminTeacherController.java | 52 + .../controller/teacher/TeacherController.java | 35 + .../controller/user/UserAuthController.java | 120 + .../controller/user/UserInfoController.java | 35 + .../main/java/rd/dao/BatchSQLInjector.java | 19 + .../dao/mapper/activity/ActivityMapper.java | 16 + .../mapper/activity/ActivityTargetMapper.java | 12 + .../rd/dao/mapper/course/CourseMapper.java | 36 + .../mapper/course/CourseSelectionMapper.java | 35 + .../mapper/course/CourseTeacherMapper.java | 22 + .../experiment/ExperimentItemMapper.java | 10 + .../java/rd/dao/mapper/major/MajorMapper.java | 9 + .../mapper/schedule/CourseScheduleMapper.java | 22 + .../mapper/score/ExperimentScoreMapper.java | 9 + .../java/rd/dao/mapper/score/ScoreMapper.java | 23 + .../rd/dao/mapper/user/StudentInfoMapper.java | 11 + .../rd/dao/mapper/user/TeacherInfoMapper.java | 9 + .../rd/dao/mapper/user/UserBasicMapper.java | 9 + .../rd/dao/type/DoubleListTypeHandler.java | 77 + .../rd/dao/type/FloatListTypeHandler.java | 77 + .../rd/dao/type/IntegerListTypeHandler.java | 67 + .../java/rd/dao/type/LongListTypeHandler.java | 69 + .../rd/dao/type/ShortListTypeHandler.java | 69 + .../rd/dao/type/StringListTypeHandler.java | 55 + .../type/json/BaseJsonListTypeHandler.java | 9 + .../rd/dao/type/json/BaseJsonTypeHandler.java | 63 + .../rd/dao/type/json/FloatMapTypeHandler.java | 15 + .../json/UsualScoreItemListTypeHandler.java | 9 + backend/src/main/java/rd/data/Constants.java | 20 + .../main/java/rd/data/code/ServiceCode.java | 49 + .../data/db/CourseScheduleSelectionInfo.java | 76 + .../db/CourseScheduleWithCourseIdName.java | 84 + .../main/java/rd/data/db/UsualScoreItem.java | 7 + .../main/java/rd/data/db/table/Activity.java | 68 + .../java/rd/data/db/table/ActivityTarget.java | 54 + .../main/java/rd/data/db/table/Course.java | 63 + .../java/rd/data/db/table/CourseSchedule.java | 85 + .../rd/data/db/table/CourseSelection.java | 52 + .../java/rd/data/db/table/CourseTeacher.java | 41 + .../java/rd/data/db/table/ExperimentItem.java | 42 + .../rd/data/db/table/ExperimentScore.java | 17 + .../src/main/java/rd/data/db/table/Major.java | 58 + .../src/main/java/rd/data/db/table/Score.java | 38 + .../java/rd/data/db/table/StudentInfo.java | 64 + .../java/rd/data/db/table/TeacherInfo.java | 43 + .../main/java/rd/data/db/table/UserBasic.java | 51 + .../java/rd/data/dto/FileByteDataWrapper.java | 13 + .../dto/activity/ActivityTargetAddDto.java | 23 + .../dto/activity/ActivityTargetUpdateDto.java | 23 + .../java/rd/data/dto/course/CourseDTO.java | 41 + .../rd/data/dto/course/CourseNameDTO.java | 19 + .../CourseScheduleSelectionInfoDTO.java | 76 + .../data/dto/schedule/CourseScheduleDTO.java | 45 + .../dto/schedule/CourseScheduleDetailDTO.java | 75 + .../CourseScheduleWithCourseNameDTO.java | 67 + .../schedule/NotSelectStudentExportDto.java | 11 + .../schedule/SelectedStudentExportDto.java | 12 + .../rd/data/dto/score/CourseScoreInfoDto.java | 24 + .../rd/data/dto/score/ScoreExportDto.java | 20 + .../java/rd/data/dto/score/StudentScore.java | 18 + .../rd/data/dto/user/UserBasicInfoDTO.java | 4 + .../dto/user/student/BasicStudentInfoDto.java | 4 + .../BasicStudentInfoWithMajorNameDto.java | 4 + .../data/dto/user/student/NewStudentDTO.java | 7 + .../dto/user/student/StudentUserBasicDTO.java | 7 + .../dto/user/student/StudentUserInfoDTO.java | 10 + .../data/dto/user/teacher/TeacherUserDTO.java | 7 + .../dto/user/teacher/TeacherUserInfoDTO.java | 7 + .../src/main/java/rd/data/enums/UserType.java | 24 + .../activity/ActivityTargetAddRequest.java | 23 + .../activity/ActivityTargetUpadeRequest.java | 23 + .../model/request/admin/ActivityInfoDto.java | 14 + .../admin/StudentAddWithMajorIdRequest.java | 7 + .../admin/StudentAddWithMajorNameRequest.java | 7 + .../request/admin/StudentBatchAddRequest.java | 9 + .../request/admin/TeacherAddRequest.java | 7 + .../model/request/auth/UserLoginRequest.java | 5 + .../model/request/course/CourseRequest.java | 26 + .../course/CourseTeacherUpdateRequest.java | 10 + .../schedule/CourseScheduleRequest.java | 20 + .../model/response/PaginationWrapper.java | 7 + .../java/rd/data/model/response/Response.java | 48 + .../activity/ActivityTargetResponse.java | 44 + .../ActivityTargetWithClassNameResponse.java | 44 + .../auth/UserLoginStatusResponse.java | 7 + .../course/CandidateCourseResponse.java | 29 + .../model/response/course/CourseResponse.java | 31 + .../course/CourseTeacherResponse.java | 20 + .../response/score/StudentScoreSummary.java | 7 + .../model/response/user/UserBasicInfo.java | 15 + .../rd/exception/GlobalExceptionHandler.java | 144 + .../java/rd/exception/ServiceException.java | 49 + .../src/main/java/rd/rpc/WusthelperApi.java | 81 + .../java/rd/rpc/model/WusthelperResponse.java | 4 + .../rd/rpc/model/WusthelperStudentInfo.java | 18 + .../rd/service/activity/ActivityService.java | 272 + .../activity/ActivityTargetService.java | 199 + .../auth/UserTypeStpInterfaceImpl.java | 82 + .../java/rd/service/cache/GlobalCache.java | 95 + .../java/rd/service/course/CourseService.java | 406 + .../service/course/CourseTeacherService.java | 149 + .../service/experiment/ExperimentService.java | 8 + .../java/rd/service/major/MajorService.java | 137 + .../schedule/CourseScheduleService.java | 277 + .../StudentCourseScheduleService.java | 113 + .../TeacherCourseScheduleService.java | 22 + .../java/rd/service/score/ScoreService.java | 167 + .../rd/service/user/StudentUserService.java | 319 + .../rd/service/user/TeacherUserService.java | 141 + .../rd/service/user/UserBasicService.java | 190 + .../java/rd/service/user/UserInfoService.java | 108 + backend/src/main/java/rd/util/StringUtil.java | 112 + .../src/main/resources/application-dev.yml | 51 + backend/src/main/resources/application.yml | 50 + backend/src/main/resources/logback.xml | 54 + .../main/resources/mapper/ActivityMapper.xml | 10 + .../resources/mapper/ActivityTargetMapper.xml | 7 + .../main/resources/mapper/CourseMapper.xml | 36 + .../resources/mapper/CourseScheduleMapper.xml | 56 + .../mapper/CourseSelectionMapper.xml | 91 + .../resources/mapper/CourseTeacherMapper.xml | 37 + .../src/main/resources/mapper/ScoreMapper.xml | 50 + .../resources/mapper/StudentInfoMapper.xml | 9 + .../src/main/resources/template_score.xlsx | Bin 0 -> 10778 bytes .../main/resources/template_student_list.xlsx | Bin 0 -> 10613 bytes .../template_student_list_not_selected.xlsx | Bin 0 -> 10674 bytes doc/features.md | 48 + frontend/.editorconfig | 9 + frontend/.eslintignore | 7 + frontend/.eslintrc.cjs | 66 + frontend/.gitignore | 33 + frontend/.npmrc | 3 + frontend/config.js | 4 + frontend/index.html | 20 + frontend/jsconfig.json | 36 + frontend/package-lock.json | 9067 +++++++++++++++++ frontend/package.json | 56 + frontend/postcss.config.cjs | 28 + frontend/public/favicon.ico | Bin 0 -> 270398 bytes frontend/public/icon.xcf | Bin 0 -> 51580 bytes frontend/public/icons/apple-icon-120x120.png | Bin 0 -> 4762 bytes frontend/public/icons/apple-icon-152x152.png | Bin 0 -> 5765 bytes frontend/public/icons/apple-icon-167x167.png | Bin 0 -> 6644 bytes frontend/public/icons/apple-icon-180x180.png | Bin 0 -> 7179 bytes frontend/public/icons/apple-icon-384x384.png | Bin 0 -> 15561 bytes frontend/public/icons/favicon-128x128.png | Bin 0 -> 4694 bytes frontend/public/icons/favicon-16x16.png | Bin 0 -> 359 bytes frontend/public/icons/favicon-32x32.png | Bin 0 -> 927 bytes frontend/public/icons/favicon-96x96.png | Bin 0 -> 3832 bytes frontend/public/icons/icon-128x128.png | Bin 0 -> 4683 bytes frontend/public/icons/icon-192x192.png | Bin 0 -> 14340 bytes frontend/public/icons/icon-256x256.ico | Bin 0 -> 270398 bytes frontend/public/icons/icon-256x256.png | Bin 0 -> 8807 bytes frontend/public/icons/icon-384x384.png | Bin 0 -> 15561 bytes frontend/public/icons/icon-64x64.png | Bin 0 -> 2323 bytes frontend/public/icons/info.svg | 1 + frontend/public/icons/ms-icon-144x144.png | Bin 0 -> 5241 bytes frontend/public/icons/personal.svg | 1 + frontend/public/icons/schedule.svg | 1 + frontend/public/icons/score.svg | 1 + frontend/public/icons/selection.svg | 1 + frontend/quasar.config.js | 212 + frontend/quasar.extensions.json | 3 + frontend/src-pwa/custom-service-worker.js | 30 + frontend/src-pwa/manifest.json | 36 + frontend/src-pwa/pwa-flag.d.ts | 10 + frontend/src-pwa/register-service-worker.js | 41 + frontend/src/App.vue | 35 + frontend/src/api/activity/activity.js | 72 + frontend/src/api/activity/activity_target.js | 118 + frontend/src/api/api-urls.js | 119 + frontend/src/api/api.js | 0 frontend/src/api/auth/authApi.js | 39 + frontend/src/api/client.js | 70 + frontend/src/api/course/course.js | 200 + frontend/src/api/course/course_schedule.js | 79 + frontend/src/api/course/course_selection.js | 69 + frontend/src/api/course/course_teacher.js | 84 + frontend/src/api/major/major.js | 56 + frontend/src/api/score/score.js | 61 + frontend/src/api/student/student.js | 76 + frontend/src/api/teacher/teacher.js | 64 + frontend/src/api/user/user.js | 20 + frontend/src/assets/77491171_p0.jpg | Bin 0 -> 468351 bytes frontend/src/assets/icon_zero.png | Bin 0 -> 24550 bytes frontend/src/assets/icon_zero_128x128.png | Bin 0 -> 13095 bytes frontend/src/assets/icon_zero_700x256.png | Bin 0 -> 27342 bytes frontend/src/assets/icon_zero_750x256-2.png | Bin 0 -> 39298 bytes frontend/src/assets/icon_zero_750x256.png | Bin 0 -> 39306 bytes frontend/src/assets/quasar-logo-vertical.svg | 15 + frontend/src/boot/.gitkeep | 0 frontend/src/component/AsideAvatar.vue | 22 + frontend/src/component/TitledDialog.vue | 36 + frontend/src/css/app.scss | 47 + frontend/src/css/quasar.variables.scss | 25 + frontend/src/css/tailwind.css | 3 + frontend/src/pages/ErrorNotFound.vue | 27 + .../admin/activity/AdminActivityAddPane.vue | 117 + .../admin/activity/AdminActivityEditPane.vue | 116 + .../admin/activity/AdminActivityPage.vue | 300 + .../targets/AdminActivityTargetAddPane.vue | 205 + .../targets/AdminActivityTargetEditPane.vue | 229 + .../targets/AdminActivityTargetPage.vue | 348 + .../pages/admin/course/AdminCourseAddPane.vue | 105 + .../admin/course/AdminCourseEditPane.vue | 110 + .../pages/admin/course/AdminCoursePage.vue | 291 + .../course/AdminCourseSelectionStatusPage.vue | 368 + .../AdminCourseTeacherSelectingPane.vue | 223 + frontend/src/pages/admin/main/AdminMain.vue | 135 + .../pages/admin/main/AdminUserinfoPane.vue | 125 + .../schedule/AdminCourseScheduleAddPane.vue | 183 + .../schedule/AdminCourseScheduleClonePane.vue | 138 + .../schedule/AdminCourseScheduleEditPane.vue | 185 + .../schedule/AdminCourseSchedulePage.vue | 388 + .../admin/schedule/AdminTimeSelectView.vue | 177 + .../admin/student/AdminStudentAddPane.vue | 148 + .../admin/student/AdminStudentImportPane.vue | 281 + .../pages/admin/student/AdminStudentPage.vue | 235 + .../admin/teacher/AdminTeacherAddPane.vue | 90 + .../admin/teacher/AdminTeacherEditPane.vue | 84 + .../pages/admin/teacher/AdminTeacherPage.vue | 303 + frontend/src/pages/index/FooterInfo.vue | 23 + frontend/src/pages/index/LoginCard.vue | 130 + frontend/src/pages/index/LoginIndexPage.vue | 25 + .../course/StudentCandidateCourseListPage.vue | 124 + .../student/course/StudentCourseCard.vue | 76 + .../course/StudentCourseSelectingnPage.vue | 91 + .../StudentCourseSelectingConfirmPane.vue | 140 + .../view/StudentCourseSelectingView.vue | 376 + .../src/pages/student/main/StudentMain.vue | 129 + .../student/main/StudentUserinfoPane.vue | 143 + .../schedule/StudentCourseTablePage.vue | 102 + .../schedule/StudentCourseTableView.vue | 327 + .../pages/student/score/StudentScorePage.vue | 149 + .../teacher/course/TeacherCourseCard.vue | 86 + .../teacher/course/TeacherCourseListPage.vue | 176 + .../teacher/course/TeacherCourseTableView.vue | 321 + .../src/pages/teacher/main/TeacherMain.vue | 117 + .../teacher/main/TeacherUserinfoPane.vue | 121 + .../score/TeacherClassStudentScorePage.vue | 326 + .../teacher/score/TeacherScoreImportPane.vue | 373 + .../pages/teacher/score/TeacherScorePage.vue | 127 + frontend/src/router/index.js | 25 + frontend/src/router/routes.js | 87 + frontend/src/stores/activity.js | 20 + frontend/src/stores/index.js | 21 + frontend/src/stores/majors.js | 52 + frontend/src/stores/store-flag.d.ts | 10 + frontend/src/stores/user.js | 38 + frontend/src/utils/sleep.js | 12 + frontend/src/utils/term.js | 30 + frontend/tailwind.config.js | 9 + frontend/vite.config.js | 10 + frontend/yarn.lock | 5253 ++++++++++ 290 files changed, 33848 insertions(+) create mode 100644 .gitignore create mode 100644 backend/.gitignore create mode 100644 backend/Dockerfile create mode 100644 backend/docker-compose.yml create mode 100644 backend/docker/database.sql create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/rd/BackendMain.java create mode 100644 backend/src/main/java/rd/configure/CorsFilter.java create mode 100644 backend/src/main/java/rd/configure/JSR310SupportedGenericJackson2JsonRedisSerializer.java create mode 100644 backend/src/main/java/rd/configure/JacksonConfigure.java create mode 100644 backend/src/main/java/rd/configure/MybatisConfigure.java create mode 100644 backend/src/main/java/rd/configure/OkhttpConfigure.java create mode 100644 backend/src/main/java/rd/configure/OpenAPIConfigure.java create mode 100644 backend/src/main/java/rd/configure/RdConfigure.java create mode 100644 backend/src/main/java/rd/configure/RedisConfigure.java create mode 100644 backend/src/main/java/rd/configure/SaTokenConfigure.java create mode 100644 backend/src/main/java/rd/configure/ThreadPoolConfigure.java create mode 100644 backend/src/main/java/rd/controller/Health.java create mode 100644 backend/src/main/java/rd/controller/activity/ActivityController.java create mode 100644 backend/src/main/java/rd/controller/activity/AdminActivityController.java create mode 100644 backend/src/main/java/rd/controller/activity/AdminActivityTargetController.java create mode 100644 backend/src/main/java/rd/controller/course/AdminCourseController.java create mode 100644 backend/src/main/java/rd/controller/course/CourseController.java create mode 100644 backend/src/main/java/rd/controller/course/CourseTeacherController.java create mode 100644 backend/src/main/java/rd/controller/course/StudentCourseController.java create mode 100644 backend/src/main/java/rd/controller/major/AdminMajorController.java create mode 100644 backend/src/main/java/rd/controller/major/PublicMajor.java create mode 100644 backend/src/main/java/rd/controller/schedule/AdminScheduleController.java create mode 100644 backend/src/main/java/rd/controller/schedule/ScheduleController.java create mode 100644 backend/src/main/java/rd/controller/schedule/StudentScheduleController.java create mode 100644 backend/src/main/java/rd/controller/schedule/TeacherScheduleController.java create mode 100644 backend/src/main/java/rd/controller/score/ScoreController.java create mode 100644 backend/src/main/java/rd/controller/score/StudentScoreController.java create mode 100644 backend/src/main/java/rd/controller/score/TeacherScoreController.java create mode 100644 backend/src/main/java/rd/controller/student/AdminStudentController.java create mode 100644 backend/src/main/java/rd/controller/student/StudentController.java create mode 100644 backend/src/main/java/rd/controller/teacher/AdminTeacherController.java create mode 100644 backend/src/main/java/rd/controller/teacher/TeacherController.java create mode 100644 backend/src/main/java/rd/controller/user/UserAuthController.java create mode 100644 backend/src/main/java/rd/controller/user/UserInfoController.java create mode 100644 backend/src/main/java/rd/dao/BatchSQLInjector.java create mode 100644 backend/src/main/java/rd/dao/mapper/activity/ActivityMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/activity/ActivityTargetMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/course/CourseMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/course/CourseSelectionMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/course/CourseTeacherMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/experiment/ExperimentItemMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/major/MajorMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/schedule/CourseScheduleMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/score/ExperimentScoreMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/score/ScoreMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/user/StudentInfoMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/user/TeacherInfoMapper.java create mode 100644 backend/src/main/java/rd/dao/mapper/user/UserBasicMapper.java create mode 100644 backend/src/main/java/rd/dao/type/DoubleListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/FloatListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/IntegerListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/LongListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/ShortListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/StringListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/json/BaseJsonListTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/json/BaseJsonTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/json/FloatMapTypeHandler.java create mode 100644 backend/src/main/java/rd/dao/type/json/UsualScoreItemListTypeHandler.java create mode 100644 backend/src/main/java/rd/data/Constants.java create mode 100644 backend/src/main/java/rd/data/code/ServiceCode.java create mode 100644 backend/src/main/java/rd/data/db/CourseScheduleSelectionInfo.java create mode 100644 backend/src/main/java/rd/data/db/CourseScheduleWithCourseIdName.java create mode 100644 backend/src/main/java/rd/data/db/UsualScoreItem.java create mode 100644 backend/src/main/java/rd/data/db/table/Activity.java create mode 100644 backend/src/main/java/rd/data/db/table/ActivityTarget.java create mode 100644 backend/src/main/java/rd/data/db/table/Course.java create mode 100644 backend/src/main/java/rd/data/db/table/CourseSchedule.java create mode 100644 backend/src/main/java/rd/data/db/table/CourseSelection.java create mode 100644 backend/src/main/java/rd/data/db/table/CourseTeacher.java create mode 100644 backend/src/main/java/rd/data/db/table/ExperimentItem.java create mode 100644 backend/src/main/java/rd/data/db/table/ExperimentScore.java create mode 100644 backend/src/main/java/rd/data/db/table/Major.java create mode 100644 backend/src/main/java/rd/data/db/table/Score.java create mode 100644 backend/src/main/java/rd/data/db/table/StudentInfo.java create mode 100644 backend/src/main/java/rd/data/db/table/TeacherInfo.java create mode 100644 backend/src/main/java/rd/data/db/table/UserBasic.java create mode 100644 backend/src/main/java/rd/data/dto/FileByteDataWrapper.java create mode 100644 backend/src/main/java/rd/data/dto/activity/ActivityTargetAddDto.java create mode 100644 backend/src/main/java/rd/data/dto/activity/ActivityTargetUpdateDto.java create mode 100644 backend/src/main/java/rd/data/dto/course/CourseDTO.java create mode 100644 backend/src/main/java/rd/data/dto/course/CourseNameDTO.java create mode 100644 backend/src/main/java/rd/data/dto/course/CourseScheduleSelectionInfoDTO.java create mode 100644 backend/src/main/java/rd/data/dto/schedule/CourseScheduleDTO.java create mode 100644 backend/src/main/java/rd/data/dto/schedule/CourseScheduleDetailDTO.java create mode 100644 backend/src/main/java/rd/data/dto/schedule/CourseScheduleWithCourseNameDTO.java create mode 100644 backend/src/main/java/rd/data/dto/schedule/NotSelectStudentExportDto.java create mode 100644 backend/src/main/java/rd/data/dto/schedule/SelectedStudentExportDto.java create mode 100644 backend/src/main/java/rd/data/dto/score/CourseScoreInfoDto.java create mode 100644 backend/src/main/java/rd/data/dto/score/ScoreExportDto.java create mode 100644 backend/src/main/java/rd/data/dto/score/StudentScore.java create mode 100644 backend/src/main/java/rd/data/dto/user/UserBasicInfoDTO.java create mode 100644 backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoDto.java create mode 100644 backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoWithMajorNameDto.java create mode 100644 backend/src/main/java/rd/data/dto/user/student/NewStudentDTO.java create mode 100644 backend/src/main/java/rd/data/dto/user/student/StudentUserBasicDTO.java create mode 100644 backend/src/main/java/rd/data/dto/user/student/StudentUserInfoDTO.java create mode 100644 backend/src/main/java/rd/data/dto/user/teacher/TeacherUserDTO.java create mode 100644 backend/src/main/java/rd/data/dto/user/teacher/TeacherUserInfoDTO.java create mode 100644 backend/src/main/java/rd/data/enums/UserType.java create mode 100644 backend/src/main/java/rd/data/model/request/activity/ActivityTargetAddRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/activity/ActivityTargetUpadeRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/admin/ActivityInfoDto.java create mode 100644 backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorIdRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorNameRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/admin/StudentBatchAddRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/admin/TeacherAddRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/auth/UserLoginRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/course/CourseRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/course/CourseTeacherUpdateRequest.java create mode 100644 backend/src/main/java/rd/data/model/request/schedule/CourseScheduleRequest.java create mode 100644 backend/src/main/java/rd/data/model/response/PaginationWrapper.java create mode 100644 backend/src/main/java/rd/data/model/response/Response.java create mode 100644 backend/src/main/java/rd/data/model/response/activity/ActivityTargetResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/activity/ActivityTargetWithClassNameResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/auth/UserLoginStatusResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/course/CandidateCourseResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/course/CourseResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/course/CourseTeacherResponse.java create mode 100644 backend/src/main/java/rd/data/model/response/score/StudentScoreSummary.java create mode 100644 backend/src/main/java/rd/data/model/response/user/UserBasicInfo.java create mode 100644 backend/src/main/java/rd/exception/GlobalExceptionHandler.java create mode 100644 backend/src/main/java/rd/exception/ServiceException.java create mode 100644 backend/src/main/java/rd/rpc/WusthelperApi.java create mode 100644 backend/src/main/java/rd/rpc/model/WusthelperResponse.java create mode 100644 backend/src/main/java/rd/rpc/model/WusthelperStudentInfo.java create mode 100644 backend/src/main/java/rd/service/activity/ActivityService.java create mode 100644 backend/src/main/java/rd/service/activity/ActivityTargetService.java create mode 100644 backend/src/main/java/rd/service/auth/UserTypeStpInterfaceImpl.java create mode 100644 backend/src/main/java/rd/service/cache/GlobalCache.java create mode 100644 backend/src/main/java/rd/service/course/CourseService.java create mode 100644 backend/src/main/java/rd/service/course/CourseTeacherService.java create mode 100644 backend/src/main/java/rd/service/experiment/ExperimentService.java create mode 100644 backend/src/main/java/rd/service/major/MajorService.java create mode 100644 backend/src/main/java/rd/service/schedule/CourseScheduleService.java create mode 100644 backend/src/main/java/rd/service/schedule/StudentCourseScheduleService.java create mode 100644 backend/src/main/java/rd/service/schedule/TeacherCourseScheduleService.java create mode 100644 backend/src/main/java/rd/service/score/ScoreService.java create mode 100644 backend/src/main/java/rd/service/user/StudentUserService.java create mode 100644 backend/src/main/java/rd/service/user/TeacherUserService.java create mode 100644 backend/src/main/java/rd/service/user/UserBasicService.java create mode 100644 backend/src/main/java/rd/service/user/UserInfoService.java create mode 100644 backend/src/main/java/rd/util/StringUtil.java create mode 100644 backend/src/main/resources/application-dev.yml create mode 100644 backend/src/main/resources/application.yml create mode 100644 backend/src/main/resources/logback.xml create mode 100644 backend/src/main/resources/mapper/ActivityMapper.xml create mode 100644 backend/src/main/resources/mapper/ActivityTargetMapper.xml create mode 100644 backend/src/main/resources/mapper/CourseMapper.xml create mode 100644 backend/src/main/resources/mapper/CourseScheduleMapper.xml create mode 100644 backend/src/main/resources/mapper/CourseSelectionMapper.xml create mode 100644 backend/src/main/resources/mapper/CourseTeacherMapper.xml create mode 100644 backend/src/main/resources/mapper/ScoreMapper.xml create mode 100644 backend/src/main/resources/mapper/StudentInfoMapper.xml create mode 100644 backend/src/main/resources/template_score.xlsx create mode 100644 backend/src/main/resources/template_student_list.xlsx create mode 100644 backend/src/main/resources/template_student_list_not_selected.xlsx create mode 100644 doc/features.md create mode 100644 frontend/.editorconfig create mode 100644 frontend/.eslintignore create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/.gitignore create mode 100644 frontend/.npmrc create mode 100644 frontend/config.js create mode 100644 frontend/index.html create mode 100644 frontend/jsconfig.json create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.cjs create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/icon.xcf create mode 100644 frontend/public/icons/apple-icon-120x120.png create mode 100644 frontend/public/icons/apple-icon-152x152.png create mode 100644 frontend/public/icons/apple-icon-167x167.png create mode 100644 frontend/public/icons/apple-icon-180x180.png create mode 100644 frontend/public/icons/apple-icon-384x384.png create mode 100644 frontend/public/icons/favicon-128x128.png create mode 100644 frontend/public/icons/favicon-16x16.png create mode 100644 frontend/public/icons/favicon-32x32.png create mode 100644 frontend/public/icons/favicon-96x96.png create mode 100644 frontend/public/icons/icon-128x128.png create mode 100644 frontend/public/icons/icon-192x192.png create mode 100644 frontend/public/icons/icon-256x256.ico create mode 100644 frontend/public/icons/icon-256x256.png create mode 100644 frontend/public/icons/icon-384x384.png create mode 100644 frontend/public/icons/icon-64x64.png create mode 100644 frontend/public/icons/info.svg create mode 100644 frontend/public/icons/ms-icon-144x144.png create mode 100644 frontend/public/icons/personal.svg create mode 100644 frontend/public/icons/schedule.svg create mode 100644 frontend/public/icons/score.svg create mode 100644 frontend/public/icons/selection.svg create mode 100644 frontend/quasar.config.js create mode 100644 frontend/quasar.extensions.json create mode 100644 frontend/src-pwa/custom-service-worker.js create mode 100644 frontend/src-pwa/manifest.json create mode 100644 frontend/src-pwa/pwa-flag.d.ts create mode 100644 frontend/src-pwa/register-service-worker.js create mode 100644 frontend/src/App.vue create mode 100644 frontend/src/api/activity/activity.js create mode 100644 frontend/src/api/activity/activity_target.js create mode 100644 frontend/src/api/api-urls.js create mode 100644 frontend/src/api/api.js create mode 100644 frontend/src/api/auth/authApi.js create mode 100644 frontend/src/api/client.js create mode 100644 frontend/src/api/course/course.js create mode 100644 frontend/src/api/course/course_schedule.js create mode 100644 frontend/src/api/course/course_selection.js create mode 100644 frontend/src/api/course/course_teacher.js create mode 100644 frontend/src/api/major/major.js create mode 100644 frontend/src/api/score/score.js create mode 100644 frontend/src/api/student/student.js create mode 100644 frontend/src/api/teacher/teacher.js create mode 100644 frontend/src/api/user/user.js create mode 100644 frontend/src/assets/77491171_p0.jpg create mode 100644 frontend/src/assets/icon_zero.png create mode 100644 frontend/src/assets/icon_zero_128x128.png create mode 100644 frontend/src/assets/icon_zero_700x256.png create mode 100644 frontend/src/assets/icon_zero_750x256-2.png create mode 100644 frontend/src/assets/icon_zero_750x256.png create mode 100644 frontend/src/assets/quasar-logo-vertical.svg create mode 100644 frontend/src/boot/.gitkeep create mode 100644 frontend/src/component/AsideAvatar.vue create mode 100644 frontend/src/component/TitledDialog.vue create mode 100644 frontend/src/css/app.scss create mode 100644 frontend/src/css/quasar.variables.scss create mode 100644 frontend/src/css/tailwind.css create mode 100644 frontend/src/pages/ErrorNotFound.vue create mode 100644 frontend/src/pages/admin/activity/AdminActivityAddPane.vue create mode 100644 frontend/src/pages/admin/activity/AdminActivityEditPane.vue create mode 100644 frontend/src/pages/admin/activity/AdminActivityPage.vue create mode 100644 frontend/src/pages/admin/activity/targets/AdminActivityTargetAddPane.vue create mode 100644 frontend/src/pages/admin/activity/targets/AdminActivityTargetEditPane.vue create mode 100644 frontend/src/pages/admin/activity/targets/AdminActivityTargetPage.vue create mode 100644 frontend/src/pages/admin/course/AdminCourseAddPane.vue create mode 100644 frontend/src/pages/admin/course/AdminCourseEditPane.vue create mode 100644 frontend/src/pages/admin/course/AdminCoursePage.vue create mode 100644 frontend/src/pages/admin/course/AdminCourseSelectionStatusPage.vue create mode 100644 frontend/src/pages/admin/course/AdminCourseTeacherSelectingPane.vue create mode 100644 frontend/src/pages/admin/main/AdminMain.vue create mode 100644 frontend/src/pages/admin/main/AdminUserinfoPane.vue create mode 100644 frontend/src/pages/admin/schedule/AdminCourseScheduleAddPane.vue create mode 100644 frontend/src/pages/admin/schedule/AdminCourseScheduleClonePane.vue create mode 100644 frontend/src/pages/admin/schedule/AdminCourseScheduleEditPane.vue create mode 100644 frontend/src/pages/admin/schedule/AdminCourseSchedulePage.vue create mode 100644 frontend/src/pages/admin/schedule/AdminTimeSelectView.vue create mode 100644 frontend/src/pages/admin/student/AdminStudentAddPane.vue create mode 100644 frontend/src/pages/admin/student/AdminStudentImportPane.vue create mode 100644 frontend/src/pages/admin/student/AdminStudentPage.vue create mode 100644 frontend/src/pages/admin/teacher/AdminTeacherAddPane.vue create mode 100644 frontend/src/pages/admin/teacher/AdminTeacherEditPane.vue create mode 100644 frontend/src/pages/admin/teacher/AdminTeacherPage.vue create mode 100644 frontend/src/pages/index/FooterInfo.vue create mode 100644 frontend/src/pages/index/LoginCard.vue create mode 100644 frontend/src/pages/index/LoginIndexPage.vue create mode 100644 frontend/src/pages/student/course/StudentCandidateCourseListPage.vue create mode 100644 frontend/src/pages/student/course/StudentCourseCard.vue create mode 100644 frontend/src/pages/student/course/StudentCourseSelectingnPage.vue create mode 100644 frontend/src/pages/student/course/view/StudentCourseSelectingConfirmPane.vue create mode 100644 frontend/src/pages/student/course/view/StudentCourseSelectingView.vue create mode 100644 frontend/src/pages/student/main/StudentMain.vue create mode 100644 frontend/src/pages/student/main/StudentUserinfoPane.vue create mode 100644 frontend/src/pages/student/schedule/StudentCourseTablePage.vue create mode 100644 frontend/src/pages/student/schedule/StudentCourseTableView.vue create mode 100644 frontend/src/pages/student/score/StudentScorePage.vue create mode 100644 frontend/src/pages/teacher/course/TeacherCourseCard.vue create mode 100644 frontend/src/pages/teacher/course/TeacherCourseListPage.vue create mode 100644 frontend/src/pages/teacher/course/TeacherCourseTableView.vue create mode 100644 frontend/src/pages/teacher/main/TeacherMain.vue create mode 100644 frontend/src/pages/teacher/main/TeacherUserinfoPane.vue create mode 100644 frontend/src/pages/teacher/score/TeacherClassStudentScorePage.vue create mode 100644 frontend/src/pages/teacher/score/TeacherScoreImportPane.vue create mode 100644 frontend/src/pages/teacher/score/TeacherScorePage.vue create mode 100644 frontend/src/router/index.js create mode 100644 frontend/src/router/routes.js create mode 100644 frontend/src/stores/activity.js create mode 100644 frontend/src/stores/index.js create mode 100644 frontend/src/stores/majors.js create mode 100644 frontend/src/stores/store-flag.d.ts create mode 100644 frontend/src/stores/user.js create mode 100644 frontend/src/utils/sleep.js create mode 100644 frontend/src/utils/term.js create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/vite.config.js create mode 100644 frontend/yarn.lock diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..be123b3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +.env + +logs \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..8a9d8ad --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,40 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +.env \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..e06a518 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,7 @@ +FROM eclipse-temurin:17 + +RUN mkdir /opt/app + +COPY target/radical-dreamers.jar /opt/app + +CMD ["java", "-jar", "/opt/app/radical-dreamers.jar"] diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..d33aae7 --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,54 @@ + +name: rd-srv-backend + +services: + # 主服务 + rd: + build: + context: . + dockerfile: Dockerfile + ports: + - "8800:8800" + environment: + spring.data.redis.host: redis + spring.data.redis.port: 6379 + spring.datasource.url: jdbc:postgresql://db:5432/rdrev?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai + spring.datasource.username: postgres + spring.datasource.password: a7d929f76d45d13a4337f2d16f5634bc17e5b8b2 + server.port: 8800 + depends_on: + redis: + condition: service_started + db: + condition: service_healthy + networks: + - rd-network + + # Postgresql + db: + image: postgres:14.12-alpine3.19 + environment: + PGUSER: postgres + POSTGRES_USER: postgres + POSTGRES_DB: rdrev + POSTGRES_PASSWORD: a7d929f76d45d13a4337f2d16f5634bc17e5b8b2 + volumes: + - ./docker:/docker-entrypoint-initdb.d/ + networks: + - rd-network + healthcheck: + test: [ "CMD-SHELL", "pg_isready", "-d", "db_prod"] + interval: 10s + timeout: 60s + retries: 5 + start_period: 5s + + # Redis + redis: + image: redis + networks: + - rd-network + +networks: + rd-network: + internal: false diff --git a/backend/docker/database.sql b/backend/docker/database.sql new file mode 100644 index 0000000..28ebf00 --- /dev/null +++ b/backend/docker/database.sql @@ -0,0 +1,581 @@ +/* + Navicat Premium Data Transfer + + Source Server : local_postgresql + Source Server Type : PostgreSQL + Source Server Version : 140012 + Source Host : localhost:5432 + Source Catalog : little_busters + Source Schema : public + + Target Server Type : PostgreSQL + Target Server Version : 140012 + File Encoding : 65001 + + Date: 14/02/2025 13:14:12 +*/ + + +-- ---------------------------- +-- Table structure for activity +-- ---------------------------- +DROP TABLE IF EXISTS "public"."activity"; +CREATE TABLE "public"."activity" ( + "id" int8 NOT NULL DEFAULT 0, + "name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "term" varchar(11) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '2023-2024-1'::character varying, + "start_time" timestamp(6) NOT NULL DEFAULT now(), + "end_time" timestamp(6) NOT NULL DEFAULT now(), + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."activity"."id" IS '选课活动id'; +COMMENT ON COLUMN "public"."activity"."name" IS '活动id'; +COMMENT ON COLUMN "public"."activity"."term" IS '学期,格式如2023-2024-1'; +COMMENT ON COLUMN "public"."activity"."start_time" IS '开始时间'; +COMMENT ON COLUMN "public"."activity"."end_time" IS '结束时间'; + +-- ---------------------------- +-- Records of activity +-- ---------------------------- + +-- ---------------------------- +-- Table structure for activity_target +-- ---------------------------- +DROP TABLE IF EXISTS "public"."activity_target"; +CREATE TABLE "public"."activity_target" ( + "id" int8 NOT NULL, + "activity" int8 NOT NULL, + "grade" int2 NOT NULL, + "major" int8 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0, + "course_list" int8[] NOT NULL +) +; +COMMENT ON COLUMN "public"."activity_target"."activity" IS '活动id'; +COMMENT ON COLUMN "public"."activity_target"."grade" IS '年级,入学年份'; +COMMENT ON COLUMN "public"."activity_target"."major" IS '专业id'; +COMMENT ON COLUMN "public"."activity_target"."course_list" IS '课程id数组'; + +-- ---------------------------- +-- Records of activity_target +-- ---------------------------- + +-- ---------------------------- +-- Table structure for course +-- ---------------------------- +DROP TABLE IF EXISTS "public"."course"; +CREATE TABLE "public"."course" ( + "id" int8 NOT NULL, + "name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "course_hours" int2 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "spring_term" bool NOT NULL DEFAULT true, + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0, + "exam_ratio" float4 NOT NULL, + "distribution" jsonb NOT NULL DEFAULT '{}'::jsonb +) +; +COMMENT ON COLUMN "public"."course"."id" IS '课程id'; +COMMENT ON COLUMN "public"."course"."name" IS '课程名称'; +COMMENT ON COLUMN "public"."course"."course_hours" IS '课时'; +COMMENT ON COLUMN "public"."course"."spring_term" IS '是否春季期课程(false即是秋季期)'; +COMMENT ON COLUMN "public"."course"."exam_ratio" IS '考试成绩占比'; +COMMENT ON COLUMN "public"."course"."distribution" IS '平时分成绩分布,usual_score参考依据'; + +-- ---------------------------- +-- Records of course +-- ---------------------------- + +-- ---------------------------- +-- Table structure for course_schedule +-- ---------------------------- +DROP TABLE IF EXISTS "public"."course_schedule"; +CREATE TABLE "public"."course_schedule" ( + "id" int8 NOT NULL, + "course" int8 NOT NULL, + "start_week" int2 NOT NULL, + "end_week" int2 NOT NULL, + "time" int2 NOT NULL, + "academic_term" varchar(11) COLLATE "pg_catalog"."default" NOT NULL DEFAULT '2023-2024-1'::character varying, + "place" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "weekday" int2 NOT NULL DEFAULT 1, + "status" int2 NOT NULL DEFAULT 0, + "deleted" bool NOT NULL DEFAULT false +) +; +COMMENT ON COLUMN "public"."course_schedule"."id" IS '课堂id'; +COMMENT ON COLUMN "public"."course_schedule"."course" IS '课程id'; +COMMENT ON COLUMN "public"."course_schedule"."start_week" IS '开始周'; +COMMENT ON COLUMN "public"."course_schedule"."end_week" IS '结束周'; +COMMENT ON COLUMN "public"."course_schedule"."time" IS '节次时间,即第几节课'; +COMMENT ON COLUMN "public"."course_schedule"."academic_term" IS '学年学期,格式如2023-2024-2'; +COMMENT ON COLUMN "public"."course_schedule"."place" IS '上课地点'; +COMMENT ON COLUMN "public"."course_schedule"."weekday" IS '星期几'; + +-- ---------------------------- +-- Records of course_schedule +-- ---------------------------- + +-- ---------------------------- +-- Table structure for course_selection +-- ---------------------------- +DROP TABLE IF EXISTS "public"."course_selection"; +CREATE TABLE "public"."course_selection" ( + "id" int8 NOT NULL, + "student" int8 NOT NULL, + "schedule" int8 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "activity" int8 NOT NULL, + "status" int2 NOT NULL DEFAULT 0, + "term" varchar(11) COLLATE "pg_catalog"."default" NOT NULL +) +; +COMMENT ON COLUMN "public"."course_selection"."id" IS '选课记录id'; +COMMENT ON COLUMN "public"."course_selection"."student" IS '学生id'; +COMMENT ON COLUMN "public"."course_selection"."schedule" IS '课堂id'; +COMMENT ON COLUMN "public"."course_selection"."activity" IS '选课时候的活动id'; +COMMENT ON COLUMN "public"."course_selection"."term" IS '学期'; + +-- ---------------------------- +-- Records of course_selection +-- ---------------------------- + +-- ---------------------------- +-- Table structure for course_teacher +-- ---------------------------- +DROP TABLE IF EXISTS "public"."course_teacher"; +CREATE TABLE "public"."course_teacher" ( + "teacher" int8 NOT NULL, + "course" int8 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."course_teacher"."teacher" IS '教师id'; +COMMENT ON COLUMN "public"."course_teacher"."course" IS '课程班级id'; + +-- ---------------------------- +-- Records of course_teacher +-- ---------------------------- + +-- ---------------------------- +-- Table structure for experiment_item +-- ---------------------------- +DROP TABLE IF EXISTS "public"."experiment_item"; +CREATE TABLE "public"."experiment_item" ( + "id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "course" int8 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."experiment_item"."id" IS '实验项目id'; +COMMENT ON COLUMN "public"."experiment_item"."name" IS '项目名称'; +COMMENT ON COLUMN "public"."experiment_item"."course" IS '课程id'; + +-- ---------------------------- +-- Records of experiment_item +-- ---------------------------- + +-- ---------------------------- +-- Table structure for experiment_score +-- ---------------------------- +DROP TABLE IF EXISTS "public"."experiment_score"; +CREATE TABLE "public"."experiment_score" ( + "id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "student" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "experiment" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "score" int2 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."experiment_score"."id" IS '成绩id'; +COMMENT ON COLUMN "public"."experiment_score"."student" IS '学生id'; +COMMENT ON COLUMN "public"."experiment_score"."experiment" IS '实验id'; +COMMENT ON COLUMN "public"."experiment_score"."score" IS '实验分'; + +-- ---------------------------- +-- Records of experiment_score +-- ---------------------------- + +-- ---------------------------- +-- Table structure for major +-- ---------------------------- +DROP TABLE IF EXISTS "public"."major"; +CREATE TABLE "public"."major" ( + "id" int8 NOT NULL, + "name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."major"."id" IS '专业id'; +COMMENT ON COLUMN "public"."major"."name" IS '专业名称'; + +-- ---------------------------- +-- Records of major +-- ---------------------------- + +-- ---------------------------- +-- Table structure for score +-- ---------------------------- +DROP TABLE IF EXISTS "public"."score"; +CREATE TABLE "public"."score" ( + "id" int8 NOT NULL, + "student" int8 NOT NULL, + "usual_score" float4 NOT NULL, + "exam_score" float4 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "course" int8 NOT NULL, + "term" varchar(11) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying, + "status" int2 NOT NULL DEFAULT 0, + "exam_ratio" float4 NOT NULL DEFAULT 1.0 +) +; +COMMENT ON COLUMN "public"."score"."id" IS '成绩id'; +COMMENT ON COLUMN "public"."score"."student" IS '学生id'; +COMMENT ON COLUMN "public"."score"."usual_score" IS '平时分'; +COMMENT ON COLUMN "public"."score"."exam_score" IS '考试分'; +COMMENT ON COLUMN "public"."score"."course" IS '课程id'; +COMMENT ON COLUMN "public"."score"."term" IS '学期'; +COMMENT ON COLUMN "public"."score"."exam_ratio" IS '考试成绩占比'; + +-- ---------------------------- +-- Records of score +-- ---------------------------- + +-- ---------------------------- +-- Table structure for student_info +-- ---------------------------- +DROP TABLE IF EXISTS "public"."student_info"; +CREATE TABLE "public"."student_info" ( + "id" int8 NOT NULL, + "student_number" varchar(12) COLLATE "pg_catalog"."default" NOT NULL, + "name" varchar(16) COLLATE "pg_catalog"."default" NOT NULL, + "major" int8 NOT NULL, + "grade" int2 NOT NULL DEFAULT 2, + "class" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."student_info"."id" IS '学生id'; +COMMENT ON COLUMN "public"."student_info"."student_number" IS '学号'; +COMMENT ON COLUMN "public"."student_info"."name" IS '学生姓名'; +COMMENT ON COLUMN "public"."student_info"."major" IS '专业id'; +COMMENT ON COLUMN "public"."student_info"."grade" IS '年级,使用大x表示,如大二:2'; +COMMENT ON COLUMN "public"."student_info"."class" IS '班级'; + +-- ---------------------------- +-- Records of student_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for teacher_info +-- ---------------------------- +DROP TABLE IF EXISTS "public"."teacher_info"; +CREATE TABLE "public"."teacher_info" ( + "id" int8 NOT NULL, + "name" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0 +) +; +COMMENT ON COLUMN "public"."teacher_info"."id" IS '教师id'; +COMMENT ON COLUMN "public"."teacher_info"."name" IS '教师姓名'; + +-- ---------------------------- +-- Records of teacher_info +-- ---------------------------- + +-- ---------------------------- +-- Table structure for user_basic +-- ---------------------------- +DROP TABLE IF EXISTS "public"."user_basic"; +CREATE TABLE "public"."user_basic" ( + "id" int8 NOT NULL, + "username" varchar(64) COLLATE "pg_catalog"."default" NOT NULL, + "password" varchar(255) COLLATE "pg_catalog"."default" NOT NULL, + "type" int2 NOT NULL, + "create_time" timestamp(6) NOT NULL DEFAULT now(), + "edit_time" timestamp(6) NOT NULL DEFAULT now(), + "deleted" bool NOT NULL DEFAULT false, + "status" int2 NOT NULL DEFAULT 0, + "oid" varchar(255) COLLATE "pg_catalog"."default" NOT NULL DEFAULT ''::character varying +) +; +COMMENT ON COLUMN "public"."user_basic"."id" IS '用户uuid'; +COMMENT ON COLUMN "public"."user_basic"."username" IS '用户名,登陆用'; +COMMENT ON COLUMN "public"."user_basic"."password" IS '密码'; +COMMENT ON COLUMN "public"."user_basic"."type" IS '用户类型,0:学生,1:教师,2:管理员'; +COMMENT ON COLUMN "public"."user_basic"."oid" IS 'oidc id'; + +-- ---------------------------- +-- Records of user_basic +-- ---------------------------- +INSERT INTO "public"."user_basic" VALUES (0, 'root', '$2a$10$L6bKqBVE9LWlaSWglepokeqd5HKnsptci8uta2PUt0MctfANEk84C', 2, '2025-02-14 05:12:34.578087', '2025-02-14 05:12:34.578087', 'f', 0, ''); + +-- ---------------------------- +-- Function structure for cs_timestamp +-- ---------------------------- +DROP FUNCTION IF EXISTS "public"."cs_timestamp"(); +CREATE OR REPLACE FUNCTION "public"."cs_timestamp"() + RETURNS "pg_catalog"."trigger" AS $BODY$ +begin + new.update_time= current_timestame; + return new; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +-- ---------------------------- +-- Indexes structure for table activity +-- ---------------------------- +CREATE INDEX "act_idx_end" ON "public"."activity" USING btree ( + "end_time" "pg_catalog"."timestamp_ops" ASC NULLS LAST +); +CREATE INDEX "act_idx_id" ON "public"."activity" USING hash ( + "id" "pg_catalog"."int8_ops" +); +CREATE INDEX "act_idx_start" ON "public"."activity" USING brin ( + "start_time" "pg_catalog"."timestamp_minmax_ops" +); +CREATE INDEX "act_idx_term" ON "public"."activity" USING btree ( + "term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table activity +-- ---------------------------- +ALTER TABLE "public"."activity" ADD CONSTRAINT "activity_pkey" PRIMARY KEY ("id", "term", "start_time", "end_time"); + +-- ---------------------------- +-- Indexes structure for table activity_target +-- ---------------------------- +CREATE INDEX "idx_at_act" ON "public"."activity_target" USING btree ( + "activity" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE UNIQUE INDEX "idx_at_act_major_grade" ON "public"."activity_target" USING btree ( + "grade" "pg_catalog"."int2_ops" ASC NULLS LAST, + "major" "pg_catalog"."int8_ops" ASC NULLS LAST, + "activity" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "idx_at_course" ON "public"."activity_target" USING gin ( + "course_list" "pg_catalog"."array_ops" +) WITH (GIN_PENDING_LIST_LIMIT = 128); +CREATE INDEX "idx_at_major_grade" ON "public"."activity_target" USING btree ( + "grade" "pg_catalog"."int2_ops" ASC NULLS LAST, + "major" "pg_catalog"."int8_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table activity_target +-- ---------------------------- +ALTER TABLE "public"."activity_target" ADD CONSTRAINT "activity_course_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table course +-- ---------------------------- +CREATE INDEX "course_idx_id" ON "public"."course" USING hash ( + "id" "pg_catalog"."int8_ops" +); +COMMENT ON INDEX "public"."course_idx_id" IS 'id索引'; + +-- ---------------------------- +-- Primary Key structure for table course +-- ---------------------------- +ALTER TABLE "public"."course" ADD CONSTRAINT "course_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table course_schedule +-- ---------------------------- +CREATE INDEX "cs_idx_course" ON "public"."course_schedule" USING btree ( + "course" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "cs_idx_course_schedule" ON "public"."course_schedule" USING btree ( + "id" "pg_catalog"."int8_ops" ASC NULLS LAST, + "course" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "cs_idx_course_term" ON "public"."course_schedule" USING btree ( + "course" "pg_catalog"."int8_ops" ASC NULLS LAST, + "academic_term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "cs_idx_id" ON "public"."course_schedule" USING btree ( + "id" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "cs_idx_term" ON "public"."course_schedule" USING btree ( + "academic_term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table course_schedule +-- ---------------------------- +ALTER TABLE "public"."course_schedule" ADD CONSTRAINT "class_pkey" PRIMARY KEY ("id", "course"); + +-- ---------------------------- +-- Indexes structure for table course_selection +-- ---------------------------- +CREATE INDEX "course_selection_student_idx" ON "public"."course_selection" USING btree ( + "student" "pg_catalog"."int8_ops" ASC NULLS LAST, + "term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "csel_idex_student" ON "public"."course_selection" USING btree ( + "student" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "csel_idx_activity" ON "public"."course_selection" USING btree ( + "activity" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "csel_idx_course" ON "public"."course_selection" USING btree ( + "schedule" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "csel_idx_id" ON "public"."course_selection" USING btree ( + "id" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "csel_idx_id_term" ON "public"."course_selection" USING btree ( + "id" "pg_catalog"."int8_ops" ASC NULLS LAST, + "term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table course_selection +-- ---------------------------- +ALTER TABLE "public"."course_selection" ADD CONSTRAINT "course_selection_pkey" PRIMARY KEY ("id", "student", "schedule"); + +-- ---------------------------- +-- Indexes structure for table course_teacher +-- ---------------------------- +CREATE INDEX "tc_idx_course" ON "public"."course_teacher" USING btree ( + "course" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "tc_idx_teacher" ON "public"."course_teacher" USING btree ( + "teacher" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "teacher_course_teacher_course_idx" ON "public"."course_teacher" USING btree ( + "teacher" "pg_catalog"."int8_ops" ASC NULLS LAST, + "course" "pg_catalog"."int8_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table experiment_item +-- ---------------------------- +ALTER TABLE "public"."experiment_item" ADD CONSTRAINT "course_experiment_pkey" PRIMARY KEY ("id", "course"); + +-- ---------------------------- +-- Primary Key structure for table experiment_score +-- ---------------------------- +ALTER TABLE "public"."experiment_score" ADD CONSTRAINT "experiment_score_pkey" PRIMARY KEY ("id", "student", "experiment"); + +-- ---------------------------- +-- Indexes structure for table major +-- ---------------------------- +CREATE INDEX "major_idx_id" ON "public"."major" USING hash ( + "id" "pg_catalog"."int8_ops" +); +CREATE INDEX "major_idx_name" ON "public"."major" USING btree ( + "name" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table major +-- ---------------------------- +ALTER TABLE "public"."major" ADD CONSTRAINT "major_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table score +-- ---------------------------- +CREATE INDEX "score_idx_course_term" ON "public"."score" USING btree ( + "course" "pg_catalog"."int8_ops" ASC NULLS LAST, + "term" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); +CREATE INDEX "score_idx_id" ON "public"."score" USING hash ( + "id" "pg_catalog"."int8_ops" +); +CREATE INDEX "score_idx_student" ON "public"."score" USING btree ( + "student" "pg_catalog"."int8_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table score +-- ---------------------------- +ALTER TABLE "public"."score" ADD CONSTRAINT "score_pkey" PRIMARY KEY ("student", "course", "term"); + +-- ---------------------------- +-- Indexes structure for table student_info +-- ---------------------------- +CREATE INDEX "stu_dix_grade" ON "public"."student_info" USING btree ( + "grade" "pg_catalog"."int2_ops" ASC NULLS LAST +); +CREATE INDEX "stu_idx_id" ON "public"."student_info" USING hash ( + "id" "pg_catalog"."int8_ops" +); +CREATE INDEX "stu_idx_major" ON "public"."student_info" USING btree ( + "major" "pg_catalog"."int8_ops" ASC NULLS LAST +); +CREATE INDEX "stu_idx_num" ON "public"."student_info" USING btree ( + "student_number" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table student_info +-- ---------------------------- +ALTER TABLE "public"."student_info" ADD CONSTRAINT "student_info_pkey" PRIMARY KEY ("id", "student_number"); + +-- ---------------------------- +-- Indexes structure for table teacher_info +-- ---------------------------- +CREATE INDEX "ti_idx_id" ON "public"."teacher_info" USING hash ( + "id" "pg_catalog"."int8_ops" +); + +-- ---------------------------- +-- Primary Key structure for table teacher_info +-- ---------------------------- +ALTER TABLE "public"."teacher_info" ADD CONSTRAINT "teacher_info_pkey" PRIMARY KEY ("id"); + +-- ---------------------------- +-- Indexes structure for table user_basic +-- ---------------------------- +CREATE INDEX "usr_bsic_oid" ON "public"."user_basic" USING hash ( + "oid" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" +); +CREATE INDEX "usr_idx_id" ON "public"."user_basic" USING hash ( + "id" "pg_catalog"."int8_ops" +); +CREATE INDEX "usr_idx_username" ON "public"."user_basic" USING btree ( + "username" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST +); + +-- ---------------------------- +-- Primary Key structure for table user_basic +-- ---------------------------- +ALTER TABLE "public"."user_basic" ADD CONSTRAINT "user_pkey" PRIMARY KEY ("id", "username", "password"); diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..ad90fc0 --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,273 @@ + + + 4.0.0 + + net.lensfrex.service + radical-dreamers + ${revision} + + + 17 + 17 + UTF-8 + + 0.0.1-SNAPSHOT + + 3.1.1 + + 3.1.6 + 2.0 + 5.10.0-RC1 + + 3.5.3.1 + 3.0.2 + 1.18.26 + 5.8.20 + + 1.34.0 + + 6.2.5.RELEASE + + 1.0.6 + + 2.5.0 + 3.3.2 + + + + + + org.springframework.boot + spring-boot-dependencies + ${springboot.version} + pom + import + + + cn.hutool + hutool-bom + ${hutool.version} + pom + import + + + + + + + com.baomidou + mybatis-plus-boot-starter-test + 3.5.3.2 + test + + + + org.springframework.boot + spring-boot-devtools + true + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + + + org.yaml + snakeyaml + ${snakeyaml.version} + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + ${spring-doc.version} + + + org.springdoc + springdoc-openapi-starter-webmvc-api + ${spring-doc.version} + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.version} + + + org.postgresql + postgresql + + + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + org.springframework.boot + spring-boot-starter-json + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-pool2 + + + io.lettuce + lettuce-core + ${lettuce.bersion} + + + + + com.github.yitter + yitter-idgenerator + ${idgen.version} + + + + + cn.dev33 + sa-token-spring-boot3-starter + ${satoken.version} + + + cn.dev33 + sa-token-dao-redis-jackson + ${satoken.version} + + + + + cn.hutool + hutool-crypto + + + cn.hutool + hutool-core + + + + + com.alibaba + easyexcel + ${easyexcel.version} + + + org.apache.commons + commons-compress + 1.23.0 + + + + + com.squareup.okhttp3 + okhttp + 5.0.0-alpha.14 + + + + + com.google.guava + guava + 33.4.0-jre + + + + + + central + aliyun maven + https://maven.aliyun.com/repository/public + default + + true + + + false + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + + + + org.springframework.boot + spring-boot-maven-plugin + + radical-dreamers + true + + + + org.projectlombok + lombok + + + + + + + repackage + + + + + + + diff --git a/backend/src/main/java/rd/BackendMain.java b/backend/src/main/java/rd/BackendMain.java new file mode 100644 index 0000000..3447431 --- /dev/null +++ b/backend/src/main/java/rd/BackendMain.java @@ -0,0 +1,26 @@ +package rd; + +import com.github.yitter.contract.IdGeneratorOptions; +import com.github.yitter.idgen.YitIdHelper; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@EnableAsync +@EnableScheduling +@SpringBootApplication +@EnableTransactionManagement +@MapperScan(basePackages = "rd.dao.mapper") +public class BackendMain { + public static void main(String[] args) { + IdGeneratorOptions options = new IdGeneratorOptions(); + options.WorkerIdBitLength = 4; + options.WorkerId = 0; + YitIdHelper.setIdGenerator(options); + + SpringApplication.run(BackendMain.class, args); + } +} diff --git a/backend/src/main/java/rd/configure/CorsFilter.java b/backend/src/main/java/rd/configure/CorsFilter.java new file mode 100644 index 0000000..2231cf5 --- /dev/null +++ b/backend/src/main/java/rd/configure/CorsFilter.java @@ -0,0 +1,36 @@ +package rd.configure; + +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; + +import java.io.IOException; + +@Component +@WebFilter(filterName = "CorsFilter", urlPatterns = "/*") +public class CorsFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletResponse response = (HttpServletResponse) servletResponse; + HttpServletRequest request = (HttpServletRequest) servletRequest; + + response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() { + } +} diff --git a/backend/src/main/java/rd/configure/JSR310SupportedGenericJackson2JsonRedisSerializer.java b/backend/src/main/java/rd/configure/JSR310SupportedGenericJackson2JsonRedisSerializer.java new file mode 100644 index 0000000..84565ff --- /dev/null +++ b/backend/src/main/java/rd/configure/JSR310SupportedGenericJackson2JsonRedisSerializer.java @@ -0,0 +1,11 @@ +package rd.configure; + +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; + +public class JSR310SupportedGenericJackson2JsonRedisSerializer extends GenericJackson2JsonRedisSerializer { + public JSR310SupportedGenericJackson2JsonRedisSerializer() { + super(); + getObjectMapper().registerModule(new JavaTimeModule()); + } +} diff --git a/backend/src/main/java/rd/configure/JacksonConfigure.java b/backend/src/main/java/rd/configure/JacksonConfigure.java new file mode 100644 index 0000000..18a3dcb --- /dev/null +++ b/backend/src/main/java/rd/configure/JacksonConfigure.java @@ -0,0 +1,29 @@ +package rd.configure; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Configuration +public class JacksonConfigure { + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + + // other serializer and deSerializer config ... + + JavaTimeModule javaTimeModule = new JavaTimeModule(); + + javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ISO_DATE_TIME)); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_DATE_TIME)); + + objectMapper.registerModule(javaTimeModule); + return objectMapper; + } +} diff --git a/backend/src/main/java/rd/configure/MybatisConfigure.java b/backend/src/main/java/rd/configure/MybatisConfigure.java new file mode 100644 index 0000000..fd4d833 --- /dev/null +++ b/backend/src/main/java/rd/configure/MybatisConfigure.java @@ -0,0 +1,17 @@ +package rd.configure; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MybatisConfigure { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL)); + return interceptor; + } +} diff --git a/backend/src/main/java/rd/configure/OkhttpConfigure.java b/backend/src/main/java/rd/configure/OkhttpConfigure.java new file mode 100644 index 0000000..28f8efd --- /dev/null +++ b/backend/src/main/java/rd/configure/OkhttpConfigure.java @@ -0,0 +1,13 @@ +package rd.configure; + +import okhttp3.OkHttpClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OkhttpConfigure { + @Bean + public OkHttpClient okHttpClient() { + return new OkHttpClient(); + } +} diff --git a/backend/src/main/java/rd/configure/OpenAPIConfigure.java b/backend/src/main/java/rd/configure/OpenAPIConfigure.java new file mode 100644 index 0000000..fdfe08e --- /dev/null +++ b/backend/src/main/java/rd/configure/OpenAPIConfigure.java @@ -0,0 +1,32 @@ +package rd.configure; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +@Getter +@Component +@Configuration +public class OpenAPIConfigure { + private String serverUrl; + + @Value("${wusthelper.docs.server-url:/}") + public void setServerUrl(String serverUrl) { + this.serverUrl = serverUrl; + } + + @Bean + public OpenAPI openAPI() { + var info = new Info() + .title("rd") + .description("rd api") + .version("v1"); + + return new OpenAPI() + .info(info); + } +} diff --git a/backend/src/main/java/rd/configure/RdConfigure.java b/backend/src/main/java/rd/configure/RdConfigure.java new file mode 100644 index 0000000..835e2c3 --- /dev/null +++ b/backend/src/main/java/rd/configure/RdConfigure.java @@ -0,0 +1,12 @@ +package rd.configure; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Data +@Configuration +public class RdConfigure { + @Value("${rd.WusthelperBaseUrl}") + private String wusthelperBaseUrl; +} diff --git a/backend/src/main/java/rd/configure/RedisConfigure.java b/backend/src/main/java/rd/configure/RedisConfigure.java new file mode 100644 index 0000000..92b650a --- /dev/null +++ b/backend/src/main/java/rd/configure/RedisConfigure.java @@ -0,0 +1,29 @@ +package rd.configure; + +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializer; + +@Configuration +@EnableCaching +public class RedisConfigure { + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory connectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(connectionFactory); + + redisTemplate.setKeySerializer(RedisSerializer.string()); + redisTemplate.setHashKeySerializer(RedisSerializer.string()); + + var jsonRedisSerializer = new JSR310SupportedGenericJackson2JsonRedisSerializer(); + redisTemplate.setValueSerializer(jsonRedisSerializer); + redisTemplate.setDefaultSerializer(jsonRedisSerializer); + + redisTemplate.afterPropertiesSet(); + + return redisTemplate; + } +} diff --git a/backend/src/main/java/rd/configure/SaTokenConfigure.java b/backend/src/main/java/rd/configure/SaTokenConfigure.java new file mode 100644 index 0000000..20b7ce1 --- /dev/null +++ b/backend/src/main/java/rd/configure/SaTokenConfigure.java @@ -0,0 +1,15 @@ +package rd.configure; + +import cn.dev33.satoken.interceptor.SaInterceptor; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class SaTokenConfigure implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SaInterceptor()).addPathPatterns("/**"); + } +} diff --git a/backend/src/main/java/rd/configure/ThreadPoolConfigure.java b/backend/src/main/java/rd/configure/ThreadPoolConfigure.java new file mode 100644 index 0000000..d98cf74 --- /dev/null +++ b/backend/src/main/java/rd/configure/ThreadPoolConfigure.java @@ -0,0 +1,51 @@ +package rd.configure; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +@Slf4j +@EnableAsync +@Configuration +public class ThreadPoolConfigure implements AsyncConfigurer { + + @Value("${spring.task.execution.pool.core-size}") + private int corePoolSize; + + @Value("${spring.task.execution.pool.max-size}") + private int maxPoolSize; + + @Value("${spring.task.execution.pool.queue-capacity}") + private int queueCapacity; + + @Override + public Executor getAsyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + + executor.setCorePoolSize(corePoolSize); + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(300); + executor.setThreadNamePrefix("rd-thr-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + executor.initialize(); + + return executor; + } + + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return (e, method, params) -> { + log.error("Uncaught exception in task executing: {}", e.getMessage(), e); + log.error("Method: {}", method.getName()); + }; + } +} + diff --git a/backend/src/main/java/rd/controller/Health.java b/backend/src/main/java/rd/controller/Health.java new file mode 100644 index 0000000..900c471 --- /dev/null +++ b/backend/src/main/java/rd/controller/Health.java @@ -0,0 +1,13 @@ +package rd.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/health") +public class Health { + @RequestMapping("") + public String health() { + return ""; + } +} diff --git a/backend/src/main/java/rd/controller/activity/ActivityController.java b/backend/src/main/java/rd/controller/activity/ActivityController.java new file mode 100644 index 0000000..0731ff2 --- /dev/null +++ b/backend/src/main/java/rd/controller/activity/ActivityController.java @@ -0,0 +1,44 @@ +package rd.controller.activity; + +import rd.data.db.table.Activity; +import rd.data.model.response.PaginationWrapper; +import rd.data.model.response.Response; +import rd.service.activity.ActivityService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/activity") +public class ActivityController { + + private final ActivityService activityService; + + public ActivityController(ActivityService activityService) { + this.activityService = activityService; + } + + @RequestMapping("/current") + public Response current() { + var result = activityService.getCurrentActivity(); + + return Response.success(result); + } + + @RequestMapping("/list") + public Response>> list( + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var result = activityService.list(page, pageSize); + return Response.success(result); + } + + @RequestMapping("/info") + public Response info(@RequestParam(value = "id") Long id) { + var result = activityService.getById(id); + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/activity/AdminActivityController.java b/backend/src/main/java/rd/controller/activity/AdminActivityController.java new file mode 100644 index 0000000..9ea9c47 --- /dev/null +++ b/backend/src/main/java/rd/controller/activity/AdminActivityController.java @@ -0,0 +1,44 @@ +package rd.controller.activity; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.db.table.Activity; +import rd.data.model.request.admin.ActivityInfoDto; +import rd.data.model.response.Response; + +import rd.service.activity.ActivityService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/activity") +public class AdminActivityController { + + private final ActivityService activityService; + + public AdminActivityController(ActivityService activityService) { + this.activityService = activityService; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestBody ActivityInfoDto request) { + activityService.addActivity(request); + return Response.success(); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/update") + public Response update(@RequestParam("id") Long id, @RequestBody ActivityInfoDto request) { + var activity = activityService.update(id, request); + return Response.success(activity); + } + + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + activityService.delete(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/activity/AdminActivityTargetController.java b/backend/src/main/java/rd/controller/activity/AdminActivityTargetController.java new file mode 100644 index 0000000..4f99946 --- /dev/null +++ b/backend/src/main/java/rd/controller/activity/AdminActivityTargetController.java @@ -0,0 +1,138 @@ +package rd.controller.activity; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.dto.activity.ActivityTargetAddDto; +import rd.data.dto.activity.ActivityTargetUpdateDto; +import rd.data.db.table.ActivityTarget; +import rd.data.model.request.activity.ActivityTargetAddRequest; +import rd.data.model.request.activity.ActivityTargetUpadeRequest; +import rd.data.model.response.Response; +import rd.data.model.response.activity.ActivityTargetResponse; +import rd.data.model.response.activity.ActivityTargetWithClassNameResponse; +import rd.service.activity.ActivityTargetService; +import rd.service.course.CourseService; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; + +@RestController +@RequestMapping("/admin/activity/targets") +public class AdminActivityTargetController { + private final ActivityTargetService activityTargetService; + private final CourseService courseService; + + public AdminActivityTargetController(ActivityTargetService activityTargetService, CourseService courseService) { + this.activityTargetService = activityTargetService; + this.courseService = courseService; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @GetMapping("/list") + public Response> listActivityTarget(@RequestParam("act") Long activityId) { + var activityTargetList = activityTargetService.getActivityTargetList(activityId); + var activityTargetResponseList = activityTargetList.stream().map(activityTarget -> { + var activityTargetResponse = convertWithCourseName(activityTarget); + var courseNameList = Arrays.stream(activityTarget.getCourseList()) + .map(courseId -> { + var course = courseService.getCourse(courseId); + return course == null ? (String.format("[已删除课程%d]", courseId)) : course.getName(); + }) + .toList(); + activityTargetResponse.setCourse(courseNameList); + return activityTargetResponse; + }) + .toList(); + + return Response.success(activityTargetResponseList); + } + + private ActivityTargetWithClassNameResponse convertWithCourseName(ActivityTarget activityTarget) { + ActivityTargetWithClassNameResponse activityTargetWithClassNameResponse = new ActivityTargetWithClassNameResponse(); + activityTargetWithClassNameResponse.setId(activityTarget.getId()); + activityTargetWithClassNameResponse.setActivity(activityTarget.getActivity()); + activityTargetWithClassNameResponse.setGrade(activityTarget.getGrade()); + activityTargetWithClassNameResponse.setMajor(activityTarget.getMajor()); + activityTargetWithClassNameResponse.setCreateTime(activityTarget.getCreateTime()); + activityTargetWithClassNameResponse.setEditTime(activityTarget.getEditTime()); + + return activityTargetWithClassNameResponse; + } + + private ActivityTargetResponse convertWithCourseId(ActivityTarget activityTarget) { + ActivityTargetResponse activityTargetWithClassNameResponse = new ActivityTargetResponse(); + activityTargetWithClassNameResponse.setId(activityTarget.getId()); + activityTargetWithClassNameResponse.setActivity(activityTarget.getActivity()); + activityTargetWithClassNameResponse.setGrade(activityTarget.getGrade()); + activityTargetWithClassNameResponse.setMajor(activityTarget.getMajor()); + activityTargetWithClassNameResponse.setCourse(Arrays.asList(activityTarget.getCourseList())); + activityTargetWithClassNameResponse.setCreateTime(activityTarget.getCreateTime()); + activityTargetWithClassNameResponse.setEditTime(activityTarget.getEditTime()); + + return activityTargetWithClassNameResponse; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @GetMapping("/info") + public Response getActivityTargetInfo(@RequestParam("id") Long id) { + var activityTarget = activityTargetService.getActivityTargetInfo(id); + return Response.success(convertWithCourseId(activityTarget)); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response addActivityTarget(@RequestParam("act") Long activityId, + @RequestBody ActivityTargetAddRequest activityTargetAddRequest + ) { + activityTargetService.addActivityTargetCourse(activityId, convert(activityTargetAddRequest)); + return Response.success(); + } + + private ActivityTargetAddDto convert(ActivityTargetAddRequest request) { + ActivityTargetAddDto activityTargetAddDto = new ActivityTargetAddDto(); + activityTargetAddDto.setGrade(request.getGrade()); + activityTargetAddDto.setMajor(request.getMajor()); + activityTargetAddDto.setCourse(request.getCourse()); + + return activityTargetAddDto; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/duplicate") + public Response duplicateActivityTarget(@RequestParam("src") Long src, @RequestParam("dst") Long dst) { + activityTargetService.duplicateFromExistsActivity(src, dst); + return Response.success(); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/update") + public Response updateActivityTarget(@RequestParam("id") Long id, + @RequestBody ActivityTargetUpadeRequest activityTargetUpadeRequest + ) { + activityTargetService.updateActivityTargetCourse(id, convert(activityTargetUpadeRequest)); + return Response.success(); + } + + private ActivityTargetUpdateDto convert(ActivityTargetUpadeRequest request) { + ActivityTargetUpdateDto activityTargetUpdateDto = new ActivityTargetUpdateDto(); + activityTargetUpdateDto.setGrade(request.getGrade()); + activityTargetUpdateDto.setMajor(request.getMajor()); + activityTargetUpdateDto.setCourse(request.getCourse()); + + return activityTargetUpdateDto; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response deleteActivityTarget(@RequestParam("id") Long id) { + activityTargetService.removeActivityTargetCourse(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/course/AdminCourseController.java b/backend/src/main/java/rd/controller/course/AdminCourseController.java new file mode 100644 index 0000000..2395ed2 --- /dev/null +++ b/backend/src/main/java/rd/controller/course/AdminCourseController.java @@ -0,0 +1,59 @@ +package rd.controller.course; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.dto.course.CourseDTO; +import rd.data.model.request.course.CourseRequest; +import rd.data.model.response.Response; +import rd.service.course.CourseService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/course") +public class AdminCourseController { + private final CourseService courseService; + + public AdminCourseController(CourseService courseService) { + this.courseService = courseService; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestBody CourseRequest request) { + CourseDTO dto = CourseDTO.builder() + .name(request.getName()) + .courseHours(request.getCourseHours()) + .springTerm(request.getSpringTerm()) + .examRatio(request.getExamRatio()) + .build(); + + var newCourse = courseService.add(dto); + + return Response.success(newCourse); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/update") + public Response update(@RequestParam("id") Long id, @RequestBody CourseRequest request) { + CourseDTO dto = CourseDTO.builder() + .name(request.getName()) + .courseHours(request.getCourseHours()) + .springTerm(request.getSpringTerm()) + .examRatio(request.getExamRatio()) + .build(); + + var teacherInfo = courseService.update(id, dto); + + return Response.success(teacherInfo); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + courseService.delete(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/course/CourseController.java b/backend/src/main/java/rd/controller/course/CourseController.java new file mode 100644 index 0000000..6ccc43c --- /dev/null +++ b/backend/src/main/java/rd/controller/course/CourseController.java @@ -0,0 +1,175 @@ +package rd.controller.course; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.net.URLEncodeUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletResponse; +import rd.data.code.ServiceCode; +import rd.data.dto.FileByteDataWrapper; +import rd.data.dto.course.CourseDTO; +import rd.data.dto.course.CourseNameDTO; +import rd.data.db.CourseScheduleSelectionInfo; +import rd.data.db.table.Course; +import rd.data.db.table.StudentInfo; +import rd.data.model.response.PaginationWrapper; +import rd.data.model.response.Response; + +import rd.service.course.CourseService; +import rd.service.course.CourseTeacherService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +@RestController +@RequestMapping("/course") +public class CourseController { + + private final CourseService courseService; + private final ObjectMapper objectMapper; + private final CourseTeacherService courseTeacherService; + + public CourseController(CourseService courseService, + ObjectMapper objectMapper, CourseTeacherService courseTeacherService) { + this.courseService = courseService; + this.objectMapper = objectMapper; + this.courseTeacherService = courseTeacherService; + } + + @GetMapping("/list") + public Response>> list( + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var result = courseService.list(page, pageSize); + return Response.success(result); + } + + @GetMapping("/list-names") + public Response>> listCourseName( + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var result = courseService.listCourseName(page, pageSize); + return Response.success(result); + } + + @GetMapping("/info") + public Response info(@RequestParam(value = "id") Long id) { + var result = courseService.getCourseDTO(id); + return Response.success(result); + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @GetMapping("/get-selected-students") + public Response> getSelectedStudents( + @RequestParam("course") Long courseId, @RequestParam("term") String term, + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var courseScheduleSelectionInfoList = courseService.getSelectedStudentList(courseId, term); + return Response.success(courseScheduleSelectionInfoList); + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @GetMapping("/get-not-selected-students") + public Response> getNotSelectedStudents( + @RequestParam("course") Long courseId, @RequestParam("term") String term, + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var courseScheduleSelectionInfoList = courseService.getNotSelectStudentList(courseId, term); + return Response.success(courseScheduleSelectionInfoList); + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @GetMapping("/export-students") + public void exportSelectedStudents(@RequestParam("course") Long course, + @RequestParam("term") String term, + HttpServletResponse response + ) throws IOException { + if (course == null) { + Response responseData = Response.error(ServiceCode.ParamWrong); + response.setContentType("application/json"); + response.getWriter().write(objectMapper.writeValueAsString(responseData)); + return; + } + + var data = courseService.exportSelectedStudents(course, term); + + var filename = String.format("exported_students_%s_%s.xlsx", data.getFileName(), term); + this.responseExcelFile(response, URLEncodeUtil.encodeAll(filename), data); + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @GetMapping("/export-not-select-students") + public void exportNotSelectStudents(@RequestParam("course") Long course, + @RequestParam("term") String term, + HttpServletResponse response + ) throws IOException { + if (course == null) { + Response responseData = Response.error(ServiceCode.ParamWrong); + response.setContentType("application/json"); + response.getWriter().write(objectMapper.writeValueAsString(responseData)); + return; + } + + var data = courseService.exportNotSelectStudents(course, term); + + var filename = String.format("exported_not_select_students_%s_%s.xlsx", data.getFileName(), term); + this.responseExcelFile(response, URLEncodeUtil.encodeAll(filename), data); + } + + private void responseExcelFile(HttpServletResponse response, + String filename, FileByteDataWrapper data + ) throws IOException { + if (data == null) { + Response responseData = Response.success("数据是空的"); + response.setContentType("application/json"); + response.getWriter().write(objectMapper.writeValueAsString(responseData)); + return; + } + + response.setContentLength(data.getData().length); + response.setContentType("application/octet-stream"); + + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", filename)); + + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + + response.getOutputStream().write(data.getData()); + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @GetMapping("/teacher-courses") + public Response> getCourseForTeacher(@RequestParam(value = "teacher", required = false) Long teacher) { + if (teacher == null) { + teacher = StpUtil.getLoginIdAsLong(); + } + + var courseList = courseTeacherService.getCourseForTeacher(teacher); + var courseDTOList = courseList.stream().map(CourseController::convert).toList(); + + return Response.success(courseDTOList); + } + + private static CourseDTO convert(Course course) { + CourseDTO courseDTO = new CourseDTO(); + courseDTO.setId(course.getId()); + courseDTO.setName(course.getName()); + courseDTO.setCourseHours(course.getCourseHours()); + courseDTO.setSpringTerm(course.getSpringTerm()); + courseDTO.setExamRatio(course.getExamRatio()); + courseDTO.setDistribution(course.getDistribution()); + + return courseDTO; + } +} diff --git a/backend/src/main/java/rd/controller/course/CourseTeacherController.java b/backend/src/main/java/rd/controller/course/CourseTeacherController.java new file mode 100644 index 0000000..c913930 --- /dev/null +++ b/backend/src/main/java/rd/controller/course/CourseTeacherController.java @@ -0,0 +1,72 @@ +package rd.controller.course; + +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.model.request.course.CourseTeacherUpdateRequest; +import rd.data.model.response.Response; +import rd.data.model.response.course.CourseTeacherResponse; +import rd.service.course.CourseTeacherService; +import org.springframework.web.bind.annotation.*; + +import java.util.HashSet; +import java.util.List; + +@RestController +@RequestMapping("/course/teachers") +public class CourseTeacherController { + private final CourseTeacherService courseTeacherService; + + public CourseTeacherController(CourseTeacherService courseTeacherService) { + this.courseTeacherService = courseTeacherService; + } + + @GetMapping("/list") + public Response> getCourseTeachers(@RequestParam("course") Long course) { + var courseTeacherList = courseTeacherService.getCourseTeacherList(course); + var courseTeacherResponseList = courseTeacherList.stream() + .map(teacherInfo -> new CourseTeacherResponse(teacherInfo.getId(), teacherInfo.getName())) + .toList(); + + return Response.success(courseTeacherResponseList); + } + + @SaCheckRole({"ADMIN"}) + @PostMapping("/add") + public Response> addCourseTeacher(@RequestParam("course") Long courseId, + @RequestParam("teacher") Long teacherId + ) { + var courseTeacherList = courseTeacherService.addCourseTeacher(courseId, teacherId); + var courseTeacherResponseList = courseTeacherList.stream() + .map(teacherInfo -> new CourseTeacherResponse(teacherInfo.getId(), teacherInfo.getName())) + .toList(); + + return Response.success(courseTeacherResponseList); + } + + @SaCheckRole({"ADMIN"}) + @PostMapping("/remove") + public Response> removeCourseTeacher(@RequestParam("course") Long courseId, + @RequestParam("teacher") Long teacherId + ) { + var courseTeacherList = courseTeacherService.removeCourseTeacher(courseId, teacherId); + var courseTeacherResponseList = courseTeacherList.stream() + .map(teacherInfo -> new CourseTeacherResponse(teacherInfo.getId(), teacherInfo.getName())) + .toList(); + + return Response.success(courseTeacherResponseList); + } + + @SaCheckRole({"ADMIN"}) + @PostMapping("/update") + public Response> updateCourseTeacher(@RequestParam("course") Long courseId, + @RequestBody CourseTeacherUpdateRequest courseTeacherUpdateRequest + ) { + var courseTeacherIdSet = new HashSet<>(courseTeacherUpdateRequest.getTeachers()); + var courseTeacherList = courseTeacherService.updateCourseTeacherList(courseId, courseTeacherIdSet); + + var courseTeacherResponseList = courseTeacherList.stream() + .map(teacherInfo -> new CourseTeacherResponse(teacherInfo.getId(), teacherInfo.getName())) + .toList(); + + return Response.success(courseTeacherResponseList); + } +} diff --git a/backend/src/main/java/rd/controller/course/StudentCourseController.java b/backend/src/main/java/rd/controller/course/StudentCourseController.java new file mode 100644 index 0000000..e17a6ff --- /dev/null +++ b/backend/src/main/java/rd/controller/course/StudentCourseController.java @@ -0,0 +1,76 @@ +package rd.controller.course; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.stp.StpUtil; +import rd.data.dto.course.CourseDTO; +import rd.data.db.table.Course; +import rd.data.model.response.Response; +import rd.service.activity.ActivityService; +import rd.service.activity.ActivityTargetService; +import rd.service.course.CourseService; +import rd.service.user.StudentUserService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("/student/course") +public class StudentCourseController { + private final CourseService courseService; + private final ActivityTargetService activityTargetService; + private final StudentUserService studentUserService; + private final ActivityService activityService; + + public StudentCourseController(CourseService courseService, + ActivityTargetService activityTargetService, + StudentUserService studentUserService, + ActivityService activityService) { + this.courseService = courseService; + this.activityTargetService = activityTargetService; + this.studentUserService = studentUserService; + this.activityService = activityService; + } + + @SaCheckLogin + @SaCheckRole("STUDENT") + @GetMapping("/candidate") + public Response> listCandidate(@RequestParam(value = "act", required = false) Long activityId) { + Long uid = StpUtil.getLoginIdAsLong(); + var studentInfo = studentUserService.getInfoById(uid); + + if (activityId == null) { + var currentActivity = activityService.getCurrentActivity(); + if (currentActivity == null) { + return Response.success(new ArrayList<>()); + } + + activityId = currentActivity.getId(); + } + + var courseIdList = activityTargetService.getMajorGradeActivityCandidateCourses( + studentInfo.major(), studentInfo.grade(), activityId + ); + + var courseIdMap = courseService.getCourse(courseIdList); + var courseList = courseIdMap.values().stream() + .map(this::convertCourse) + .toList(); + + return Response.success(courseList); + } + + private CourseDTO convertCourse(Course course) { + CourseDTO courseDTO = new CourseDTO(); + courseDTO.setId(course.getId()); + courseDTO.setName(course.getName()); + courseDTO.setCourseHours(course.getCourseHours()); + courseDTO.setSpringTerm(course.getSpringTerm()); + + return courseDTO; + } +} diff --git a/backend/src/main/java/rd/controller/major/AdminMajorController.java b/backend/src/main/java/rd/controller/major/AdminMajorController.java new file mode 100644 index 0000000..4e2c54b --- /dev/null +++ b/backend/src/main/java/rd/controller/major/AdminMajorController.java @@ -0,0 +1,35 @@ +package rd.controller.major; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.db.table.Major; +import rd.data.model.response.Response; +import rd.service.major.MajorService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/major") +public class AdminMajorController { + + private final MajorService majorService; + + public AdminMajorController(MajorService majorService) { + this.majorService = majorService; + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestParam("name") String name) { + Major major = majorService.addMajorIfNotExists(name); + return Response.success(major); + } + + @SaCheckLogin + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + majorService.deleteMajor(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/major/PublicMajor.java b/backend/src/main/java/rd/controller/major/PublicMajor.java new file mode 100644 index 0000000..7e2ecf7 --- /dev/null +++ b/backend/src/main/java/rd/controller/major/PublicMajor.java @@ -0,0 +1,34 @@ +package rd.controller.major; + +import rd.data.db.table.Major; +import rd.data.model.response.Response; +import rd.service.major.MajorService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Set; + +@RestController +@RequestMapping("/major") +public class PublicMajor { + + private final MajorService majorService; + + public PublicMajor(MajorService majorService) { + this.majorService = majorService; + } + + @GetMapping("/info") + public Response get(@RequestParam("id") Long id) { + Major major = majorService.getMajor(id); + return Response.success(major); + } + + @GetMapping("/list") + public Response> list() { + var majorList = majorService.listAllMajor(); + return Response.success(majorList); + } +} diff --git a/backend/src/main/java/rd/controller/schedule/AdminScheduleController.java b/backend/src/main/java/rd/controller/schedule/AdminScheduleController.java new file mode 100644 index 0000000..522a87f --- /dev/null +++ b/backend/src/main/java/rd/controller/schedule/AdminScheduleController.java @@ -0,0 +1,68 @@ +package rd.controller.schedule; + +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.dto.schedule.CourseScheduleDTO; +import rd.data.db.table.CourseSchedule; +import rd.data.model.request.schedule.CourseScheduleRequest; +import rd.data.model.response.Response; +import rd.service.schedule.CourseScheduleService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/course-schedule") +public class AdminScheduleController { + + private final CourseScheduleService courseScheduleService; + + public AdminScheduleController(CourseScheduleService courseScheduleService) { + this.courseScheduleService = courseScheduleService; + } + + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestParam("course") Long courseId, + @RequestBody CourseScheduleRequest request) { + var newCourse = courseScheduleService.add(courseId, convert(request)); + + return Response.success(newCourse); + } + + @SaCheckRole("ADMIN") + @RequestMapping("/clone") + public Response clone(@RequestParam("course") Long course, + @RequestParam("from") String sourceTerm, + @RequestParam("to") String targetTerm) { + courseScheduleService.cloneSchedule(course, sourceTerm, targetTerm); + return Response.success(); + } + + @SaCheckRole("ADMIN") + @PostMapping("/update") + public Response update(@RequestParam("id") Long id, @RequestBody CourseScheduleRequest request) { + var dto = convert(request); + + var newCourse = courseScheduleService.update(id, dto); + + return Response.success(newCourse); + } + + private CourseScheduleDTO convert(CourseScheduleRequest request) { + CourseScheduleDTO dto = new CourseScheduleDTO(); + dto.setStartWeek(request.getStartWeek()); + dto.setEndWeek(request.getEndWeek()); + dto.setTime(request.getEndWeek()); + dto.setWeekday(request.getWeekday()); + dto.setAcademicTerm(request.getTerm()); + dto.setPlace(request.getPlace()); + dto.setTime(request.getSection()); + + return dto; + } + + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + courseScheduleService.delete(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/schedule/ScheduleController.java b/backend/src/main/java/rd/controller/schedule/ScheduleController.java new file mode 100644 index 0000000..8c26332 --- /dev/null +++ b/backend/src/main/java/rd/controller/schedule/ScheduleController.java @@ -0,0 +1,59 @@ +package rd.controller.schedule; + +import rd.data.dto.schedule.CourseScheduleDTO; +import rd.data.model.response.PaginationWrapper; +import rd.data.model.response.Response; +import rd.service.schedule.CourseScheduleService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/course-schedule") +public class ScheduleController { + + private final CourseScheduleService courseScheduleService; + + public ScheduleController(CourseScheduleService courseScheduleService) { + this.courseScheduleService = courseScheduleService; + } + + @RequestMapping("/list") + public Response>> list( + @RequestParam(value = "course") Long course, + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize, + @RequestParam(value = "term", required = false) String term + ) { + if (term == null || term.isEmpty() | term.equals("全部")) { + term = null; + } + + var result = courseScheduleService.getScheduleOfCourse(course, term, page, pageSize); + return Response.success(result); + } + + @RequestMapping("/list-available") + public Response> getAllForCourse( + @RequestParam(value = "course") Long course, + @RequestParam(value = "term") String term + ) { + + var result = courseScheduleService.getTermCourseSchedule(course, term); + return Response.success(result); + } + + @RequestMapping("/info") + public Response info(@RequestParam("id") Long id) { + var result = courseScheduleService.getScheduleDTO(id); + return Response.success(result); + } + + @RequestMapping("/selected-count") + public Response selectCount(@RequestParam("id") Long id) { + var result = courseScheduleService.getSelectedCount(id); + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/schedule/StudentScheduleController.java b/backend/src/main/java/rd/controller/schedule/StudentScheduleController.java new file mode 100644 index 0000000..d2cc261 --- /dev/null +++ b/backend/src/main/java/rd/controller/schedule/StudentScheduleController.java @@ -0,0 +1,102 @@ +package rd.controller.schedule; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.stp.StpUtil; +import lombok.extern.slf4j.Slf4j; +import rd.data.dto.schedule.CourseScheduleDetailDTO; +import rd.data.dto.schedule.CourseScheduleWithCourseNameDTO; +import rd.data.db.CourseScheduleWithCourseIdName; +import rd.data.db.table.TeacherInfo; +import rd.data.model.response.Response; +import rd.service.schedule.CourseScheduleService; +import rd.service.schedule.StudentCourseScheduleService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import rd.util.StringUtil; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/student/course-schedule") +public class StudentScheduleController { + + private final CourseScheduleService courseScheduleService; + private final StudentCourseScheduleService studentCourseScheduleService; + + public StudentScheduleController(CourseScheduleService courseScheduleService, + StudentCourseScheduleService studentCourseScheduleService) { + + this.courseScheduleService = courseScheduleService; + this.studentCourseScheduleService = studentCourseScheduleService; + } + + @SaCheckRole("STUDENT") + @RequestMapping("/result") + public Response> list( + @RequestParam(value = "term", required = false, defaultValue = "") String term + ) { + if (term == null || term.isEmpty()) { + term = StringUtil.getCurrentTermString(); + } + + var uid = StpUtil.getLoginIdAsLong(); + var schedules = courseScheduleService.getStudentTermSchedule(uid, term); + + var result = schedules.stream().map(StudentScheduleController::convert).toList(); + + return Response.success(result); + } + + private static CourseScheduleDetailDTO convert(CourseScheduleWithCourseIdName courseScheduleWithCourseIdName) { + CourseScheduleDetailDTO courseScheduleDetailDTO = new CourseScheduleDetailDTO(); + courseScheduleDetailDTO.setCourseId(courseScheduleWithCourseIdName.getCourseId()); + courseScheduleDetailDTO.setScheduleId(courseScheduleWithCourseIdName.getScheduleId()); + courseScheduleDetailDTO.setCourseName(courseScheduleWithCourseIdName.getCourseName()); + courseScheduleDetailDTO.setCourseHours(courseScheduleWithCourseIdName.getCourseHours()); + courseScheduleDetailDTO.setStartWeek(courseScheduleWithCourseIdName.getStartWeek()); + courseScheduleDetailDTO.setEndWeek(courseScheduleWithCourseIdName.getEndWeek()); + courseScheduleDetailDTO.setTime(courseScheduleWithCourseIdName.getTime()); + courseScheduleDetailDTO.setWeekday(courseScheduleWithCourseIdName.getWeekday()); + courseScheduleDetailDTO.setAcademicTerm(courseScheduleWithCourseIdName.getAcademicTerm()); + courseScheduleDetailDTO.setSpringTerm(courseScheduleWithCourseIdName.getSpringTerm()); + courseScheduleDetailDTO.setPlace(courseScheduleWithCourseIdName.getPlace()); + courseScheduleDetailDTO.setExamRatio(courseScheduleWithCourseIdName.getExamRatio()); + courseScheduleDetailDTO.setCreateTime(courseScheduleWithCourseIdName.getCreateTime()); + + return courseScheduleDetailDTO; + } + + @SaCheckRole("STUDENT") + @RequestMapping("/select") + public Response select(@RequestParam("schedule") Long schedule, + @RequestParam("activity") Long activity + ) { + Long uid = StpUtil.getLoginIdAsLong(); + + studentCourseScheduleService.selectSchedule(uid, schedule, activity); + + return Response.success(); + } + + @SaCheckRole("STUDENT") + @RequestMapping("/unselect") + public Response unselect(@RequestParam("id") Long schedule) { + Long uid = StpUtil.getLoginIdAsLong(); + + studentCourseScheduleService.unselect(uid, schedule); + + return Response.success(); + } + + @SaCheckRole("STUDENT") + @RequestMapping("/check-selected") + public Response select(@RequestParam("id") Long schedule) { + Long uid = StpUtil.getLoginIdAsLong(); + var result = studentCourseScheduleService.isStudentSelected(uid, schedule); + + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/schedule/TeacherScheduleController.java b/backend/src/main/java/rd/controller/schedule/TeacherScheduleController.java new file mode 100644 index 0000000..fa555bd --- /dev/null +++ b/backend/src/main/java/rd/controller/schedule/TeacherScheduleController.java @@ -0,0 +1,32 @@ +package rd.controller.schedule; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.stp.StpUtil; +import rd.data.db.CourseScheduleWithCourseIdName; +import rd.data.model.response.Response; +import rd.service.schedule.TeacherCourseScheduleService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/teacher/course-schedule") +public class TeacherScheduleController { + private final TeacherCourseScheduleService teacherCourseScheduleService; + + public TeacherScheduleController(TeacherCourseScheduleService teacherCourseScheduleService) { + + this.teacherCourseScheduleService = teacherCourseScheduleService; + } + + @SaCheckRole("TEACHER") + @RequestMapping("/teacher-schedules") + public Response> list(@RequestParam("term") String term) { + var uid = StpUtil.getLoginIdAsLong(); + var result = teacherCourseScheduleService.getTeacherSchedule(uid, term); + + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/score/ScoreController.java b/backend/src/main/java/rd/controller/score/ScoreController.java new file mode 100644 index 0000000..66ebfed --- /dev/null +++ b/backend/src/main/java/rd/controller/score/ScoreController.java @@ -0,0 +1,66 @@ +package rd.controller.score; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.net.URLEncodeUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletResponse; +import rd.data.code.ServiceCode; +import rd.data.model.response.Response; + +import rd.service.score.ScoreService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; + +@RestController +@RequestMapping("/score") +public class ScoreController { + private final ScoreService scoreService; + + private final ObjectMapper objectMapper; + + public ScoreController(ScoreService scoreService, ObjectMapper objectMapper) { + this.scoreService = scoreService; + this.objectMapper = objectMapper; + } + + @SaCheckRole(value = {"TEACHER", "ADMIN"}, mode = SaMode.OR) + @RequestMapping("/export") + public void exportCourseTermScoreList(@RequestParam("course") Long course, + @RequestParam("term") String term, + HttpServletResponse response + ) throws IOException { + if (course == null) { + Response responseData = Response.error(ServiceCode.ParamWrong); + response.setContentType("application/json"); + response.getWriter().write(objectMapper.writeValueAsString(responseData)); + return; + } + + var data = scoreService.exportTermCourseAllStudentScoreExcel(course, term); + + if (data == null) { + Response responseData = Response.success("数据是空的"); + response.setContentType("application/json"); + response.getWriter().write(objectMapper.writeValueAsString(responseData)); + return; + } + + response.setContentLength(data.getData().length); + response.setContentType("application/octet-stream"); + + var filename = String.format("export_score_%s_%s_%d.xlsx", data.getFileName(), term, course); + filename = URLEncodeUtil.encodeAll(filename); + + response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", filename)); + + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); + + response.getOutputStream().write(data.getData()); + } +} diff --git a/backend/src/main/java/rd/controller/score/StudentScoreController.java b/backend/src/main/java/rd/controller/score/StudentScoreController.java new file mode 100644 index 0000000..964370b --- /dev/null +++ b/backend/src/main/java/rd/controller/score/StudentScoreController.java @@ -0,0 +1,31 @@ +package rd.controller.score; + +import cn.dev33.satoken.annotation.SaCheckRole; +import cn.dev33.satoken.stp.StpUtil; +import rd.data.dto.score.StudentScore; +import rd.data.model.response.Response; +import rd.service.score.ScoreService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/student/score") +public class StudentScoreController { + + private final ScoreService scoreService; + + public StudentScoreController(ScoreService scoreService) { + this.scoreService = scoreService; + } + + @SaCheckRole("STUDENT") + @RequestMapping("/all") + public Response> getAll() { + var uid = StpUtil.getLoginIdAsLong(); + var result = scoreService.getStudentAllScore(uid, null); + + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/score/TeacherScoreController.java b/backend/src/main/java/rd/controller/score/TeacherScoreController.java new file mode 100644 index 0000000..e98d8e9 --- /dev/null +++ b/backend/src/main/java/rd/controller/score/TeacherScoreController.java @@ -0,0 +1,43 @@ +package rd.controller.score; + +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.dto.score.CourseScoreInfoDto; +import rd.data.model.response.Response; +import rd.service.score.ScoreService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/teacher/score") +public class TeacherScoreController { + + private final ScoreService scoreService; + + public TeacherScoreController(ScoreService scoreService) { + this.scoreService = scoreService; + } + + @SaCheckRole("TEACHER") + @RequestMapping("/list-students") + public Response> listStudents(@RequestParam("course") Long courseId, + @RequestParam("term") String term + ) { + var result = scoreService.getCourseTermAllSelectedStudentScore(courseId, term); + + return Response.success(result); + } + + @SaCheckRole("TEACHER") + @PostMapping("/update") + public Response update(@RequestParam(value = "scoreId", required = false) Long scoreId, + @RequestParam("course") Long courseId, @RequestParam("term") String term, + @RequestBody CourseScoreInfoDto courseScoreInfoDto) { + + scoreService.insertOrUpdateScore(scoreId, courseId, term, courseScoreInfoDto); + + return Response.success(); + } +} + + diff --git a/backend/src/main/java/rd/controller/student/AdminStudentController.java b/backend/src/main/java/rd/controller/student/AdminStudentController.java new file mode 100644 index 0000000..ed99c61 --- /dev/null +++ b/backend/src/main/java/rd/controller/student/AdminStudentController.java @@ -0,0 +1,79 @@ +package rd.controller.student; + +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.code.ServiceCode; +import rd.data.dto.user.student.BasicStudentInfoDto; +import rd.data.dto.user.student.BasicStudentInfoWithMajorNameDto; +import rd.data.db.table.StudentInfo; +import rd.data.db.table.TeacherInfo; +import rd.data.model.request.admin.StudentAddWithMajorIdRequest; +import rd.data.model.request.admin.StudentAddWithMajorNameRequest; +import rd.data.model.response.Response; + +import rd.service.user.StudentUserService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/user/student") +public class AdminStudentController { + private final StudentUserService studentUserService; + + public AdminStudentController(StudentUserService studentUserService) { + this.studentUserService = studentUserService; + } + + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestBody StudentAddWithMajorIdRequest request) { + var dto = new BasicStudentInfoDto( + request.studentNumber(), request.studentName(), request.majorId() + ); + + var teacherInfo = studentUserService.add(dto); + return Response.success(teacherInfo); + } +// +// @SaCheckRole("ADMIN") +// @PostMapping("/add-batch") +// public Response addBatch(@RequestBody StudentBatchAddRequest request) { +// var dto = new BasicStudentInfoDto(request.studentNumber(), request.studentName(), request.major()); +// +// var teacherInfo = studentUserService.add(dto); +// return Response.success(teacherInfo); +// } + + @SaCheckRole("ADMIN") + @PostMapping("/add-with-auto-major") + public Response addWithAutoMajor(@RequestBody StudentAddWithMajorNameRequest request) { + if (request.studentNumber() == null || request.studentName() == null || request.majorName() == null) { + return Response.error(ServiceCode.ParamWrong); + } + var dto = new BasicStudentInfoWithMajorNameDto( + request.studentNumber(), request.studentName(), request.majorName() + ); + + var teacherInfo = studentUserService.addWithAutoMajor(dto); + return Response.success(teacherInfo); + } +// +// @SaCheckRole("ADMIN") +// @PostMapping("/update") +// public Response update(@RequestParam("id") String id, @RequestBody StudentAddRequest request) { +// String username = request.studentNumber(); +// String teacherName = request.studentName(); +// String initialPassword = request.initialPassword(); +// +// var dto = new BasicStudentInfoDto(request.studentNumber(), request.studentName()); +// +// var teacherInfo = studentUserService.update(id, dto); +// +// return Response.success(teacherInfo); +// } + + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + studentUserService.delete(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/student/StudentController.java b/backend/src/main/java/rd/controller/student/StudentController.java new file mode 100644 index 0000000..9420fee --- /dev/null +++ b/backend/src/main/java/rd/controller/student/StudentController.java @@ -0,0 +1,38 @@ +package rd.controller.student; + +import rd.data.dto.user.student.StudentUserInfoDTO; +import rd.data.db.table.StudentInfo; +import rd.data.model.response.PaginationWrapper; +import rd.data.model.response.Response; +import rd.service.user.StudentUserService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/student") +public class StudentController { + private final StudentUserService studentUserService; + + public StudentController(StudentUserService studentUserService) { + this.studentUserService = studentUserService; + } + + @GetMapping("/list") + public Response>> list( + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var result = studentUserService.list(page, pageSize); + return Response.success(result); + } + + @GetMapping("/info") + public Response info(@RequestParam(value = "id") Long id) { + var result = studentUserService.getInfoById(id); + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/teacher/AdminTeacherController.java b/backend/src/main/java/rd/controller/teacher/AdminTeacherController.java new file mode 100644 index 0000000..1251f30 --- /dev/null +++ b/backend/src/main/java/rd/controller/teacher/AdminTeacherController.java @@ -0,0 +1,52 @@ +package rd.controller.teacher; + +import cn.dev33.satoken.annotation.SaCheckRole; +import rd.data.dto.user.teacher.TeacherUserDTO; +import rd.data.db.table.TeacherInfo; +import rd.data.model.request.admin.TeacherAddRequest; +import rd.data.model.response.Response; +import rd.service.user.TeacherUserService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/admin/user/teacher") +public class AdminTeacherController { + private final TeacherUserService teacherUserService; + + public AdminTeacherController(TeacherUserService teacherUserService) { + this.teacherUserService = teacherUserService; + } + + @SaCheckRole("ADMIN") + @PostMapping("/add") + public Response add(@RequestBody TeacherAddRequest request) { + String username = request.username(); + String teacherName = request.teacherName(); + String initialPassword = request.initialPassword(); + + TeacherUserDTO dto = new TeacherUserDTO(username, teacherName, initialPassword); + + var teacherInfo = teacherUserService.add(dto); + return Response.success(teacherInfo); + } + + @SaCheckRole("ADMIN") + @PostMapping("/update") + public Response update(@RequestParam("id") Long id, @RequestBody TeacherAddRequest request) { + String username = request.username(); + String teacherName = request.teacherName(); + String initialPassword = request.initialPassword(); + + TeacherUserDTO dto = new TeacherUserDTO(username, teacherName, initialPassword); + var teacherInfo = teacherUserService.update(id, dto); + + return Response.success(teacherInfo); + } + + @SaCheckRole("ADMIN") + @PostMapping("/delete") + public Response delete(@RequestParam("id") Long id) { + teacherUserService.delete(id); + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/teacher/TeacherController.java b/backend/src/main/java/rd/controller/teacher/TeacherController.java new file mode 100644 index 0000000..059adae --- /dev/null +++ b/backend/src/main/java/rd/controller/teacher/TeacherController.java @@ -0,0 +1,35 @@ +package rd.controller.teacher; + +import rd.data.dto.user.teacher.TeacherUserInfoDTO; +import rd.data.db.table.TeacherInfo; +import rd.data.model.response.PaginationWrapper; +import rd.data.model.response.Response; +import rd.service.user.TeacherUserService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/teacher") +public class TeacherController { + private final TeacherUserService teacherUserService; + + public TeacherController(TeacherUserService teacherUserService) { + this.teacherUserService = teacherUserService; + } + + @GetMapping("/list") + public Response>> list( + @RequestParam(value = "page", required = false, defaultValue = "1") int page, + @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize + ) { + var result = teacherUserService.list(page, pageSize); + return Response.success(result); + } + + @GetMapping("/info") + public Response info(@RequestParam(value = "id") Long id) { + var result = teacherUserService.getUserInfoById(id); + return Response.success(result); + } +} diff --git a/backend/src/main/java/rd/controller/user/UserAuthController.java b/backend/src/main/java/rd/controller/user/UserAuthController.java new file mode 100644 index 0000000..5399d23 --- /dev/null +++ b/backend/src/main/java/rd/controller/user/UserAuthController.java @@ -0,0 +1,120 @@ +package rd.controller.user; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.crypto.digest.BCrypt; +import lombok.extern.slf4j.Slf4j; +import rd.data.code.ServiceCode; +import rd.data.db.table.UserBasic; +import rd.data.enums.UserType; +import rd.data.model.request.auth.UserLoginRequest; +import rd.data.model.response.Response; + +import rd.data.model.response.auth.UserLoginStatusResponse; +import rd.data.model.response.user.UserBasicInfo; +import rd.service.user.StudentUserService; +import rd.service.user.UserBasicService; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * 登录认证Controller + */ +@Slf4j +@RestController +@RequestMapping("/user/auth") +public class UserAuthController { + + private final UserBasicService userBasicService; + private final StudentUserService studentUserService; + + public UserAuthController(UserBasicService userBasicService, StudentUserService studentUserService) { + this.userBasicService = userBasicService; + this.studentUserService = studentUserService; + } + + @RequestMapping("/login") + public Response login(@RequestBody UserLoginRequest loginRequest) { + String username = loginRequest.username(); + String password = loginRequest.password(); + + UserBasic userBasic = userBasicService.getUserBasicByUsername(username); + if (userBasic == null || userBasic.getPassword() == null || userBasic.getPassword().isEmpty()) { + // 用户不存在,尝试从教务处获取用户信息 + log.info("用户'{}'不存在,尝试从教务处获取用户信息", username); + try { + var newStudentDto = studentUserService.tryAddStudentFromOfficial(username, password); + userBasic = newStudentDto.userBasic(); + } catch (Exception e) { + return Response.error(ServiceCode.StuNumDoesNotExists, + "从教务处获取用户信息失败,\n" + + "如果是非学生学生用户,请检查用户名是否正确;\n" + + "如果是学生用户,请检查用户名和密码,或者再重试重试一下。\nException:" + e + ); + } + } else { + // 用户已经存在,直接从数据库获取数据 + if (!BCrypt.checkpw(password, userBasic.getPassword())) { + return Response.error(ServiceCode.UserPasswordWrong); + } + } + + StpUtil.login(userBasic.getId()); + + UserType userType = switch (userBasic.getType()) { + case 0 -> UserType.STUDENT; + case 1 -> UserType.TEACHER; + case 2 -> UserType.ADMIN; + default -> { + log.warn("未知的用户类型:{}", userBasic.getType()); + yield UserType.STUDENT; + } + }; + + var basicInfoResponse = UserBasicInfo.builder() + .id(userBasic.getId()) + .username(userBasic.getUsername()) + .userType(userType) + .build(); + + return Response.success(basicInfoResponse); + } + + @RequestMapping("/logout") + public Response logout() { + StpUtil.logout(); + return Response.success(); + } + + @RequestMapping("/check") + public Response checkLogin() { + boolean login = StpUtil.isLogin(); + if (!login) { + return Response.success(new UserLoginStatusResponse(null, null, false)); + } + + Long uid = StpUtil.getLoginIdAsLong(); + String role = StpUtil.getRoleList().get(0); + + return Response.success(new UserLoginStatusResponse(uid, role, true)); + } + + @SaCheckLogin + @RequestMapping("/modify-password") + public Response modifyPassword(@RequestParam("old") String oldPassword, + @RequestParam("new") String newPassword) { + Long uid = StpUtil.getLoginIdAsLong(); + var userBasic = userBasicService.getUserBasicById(uid); + if (!BCrypt.checkpw(oldPassword, userBasic.getPassword())) { + return Response.error(ServiceCode.UserPasswordWrong); + } + + userBasicService.updatePassword(uid, newPassword); + + StpUtil.logout(); + + return Response.success(); + } +} diff --git a/backend/src/main/java/rd/controller/user/UserInfoController.java b/backend/src/main/java/rd/controller/user/UserInfoController.java new file mode 100644 index 0000000..e897f82 --- /dev/null +++ b/backend/src/main/java/rd/controller/user/UserInfoController.java @@ -0,0 +1,35 @@ +package rd.controller.user; + +import cn.dev33.satoken.stp.StpUtil; +import rd.data.code.ServiceCode; +import rd.data.enums.UserType; +import rd.data.model.response.Response; + +import rd.service.user.UserInfoService; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/user/info") +public class UserInfoController { + private final UserInfoService userInfoService; + + public UserInfoController(UserInfoService userInfoService) { + this.userInfoService = userInfoService; + } + + @RequestMapping("") + public Object getUserInfo(@RequestParam("uid") Long uid, @RequestParam("userType") String userType) { + // 如果不是自己的账号并且也不是管理员 + if (!uid.equals(StpUtil.getLoginIdAsLong()) && !StpUtil.hasRole(UserType.ADMIN.name())) { + return Response.error(ServiceCode.PermissionDenied); + } + + Object userInfo = switch (userType) { + case "STUDENT" -> userInfoService.getAsStudent(uid); + case "TEACHER" -> userInfoService.getAsTeacher(uid); + default -> null; + }; + + return Response.success(userInfo); + } +} diff --git a/backend/src/main/java/rd/dao/BatchSQLInjector.java b/backend/src/main/java/rd/dao/BatchSQLInjector.java new file mode 100644 index 0000000..bf6d7fb --- /dev/null +++ b/backend/src/main/java/rd/dao/BatchSQLInjector.java @@ -0,0 +1,19 @@ +package rd.dao; + +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class BatchSQLInjector extends DefaultSqlInjector { + @Override + public List getMethodList(Class mapperClass, TableInfo tableInfo) { + List methodList = super.getMethodList(mapperClass, tableInfo); + methodList.add(new InsertBatchSomeColumn()); + return methodList; + } +} diff --git a/backend/src/main/java/rd/dao/mapper/activity/ActivityMapper.java b/backend/src/main/java/rd/dao/mapper/activity/ActivityMapper.java new file mode 100644 index 0000000..1bfde28 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/activity/ActivityMapper.java @@ -0,0 +1,16 @@ +package rd.dao.mapper.activity; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.Activity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.time.LocalDateTime; +import java.util.List; + +@Mapper +public interface ActivityMapper extends BaseMapper { + List getConflictActivity(@Param("start") LocalDateTime start, + @Param("end") LocalDateTime end + ); +} diff --git a/backend/src/main/java/rd/dao/mapper/activity/ActivityTargetMapper.java b/backend/src/main/java/rd/dao/mapper/activity/ActivityTargetMapper.java new file mode 100644 index 0000000..6ef0718 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/activity/ActivityTargetMapper.java @@ -0,0 +1,12 @@ +package rd.dao.mapper.activity; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.ActivityTarget; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface ActivityTargetMapper extends BaseMapper { + int insertBatchSomeColumn(List entityList); +} diff --git a/backend/src/main/java/rd/dao/mapper/course/CourseMapper.java b/backend/src/main/java/rd/dao/mapper/course/CourseMapper.java new file mode 100644 index 0000000..6ff1d03 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/course/CourseMapper.java @@ -0,0 +1,36 @@ +package rd.dao.mapper.course; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.Course; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CourseMapper extends BaseMapper { + /** + * 获取某专业某一年级在对应活动中的可选课程 + * + * @param grade 年级 + * @param major 专业id + * @param activity 活动id + * @return + */ + List getGradeMajorActivityCandidateCourse(@Param("grade") Integer grade, + @Param("major") Long major, + @Param("activity") Long activity + ); + + /** + * 获取学生在对应活动中的可选课程 + * + * @param studentId 学生id + * @param activity 活动id + * @return + */ + List getStudentActivityCandidateCourse(@Param("studentId") Long studentId, + @Param("activity") Long activity + ); + +} diff --git a/backend/src/main/java/rd/dao/mapper/course/CourseSelectionMapper.java b/backend/src/main/java/rd/dao/mapper/course/CourseSelectionMapper.java new file mode 100644 index 0000000..64dc5ed --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/course/CourseSelectionMapper.java @@ -0,0 +1,35 @@ +package rd.dao.mapper.course; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.CourseScheduleWithCourseIdName; +import rd.data.db.CourseScheduleSelectionInfo; +import rd.data.db.table.CourseSchedule; +import rd.data.db.table.CourseSelection; +import rd.data.db.table.StudentInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CourseSelectionMapper extends BaseMapper { + List getStudentSelectedSchedulesDetail( + @Param("student") Long student, + @Param("term") String term + ); + + List getStudentSelectedSchedules(@Param("student") Long student, @Param("term") String term); + + Integer isStudentSelected(@Param("student") Long student, + @Param("term") String term, + @Param("course") Long course + ); + + List getSelectedStudentList(@Param("course") Long course, + @Param("term") String term + ); + + List getNotSelectStudentList(@Param("course") Long course, + @Param("term") String term + ); +} diff --git a/backend/src/main/java/rd/dao/mapper/course/CourseTeacherMapper.java b/backend/src/main/java/rd/dao/mapper/course/CourseTeacherMapper.java new file mode 100644 index 0000000..0966497 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/course/CourseTeacherMapper.java @@ -0,0 +1,22 @@ +package rd.dao.mapper.course; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.CourseScheduleWithCourseIdName; +import rd.data.db.table.Course; +import rd.data.db.table.CourseTeacher; +import rd.data.db.table.TeacherInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CourseTeacherMapper extends BaseMapper { + List getAllCourseScheduleForTeacher(@Param("teacher") Long teacher, @Param("term") String term); + + List getCourseAllTeacherInfo(@Param("course") Long course); + + List getCourseForTeacher(@Param("teacher") Long teacher); + + int insertBatchSomeColumn(List entityList); +} diff --git a/backend/src/main/java/rd/dao/mapper/experiment/ExperimentItemMapper.java b/backend/src/main/java/rd/dao/mapper/experiment/ExperimentItemMapper.java new file mode 100644 index 0000000..c72ab2d --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/experiment/ExperimentItemMapper.java @@ -0,0 +1,10 @@ +package rd.dao.mapper.experiment; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.ExperimentItem; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ExperimentItemMapper extends BaseMapper { + +} diff --git a/backend/src/main/java/rd/dao/mapper/major/MajorMapper.java b/backend/src/main/java/rd/dao/mapper/major/MajorMapper.java new file mode 100644 index 0000000..7dda9e8 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/major/MajorMapper.java @@ -0,0 +1,9 @@ +package rd.dao.mapper.major; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.Major; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface MajorMapper extends BaseMapper { +} diff --git a/backend/src/main/java/rd/dao/mapper/schedule/CourseScheduleMapper.java b/backend/src/main/java/rd/dao/mapper/schedule/CourseScheduleMapper.java new file mode 100644 index 0000000..208e303 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/schedule/CourseScheduleMapper.java @@ -0,0 +1,22 @@ +package rd.dao.mapper.schedule; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.CourseSchedule; +import rd.data.db.table.StudentInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CourseScheduleMapper extends BaseMapper { + Object getScheduleDetailFromCourseId(String course); + + Object getScheduleDetailFromScheduleId(String courseSchedule); + + Integer getScheduleTotalStudent(String courseSchedule); + + List getSelectedStudent(String courseSchedule); + + Object getCourseScheduleDetail(@Param("id") Long id); +} diff --git a/backend/src/main/java/rd/dao/mapper/score/ExperimentScoreMapper.java b/backend/src/main/java/rd/dao/mapper/score/ExperimentScoreMapper.java new file mode 100644 index 0000000..d825867 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/score/ExperimentScoreMapper.java @@ -0,0 +1,9 @@ +package rd.dao.mapper.score; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.ExperimentScore; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ExperimentScoreMapper extends BaseMapper { +} diff --git a/backend/src/main/java/rd/dao/mapper/score/ScoreMapper.java b/backend/src/main/java/rd/dao/mapper/score/ScoreMapper.java new file mode 100644 index 0000000..bf4808b --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/score/ScoreMapper.java @@ -0,0 +1,23 @@ +package rd.dao.mapper.score; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.dto.score.CourseScoreInfoDto; +import rd.data.dto.score.StudentScore; +import rd.data.db.table.Score; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface ScoreMapper extends BaseMapper { + List getStudentAllScore(@Param("student") Long student, @Param("term") String term); + + List getTermCourseAllSelectedStudentScore(@Param("course") Long course, + @Param("term") String term + ); + + void insertOrUpdateScore(@Param("score") Score score); + +// void insertOrUpdateScoreBatch(@Param("scores") List score); +} diff --git a/backend/src/main/java/rd/dao/mapper/user/StudentInfoMapper.java b/backend/src/main/java/rd/dao/mapper/user/StudentInfoMapper.java new file mode 100644 index 0000000..de8921a --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/user/StudentInfoMapper.java @@ -0,0 +1,11 @@ +package rd.dao.mapper.user; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.StudentInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface StudentInfoMapper extends BaseMapper { + void insertOrUpdate(@Param("student") StudentInfo studentInfo); +} diff --git a/backend/src/main/java/rd/dao/mapper/user/TeacherInfoMapper.java b/backend/src/main/java/rd/dao/mapper/user/TeacherInfoMapper.java new file mode 100644 index 0000000..254405b --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/user/TeacherInfoMapper.java @@ -0,0 +1,9 @@ +package rd.dao.mapper.user; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.TeacherInfo; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TeacherInfoMapper extends BaseMapper { +} diff --git a/backend/src/main/java/rd/dao/mapper/user/UserBasicMapper.java b/backend/src/main/java/rd/dao/mapper/user/UserBasicMapper.java new file mode 100644 index 0000000..c936937 --- /dev/null +++ b/backend/src/main/java/rd/dao/mapper/user/UserBasicMapper.java @@ -0,0 +1,9 @@ +package rd.dao.mapper.user; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import rd.data.db.table.UserBasic; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserBasicMapper extends BaseMapper { +} diff --git a/backend/src/main/java/rd/dao/type/DoubleListTypeHandler.java b/backend/src/main/java/rd/dao/type/DoubleListTypeHandler.java new file mode 100644 index 0000000..9de8f79 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/DoubleListTypeHandler.java @@ -0,0 +1,77 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class DoubleListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "Double"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var arr = array.getArray(); + var result = new ArrayList(); + + if (arr instanceof Double[] doubleArr) { + Collections.addAll(result, doubleArr); + } else if (arr instanceof Float[] floatArr) { + for (Float floatVal : floatArr) { + result.add(floatVal.doubleValue()); + } + } else if (arr instanceof Integer[] intArr) { + for (Integer intVal : intArr) { + result.add(intVal.doubleValue()); + } + } else if (arr instanceof Short[] shortArr) { + for (Short shortVal : shortArr) { + result.add(shortVal.doubleValue()); + } + } else if (arr instanceof Long[] longArr) { + for (Long longVal : longArr) { + result.add(longVal.doubleValue()); + } + } + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/FloatListTypeHandler.java b/backend/src/main/java/rd/dao/type/FloatListTypeHandler.java new file mode 100644 index 0000000..0e7330d --- /dev/null +++ b/backend/src/main/java/rd/dao/type/FloatListTypeHandler.java @@ -0,0 +1,77 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class FloatListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "double"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var arr = array.getArray(); + var result = new ArrayList(); + + if (arr instanceof Float[] doubleArr) { + Collections.addAll(result, doubleArr); + } else if (arr instanceof Double[] doublearr) { + for (Double intVal : doublearr) { + result.add(intVal.floatValue()); + } + } else if (arr instanceof Integer[] intArr) { + for (Integer intVal : intArr) { + result.add(intVal.floatValue()); + } + } else if (arr instanceof Short[] shortArr) { + for (Short shortVal : shortArr) { + result.add(shortVal.floatValue()); + } + } else if (arr instanceof Long[] longArr) { + for (Long longVal : longArr) { + result.add(longVal.floatValue()); + } + } + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/IntegerListTypeHandler.java b/backend/src/main/java/rd/dao/type/IntegerListTypeHandler.java new file mode 100644 index 0000000..1913594 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/IntegerListTypeHandler.java @@ -0,0 +1,67 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.*; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class IntegerListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "integer"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var arr = array.getArray(); + var result = new ArrayList(); + + if (arr instanceof Integer[] intArr) { + Collections.addAll(result, intArr); + } else if (arr instanceof Short[] shortArr) { + for (Short shortVal : shortArr) { + result.add(shortVal.intValue()); + } + } else if (arr instanceof Long[] longArr) { + for (Long longVal : longArr) { + result.add(longVal.intValue()); + } + } + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/LongListTypeHandler.java b/backend/src/main/java/rd/dao/type/LongListTypeHandler.java new file mode 100644 index 0000000..2690782 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/LongListTypeHandler.java @@ -0,0 +1,69 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class LongListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "varchar"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var arr = array.getArray(); + var result = new ArrayList(); + + if (arr instanceof Long[] longArr) { + Collections.addAll(result, longArr); + } else if (arr instanceof Integer[] intArr) { + for (Integer intVal : intArr) { + result.add(intVal.longValue()); + } + } else if (arr instanceof Short[] shortArr) { + for (Short shortVal : shortArr) { + result.add(shortVal.longValue()); + } + } + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/ShortListTypeHandler.java b/backend/src/main/java/rd/dao/type/ShortListTypeHandler.java new file mode 100644 index 0000000..9e9ac9e --- /dev/null +++ b/backend/src/main/java/rd/dao/type/ShortListTypeHandler.java @@ -0,0 +1,69 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class ShortListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "integer"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var arr = array.getArray(); + var result = new ArrayList(); + + if (arr instanceof Short[] shortArr) { + Collections.addAll(result, shortArr); + } else if (arr instanceof Integer[] intArr) { + for (Integer intVal : intArr) { + result.add(intVal.shortValue()); + } + } else if (arr instanceof Long[] longArr) { + for (Long longVal : longArr) { + result.add(longVal.shortValue()); + } + } + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/StringListTypeHandler.java b/backend/src/main/java/rd/dao/type/StringListTypeHandler.java new file mode 100644 index 0000000..9148610 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/StringListTypeHandler.java @@ -0,0 +1,55 @@ +package rd.dao.type; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.*; + +import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Slf4j +//@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.ARRAY) +public class StringListTypeHandler extends BaseTypeHandler> { + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + String typeName = "varchar"; + + Connection conn = ps.getConnection(); + Array array = conn.createArrayOf(typeName, parameter.toArray()); + ps.setArray(i, array); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + return getArray(rs.getArray(columnName)); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return getArray(rs.getArray(columnIndex)); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return getArray(cs.getArray(columnIndex)); + } + + private List getArray(Array array) { + if (array == null) { + return null; + } + try { + var strArray = (String[]) array.getArray(); + var result = new ArrayList(strArray.length); + Collections.addAll(result, strArray); + + return result; + } catch (Exception e) { + log.error("类型转换出错:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/json/BaseJsonListTypeHandler.java b/backend/src/main/java/rd/dao/type/json/BaseJsonListTypeHandler.java new file mode 100644 index 0000000..f581be4 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/json/BaseJsonListTypeHandler.java @@ -0,0 +1,9 @@ +package rd.dao.type.json; + +import java.util.ArrayList; + +public abstract class BaseJsonListTypeHandler extends BaseJsonTypeHandler> { + protected BaseJsonListTypeHandler(Class clazz) { + super(objectMapper.getTypeFactory().constructParametricType(ArrayList.class, clazz)); + } +} diff --git a/backend/src/main/java/rd/dao/type/json/BaseJsonTypeHandler.java b/backend/src/main/java/rd/dao/type/json/BaseJsonTypeHandler.java new file mode 100644 index 0000000..682efd8 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/json/BaseJsonTypeHandler.java @@ -0,0 +1,63 @@ +package rd.dao.type.json; + +import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.type.JdbcType; +import org.postgresql.util.PGobject; + +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@Slf4j +public abstract class BaseJsonTypeHandler extends AbstractJsonTypeHandler { + protected static final ObjectMapper objectMapper = new ObjectMapper(); + + protected final JavaType javaType; + protected final Class clazz; + + protected BaseJsonTypeHandler(JavaType javaType) { + this.javaType = javaType; + this.clazz = null; + } + + protected BaseJsonTypeHandler(Class clazz) { + this.javaType = null; + this.clazz = clazz; + } + + @Override + protected T parse(String json) { + try { + if (clazz == null) { + return objectMapper.readValue(json, javaType); + } else { + return objectMapper.readValue(json, clazz); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { + PGobject obj = new PGobject(); + obj.setType("jsonb"); + obj.setValue(toJson(parameter)); + + ps.setObject(i, obj); + } + + @Override + protected String toJson(T obj) { + try { + return objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.warn("对象序列化异常:", e); + } + + return null; + } +} diff --git a/backend/src/main/java/rd/dao/type/json/FloatMapTypeHandler.java b/backend/src/main/java/rd/dao/type/json/FloatMapTypeHandler.java new file mode 100644 index 0000000..ed981fc --- /dev/null +++ b/backend/src/main/java/rd/dao/type/json/FloatMapTypeHandler.java @@ -0,0 +1,15 @@ +package rd.dao.type.json; + +import com.fasterxml.jackson.databind.JavaType; + +import java.util.HashMap; +import java.util.Map; + +public class FloatMapTypeHandler extends BaseJsonTypeHandler> { + private static final JavaType FLOAT_MAP_TYPE = + objectMapper.getTypeFactory().constructMapType(HashMap.class, String.class, Float.class); + + public FloatMapTypeHandler() { + super(FLOAT_MAP_TYPE); + } +} diff --git a/backend/src/main/java/rd/dao/type/json/UsualScoreItemListTypeHandler.java b/backend/src/main/java/rd/dao/type/json/UsualScoreItemListTypeHandler.java new file mode 100644 index 0000000..313c121 --- /dev/null +++ b/backend/src/main/java/rd/dao/type/json/UsualScoreItemListTypeHandler.java @@ -0,0 +1,9 @@ +package rd.dao.type.json; + +import rd.data.db.UsualScoreItem; + +public class UsualScoreItemListTypeHandler extends BaseJsonListTypeHandler { + public UsualScoreItemListTypeHandler() { + super(UsualScoreItem.class); + } +} diff --git a/backend/src/main/java/rd/data/Constants.java b/backend/src/main/java/rd/data/Constants.java new file mode 100644 index 0000000..5fb6a2b --- /dev/null +++ b/backend/src/main/java/rd/data/Constants.java @@ -0,0 +1,20 @@ +package rd.data; + +import java.time.format.DateTimeFormatter; + +public class Constants { + public static class DateTime { + public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + public static final DateTimeFormatter DEFAULT_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + public static final DateTimeFormatter DEFAULT_TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); + } + + public static class Redis { + public static final String WusthelperTokenCacheKey = "rd:cache:wusthelper:token:%s"; + } + + public static class Wusthelper { + public static final String UndergradLogin = "/jwc/login"; + public static final String UndergradStuInfo = "/jwc/get-student-info"; + } +} diff --git a/backend/src/main/java/rd/data/code/ServiceCode.java b/backend/src/main/java/rd/data/code/ServiceCode.java new file mode 100644 index 0000000..29fcd0d --- /dev/null +++ b/backend/src/main/java/rd/data/code/ServiceCode.java @@ -0,0 +1,49 @@ +package rd.data.code; + +public enum ServiceCode { + Ok(0, "ok"), + UnknownErr(-1, "未知错误"), + + ApiNotImplement(-2, "api不存在或未开放/已弃用,请检查app版本"), + ParamWrong(-3, "参数错误"), + RequestInvalid(-4, "请求无效"), + PermissionDenied(-5, "权限不正确"), + + UserAuthErr(100_0000, "登录状态无效或已过期"), + OidcCodeAuthWrong(100_0001, "oidc code 无效"), + + ActivityEnded(101_0000, "活动已结束"), + + DataConflict(102_0000, "数据冲突"), + DataDuplicate(102_0001, "数据重复"), + DataFormatWrong(102_0002, "数据格式错误"), + DataNotExists(102_0003, "数据不存在"), + DataNotMatch(102_0004, "数据不匹配"), + + BaseJwcFetch(103_0000, "wusthelper api 请求错误"), + + UserNotExists(104_0000, "用户不存在"), + UserPasswordWrong(104_0001, "用户密码错误"), + StuNumDoesNotExists(104_0002, "学号不存在"), + + WusthelperApiRequestErr(105_0000, "wusthelper请求错误") + ; + + public final int code; + public final String msg; + + ServiceCode(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public static ServiceCode of(int code) { + for (ServiceCode serviceCode : ServiceCode.values()) { + if (serviceCode.code == code) { + return serviceCode; + } + } + + return null; + } +} diff --git a/backend/src/main/java/rd/data/db/CourseScheduleSelectionInfo.java b/backend/src/main/java/rd/data/db/CourseScheduleSelectionInfo.java new file mode 100644 index 0000000..4bb7a6d --- /dev/null +++ b/backend/src/main/java/rd/data/db/CourseScheduleSelectionInfo.java @@ -0,0 +1,76 @@ +package rd.data.db; + +import lombok.Data; + +@Data +public class CourseScheduleSelectionInfo { + /** + * 学生id + */ + private Long uid; + + /** + * 学号 + */ + private String studentNumber; + + /** + * 学生姓名 + */ + private String name; + + /** + * 专业id + */ + private Long major; + + /** + * 年级,使用大x表示,如大二:2 + */ + private Integer grade; + + /** + * 班级 + */ + private String clazz; + + /** + * 课堂id + */ + private Long schedule; + + /** + * 课程id + */ + private Long course; + + /** + * 开始周 + */ + private Integer startWeek; + + /** + * 结束周 + */ + private Integer endWeek; + + /** + * 节次时间,即第几节课 + */ + private Integer time; + + /** + * 节次时间,即第几节课 + */ + private Integer weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 上课地点 + */ + private String place; +} diff --git a/backend/src/main/java/rd/data/db/CourseScheduleWithCourseIdName.java b/backend/src/main/java/rd/data/db/CourseScheduleWithCourseIdName.java new file mode 100644 index 0000000..a61d804 --- /dev/null +++ b/backend/src/main/java/rd/data/db/CourseScheduleWithCourseIdName.java @@ -0,0 +1,84 @@ +package rd.data.db; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class CourseScheduleWithCourseIdName implements Serializable { + /** + * 课程id + */ + private Long courseId; + + /** + * 课程安排id + */ + private Long scheduleId; + + /** + * 课程名 + */ + private String courseName; + + /** + * 课时 + */ + private Integer courseHours; + + /** + * 开始周 + */ + private Integer startWeek; + + /** + * 结束周 + */ + private Integer endWeek; + + /** + * 节次时间,即第几节课 + */ + private Integer time; + + /** + * 节次时间,即第几节课 + */ + private Integer weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 是否春季期课程 + */ + private Boolean springTerm; + + /** + * 上课地点 + */ + private String place; + + /** + * 考试成绩占比 + */ + private Float examRatio; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; +} diff --git a/backend/src/main/java/rd/data/db/UsualScoreItem.java b/backend/src/main/java/rd/data/db/UsualScoreItem.java new file mode 100644 index 0000000..a17f4c0 --- /dev/null +++ b/backend/src/main/java/rd/data/db/UsualScoreItem.java @@ -0,0 +1,7 @@ +package rd.data.db; + +import lombok.Builder; + +@Builder +public record UsualScoreItem(String name, float score, float ratio) { +} diff --git a/backend/src/main/java/rd/data/db/table/Activity.java b/backend/src/main/java/rd/data/db/table/Activity.java new file mode 100644 index 0000000..f21582c --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/Activity.java @@ -0,0 +1,68 @@ +package rd.data.db.table; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.google.common.base.Objects; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Activity implements Serializable { + /** + * 活动id + */ + private Long id; + + /** + * 活动名称 + */ + private String name; + + /** + * 学期,格式如2023-2024-1 + */ + private String term; + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + public Activity() { + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Activity activity = (Activity) o; + return Objects.equal(id, activity.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } +} diff --git a/backend/src/main/java/rd/data/db/table/ActivityTarget.java b/backend/src/main/java/rd/data/db/table/ActivityTarget.java new file mode 100644 index 0000000..66e0eee --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/ActivityTarget.java @@ -0,0 +1,54 @@ +package rd.data.db.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.apache.ibatis.type.ArrayTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.time.LocalDateTime; + +@Data +@TableName(autoResultMap = true) +public class ActivityTarget { + /** + * id + */ + private Long id; + + /** + * activity + */ + private Long activity; + + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + @TableField(jdbcType = JdbcType.ARRAY, typeHandler = ArrayTypeHandler.class) + private Long[] courseList; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * deleted + */ + private Boolean deleted; +} diff --git a/backend/src/main/java/rd/data/db/table/Course.java b/backend/src/main/java/rd/data/db/table/Course.java new file mode 100644 index 0000000..98155a8 --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/Course.java @@ -0,0 +1,63 @@ +package rd.data.db.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import rd.dao.type.json.FloatMapTypeHandler; +//import org.apache.ibatis.type.ArrayTypeHandler; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Map; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +@TableName(autoResultMap = true) +public class Course implements Serializable { + /** + * 课程id + */ + private Long id; + + /** + * 课程名称 + */ + private String name; + + /** + * 课时 + */ + private Integer courseHours; + + /** + * 是否春季期课程(false即是秋季期) + */ + private Boolean springTerm; + + /** + * 考试成绩占比 + */ + private Float examRatio; + + /** + * 平时分组成描述 + */ + @TableField(typeHandler = FloatMapTypeHandler.class) + private Map distribution; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; +} diff --git a/backend/src/main/java/rd/data/db/table/CourseSchedule.java b/backend/src/main/java/rd/data/db/table/CourseSchedule.java new file mode 100644 index 0000000..288bc9e --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/CourseSchedule.java @@ -0,0 +1,85 @@ +package rd.data.db.table; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.google.common.base.Objects; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@TableName(autoResultMap = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class CourseSchedule implements Serializable { + /** + * 课堂id + */ + private Long id; + + /** + * 课程id + */ + private Long course; + + /** + * 开始周 + */ + private Integer startWeek; + + /** + * 结束周 + */ + private Integer endWeek; + + /** + * 节次时间,即第几节课 + */ + private Integer time; + + /** + * 节次时间,即第几节课 + */ + private Integer weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 上课地点 + */ + private String place; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + public CourseSchedule() { + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CourseSchedule that = (CourseSchedule) o; + return Objects.equal(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } +} diff --git a/backend/src/main/java/rd/data/db/table/CourseSelection.java b/backend/src/main/java/rd/data/db/table/CourseSelection.java new file mode 100644 index 0000000..fea83ab --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/CourseSelection.java @@ -0,0 +1,52 @@ +package rd.data.db.table; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class CourseSelection implements Serializable { + /** + * 选课记录id + */ + private Long id; + + /** + * 学生id + */ + private Long student; + + /** + * 课堂id + */ + private Long schedule; + + /** + * 课堂id + */ + private Long activity; + + /** + * 学期 + */ + private String term; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + public CourseSelection() { + } +} diff --git a/backend/src/main/java/rd/data/db/table/CourseTeacher.java b/backend/src/main/java/rd/data/db/table/CourseTeacher.java new file mode 100644 index 0000000..eb92e7b --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/CourseTeacher.java @@ -0,0 +1,41 @@ +package rd.data.db.table; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class CourseTeacher implements Serializable { + + /** + * 教师id + */ + @TableId(type = IdType.INPUT) + private Long teacher; + + /** + * 课程id + */ + private Long course; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * deleted + */ + private Boolean deleted; + + public CourseTeacher() { + } +} diff --git a/backend/src/main/java/rd/data/db/table/ExperimentItem.java b/backend/src/main/java/rd/data/db/table/ExperimentItem.java new file mode 100644 index 0000000..45e566c --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/ExperimentItem.java @@ -0,0 +1,42 @@ +package rd.data.db.table; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class ExperimentItem implements Serializable { + /** + * 实验项目id + */ + private Long id; + + /** + * 项目名称 + */ + private String name; + + /** + * 课程id + */ + private Long course; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + public ExperimentItem() { + } +} diff --git a/backend/src/main/java/rd/data/db/table/ExperimentScore.java b/backend/src/main/java/rd/data/db/table/ExperimentScore.java new file mode 100644 index 0000000..0e53048 --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/ExperimentScore.java @@ -0,0 +1,17 @@ +package rd.data.db.table; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @param id 成绩id + * @param student 学生id + * @param experiment 实验项目id + * @param score 实验分 + * @param createTime create_time + * @param editTime edit_time + * @param deleted delete + */ +public record ExperimentScore(Long id, Long student, Long experiment, Float score, LocalDateTime createTime, + LocalDateTime editTime, Boolean deleted) implements Serializable { +} diff --git a/backend/src/main/java/rd/data/db/table/Major.java b/backend/src/main/java/rd/data/db/table/Major.java new file mode 100644 index 0000000..fc04eab --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/Major.java @@ -0,0 +1,58 @@ +package rd.data.db.table; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.google.common.base.Objects; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Major implements Serializable { + /** + * 专业id + */ + @TableId(type = IdType.INPUT) + private Long id; + + /** + * 专业名称 + */ + private String name; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Major major = (Major) o; + return Objects.equal(id, major.id) && Objects.equal(name, major.name); + } + + @Override + public int hashCode() { + return Objects.hashCode(id, name); + } +} diff --git a/backend/src/main/java/rd/data/db/table/Score.java b/backend/src/main/java/rd/data/db/table/Score.java new file mode 100644 index 0000000..1c17b8a --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/Score.java @@ -0,0 +1,38 @@ +package rd.data.db.table; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Score implements Serializable { + private Long id; + + private Long student; + + private Long course; + + private String term; + + private Float usualScore; + + private Float examScore; + + private Float examRatio; + + private LocalDateTime createTime; + + private LocalDateTime editTime; + + private Boolean deleted; +} diff --git a/backend/src/main/java/rd/data/db/table/StudentInfo.java b/backend/src/main/java/rd/data/db/table/StudentInfo.java new file mode 100644 index 0000000..3ee99ae --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/StudentInfo.java @@ -0,0 +1,64 @@ +package rd.data.db.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StudentInfo implements Serializable { + /** + * 学生id + */ + private Long id; + + /** + * 学号 + */ + private String studentNumber; + + /** + * 学生姓名 + */ + private String name; + + /** + * 专业id + */ + private Long major; + + /** + * 年级,使用大x表示,如大二:2 + */ + private Integer grade; + + /** + * 班级 + */ + @TableField("class") + private String clazz; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; +} diff --git a/backend/src/main/java/rd/data/db/table/TeacherInfo.java b/backend/src/main/java/rd/data/db/table/TeacherInfo.java new file mode 100644 index 0000000..716481e --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/TeacherInfo.java @@ -0,0 +1,43 @@ +package rd.data.db.table; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +@Builder +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class TeacherInfo implements Serializable { + /** + * 教师id + */ + private Long id; + + /** + * 教师姓名 + */ + private String name; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + public TeacherInfo() { + } +} diff --git a/backend/src/main/java/rd/data/db/table/UserBasic.java b/backend/src/main/java/rd/data/db/table/UserBasic.java new file mode 100644 index 0000000..8a67c72 --- /dev/null +++ b/backend/src/main/java/rd/data/db/table/UserBasic.java @@ -0,0 +1,51 @@ +package rd.data.db.table; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +@Data +public class UserBasic implements Serializable { + /** + * 用户uuid + */ + private Long id; + + /** + * 用户名,登陆用 + */ + private String username; + + /** + * 密码 + */ + private String password; + + /** + * 用户类型 + */ + private Short type; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; + + /** + * delete + */ + private Boolean deleted; + + private String oid; + + private Short status; + + public UserBasic() { + } +} diff --git a/backend/src/main/java/rd/data/dto/FileByteDataWrapper.java b/backend/src/main/java/rd/data/dto/FileByteDataWrapper.java new file mode 100644 index 0000000..a622efd --- /dev/null +++ b/backend/src/main/java/rd/data/dto/FileByteDataWrapper.java @@ -0,0 +1,13 @@ +package rd.data.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FileByteDataWrapper { + private byte[] data; + private String fileName; +} diff --git a/backend/src/main/java/rd/data/dto/activity/ActivityTargetAddDto.java b/backend/src/main/java/rd/data/dto/activity/ActivityTargetAddDto.java new file mode 100644 index 0000000..e276ed3 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/activity/ActivityTargetAddDto.java @@ -0,0 +1,23 @@ +package rd.data.dto.activity; + +import lombok.Data; + +import java.util.List; + +@Data +public class ActivityTargetAddDto { + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; +} diff --git a/backend/src/main/java/rd/data/dto/activity/ActivityTargetUpdateDto.java b/backend/src/main/java/rd/data/dto/activity/ActivityTargetUpdateDto.java new file mode 100644 index 0000000..77cd7f8 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/activity/ActivityTargetUpdateDto.java @@ -0,0 +1,23 @@ +package rd.data.dto.activity; + +import lombok.Data; + +import java.util.List; + +@Data +public class ActivityTargetUpdateDto { + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; +} diff --git a/backend/src/main/java/rd/data/dto/course/CourseDTO.java b/backend/src/main/java/rd/data/dto/course/CourseDTO.java new file mode 100644 index 0000000..697f51b --- /dev/null +++ b/backend/src/main/java/rd/data/dto/course/CourseDTO.java @@ -0,0 +1,41 @@ +package rd.data.dto.course; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CourseDTO { + private Long id; + + /** + * 课程名称 + */ + private String name; + + /** + * 课时 + */ + private Integer courseHours; + + /** + * 是否春季期课程(false即是秋季期) + */ + private Boolean springTerm; + + /** + * 考试成绩占比 + */ + private Float examRatio; + + /** + * 平时分组成描述 + */ + private Map distribution; +} diff --git a/backend/src/main/java/rd/data/dto/course/CourseNameDTO.java b/backend/src/main/java/rd/data/dto/course/CourseNameDTO.java new file mode 100644 index 0000000..30a7870 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/course/CourseNameDTO.java @@ -0,0 +1,19 @@ +package rd.data.dto.course; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CourseNameDTO { + private Long id; + + /** + * 课程名称 + */ + private String name; +} diff --git a/backend/src/main/java/rd/data/dto/course/CourseScheduleSelectionInfoDTO.java b/backend/src/main/java/rd/data/dto/course/CourseScheduleSelectionInfoDTO.java new file mode 100644 index 0000000..b229b9a --- /dev/null +++ b/backend/src/main/java/rd/data/dto/course/CourseScheduleSelectionInfoDTO.java @@ -0,0 +1,76 @@ +package rd.data.dto.course; + +import lombok.Data; + +@Data +public class CourseScheduleSelectionInfoDTO { + /** + * 学生id + */ + private Long uid; + + /** + * 学号 + */ + private String studentNumber; + + /** + * 学生姓名 + */ + private String name; + + /** + * 专业id + */ + private Long major; + + /** + * 年级,使用大x表示,如大二:2 + */ + private Integer grade; + + /** + * 班级 + */ + private String clazz; + + /** + * 课堂id + */ + private Long schedule; + + /** + * 课程id + */ + private Long course; + + /** + * 开始周 + */ + private Integer startWeek; + + /** + * 结束周 + */ + private Integer endWeek; + + /** + * 节次时间,即第几节课 + */ + private Integer time; + + /** + * 节次时间,即第几节课 + */ + private Integer weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 上课地点 + */ + private String place; +} diff --git a/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDTO.java b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDTO.java new file mode 100644 index 0000000..be3317a --- /dev/null +++ b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDTO.java @@ -0,0 +1,45 @@ +package rd.data.dto.schedule; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class CourseScheduleDTO { + private Long id; + + /** + * 课程id + */ + private Long course; + + /** + * 开始周 + */ + private int startWeek; + + /** + * 结束周 + */ + private int endWeek; + + /** + * 节次时间,即第几节课 + */ + private int time; + + /** + * 节次时间,即第几节课 + */ + private int weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 上课地点 + */ + private String place; +} diff --git a/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDetailDTO.java b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDetailDTO.java new file mode 100644 index 0000000..eacc29f --- /dev/null +++ b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleDetailDTO.java @@ -0,0 +1,75 @@ +package rd.data.dto.schedule; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class CourseScheduleDetailDTO { + /** + * 课程id + */ + private Long courseId; + + /** + * 课程安排id + */ + private Long scheduleId; + + /** + * 课程名 + */ + private String courseName; + + /** + * 课时 + */ + private Integer courseHours; + + /** + * 开始周 + */ + private Integer startWeek; + + /** + * 结束周 + */ + private Integer endWeek; + + /** + * 节次时间,即第几节课 + */ + private Integer time; + + /** + * 节次时间,即第几节课 + */ + private Integer weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 是否春季期课程 + */ + private Boolean springTerm; + + /** + * 上课地点 + */ + private String place; + + /** + * 考试成绩占比 + */ + private Float examRatio; + + /** + * create_time + */ + private LocalDateTime createTime; +} diff --git a/backend/src/main/java/rd/data/dto/schedule/CourseScheduleWithCourseNameDTO.java b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleWithCourseNameDTO.java new file mode 100644 index 0000000..1574686 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/schedule/CourseScheduleWithCourseNameDTO.java @@ -0,0 +1,67 @@ +package rd.data.dto.schedule; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import rd.data.db.table.TeacherInfo; + +import java.util.List; +import java.util.Map; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class CourseScheduleWithCourseNameDTO { + private Long id; + + private String name; + + /** + * 课程id + */ + private String course; + + /** + * 开始周 + */ + private int startWeek; + + /** + * 结束周 + */ + private int endWeek; + + /** + * 节次时间,即第几节课 + */ + private int time; + + /** + * 节次时间,即第几节课 + */ + private int weekday; + + /** + * 学年学期,格式如2023-2024 + */ + private String academicTerm; + + /** + * 上课地点 + */ + private String place; + + /** + * 考试成绩占比 + */ + private float ratio; + + /** + * 平时分组成描述 + */ + private Map distribution; + + private List teachers; + + @JsonIgnore + private List teacherIds; +} diff --git a/backend/src/main/java/rd/data/dto/schedule/NotSelectStudentExportDto.java b/backend/src/main/java/rd/data/dto/schedule/NotSelectStudentExportDto.java new file mode 100644 index 0000000..32f9bd5 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/schedule/NotSelectStudentExportDto.java @@ -0,0 +1,11 @@ +package rd.data.dto.schedule; + +import lombok.Data; + +@Data +public class NotSelectStudentExportDto { + private int id; + private String studentNumber; + private String name; + private String clazz; +} diff --git a/backend/src/main/java/rd/data/dto/schedule/SelectedStudentExportDto.java b/backend/src/main/java/rd/data/dto/schedule/SelectedStudentExportDto.java new file mode 100644 index 0000000..103783f --- /dev/null +++ b/backend/src/main/java/rd/data/dto/schedule/SelectedStudentExportDto.java @@ -0,0 +1,12 @@ +package rd.data.dto.schedule; + +import lombok.Data; + +@Data +public class SelectedStudentExportDto { + private int id; + private String studentNumber; + private String name; + private String clazz; + private String selectedSchedule; +} diff --git a/backend/src/main/java/rd/data/dto/score/CourseScoreInfoDto.java b/backend/src/main/java/rd/data/dto/score/CourseScoreInfoDto.java new file mode 100644 index 0000000..ed3f129 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/score/CourseScoreInfoDto.java @@ -0,0 +1,24 @@ +package rd.data.dto.score; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CourseScoreInfoDto { + private Long id; + + private String studentName; + + private String studentNumber; + + private Float examRatio; + + private Float usualScore; + + private Float examScore; +} diff --git a/backend/src/main/java/rd/data/dto/score/ScoreExportDto.java b/backend/src/main/java/rd/data/dto/score/ScoreExportDto.java new file mode 100644 index 0000000..4d10e07 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/score/ScoreExportDto.java @@ -0,0 +1,20 @@ +package rd.data.dto.score; + +import lombok.Data; + +@Data +public class ScoreExportDto { + private int id; + + private String studentName; + + private String number; + + private Float usualScore; + + private Float examScore; + + private Float examRatio; + + private String finalScore; +} diff --git a/backend/src/main/java/rd/data/dto/score/StudentScore.java b/backend/src/main/java/rd/data/dto/score/StudentScore.java new file mode 100644 index 0000000..e9c0841 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/score/StudentScore.java @@ -0,0 +1,18 @@ +package rd.data.dto.score; + +import lombok.Data; + +@Data +public class StudentScore { + private Long id; + + private String courseName; + + private String term; + + private Float examRatio; + + private Float usualScore; + + private Float examScore; +} diff --git a/backend/src/main/java/rd/data/dto/user/UserBasicInfoDTO.java b/backend/src/main/java/rd/data/dto/user/UserBasicInfoDTO.java new file mode 100644 index 0000000..a143fc1 --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/UserBasicInfoDTO.java @@ -0,0 +1,4 @@ +package rd.data.dto.user; + +public record UserBasicInfoDTO(Long id, String username, String password, Short type) { +} diff --git a/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoDto.java b/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoDto.java new file mode 100644 index 0000000..64051ea --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoDto.java @@ -0,0 +1,4 @@ +package rd.data.dto.user.student; + +public record BasicStudentInfoDto(String studentNumber, String studentName, Long majorId) { +} diff --git a/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoWithMajorNameDto.java b/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoWithMajorNameDto.java new file mode 100644 index 0000000..4b3e30c --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/student/BasicStudentInfoWithMajorNameDto.java @@ -0,0 +1,4 @@ +package rd.data.dto.user.student; + +public record BasicStudentInfoWithMajorNameDto(String studentNumber, String studentName, String majorName) { +} diff --git a/backend/src/main/java/rd/data/dto/user/student/NewStudentDTO.java b/backend/src/main/java/rd/data/dto/user/student/NewStudentDTO.java new file mode 100644 index 0000000..a9842ae --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/student/NewStudentDTO.java @@ -0,0 +1,7 @@ +package rd.data.dto.user.student; + +import rd.data.db.table.StudentInfo; +import rd.data.db.table.UserBasic; + +public record NewStudentDTO(UserBasic userBasic, StudentInfo studentInfo) { +} diff --git a/backend/src/main/java/rd/data/dto/user/student/StudentUserBasicDTO.java b/backend/src/main/java/rd/data/dto/user/student/StudentUserBasicDTO.java new file mode 100644 index 0000000..c8a25ab --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/student/StudentUserBasicDTO.java @@ -0,0 +1,7 @@ +package rd.data.dto.user.student; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record StudentUserBasicDTO(String id, String username, String number, String name, String major, int grade, String clazz, String password) { +} diff --git a/backend/src/main/java/rd/data/dto/user/student/StudentUserInfoDTO.java b/backend/src/main/java/rd/data/dto/user/student/StudentUserInfoDTO.java new file mode 100644 index 0000000..dcfa82a --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/student/StudentUserInfoDTO.java @@ -0,0 +1,10 @@ +package rd.data.dto.user.student; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; + +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public record StudentUserInfoDTO(Long id, String username, String number, String name, Long major, int grade, + String clazz, String password) { +} diff --git a/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserDTO.java b/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserDTO.java new file mode 100644 index 0000000..8cd1cdc --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserDTO.java @@ -0,0 +1,7 @@ +package rd.data.dto.user.teacher; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record TeacherUserDTO(String username, String teacherName, String password) { +} diff --git a/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserInfoDTO.java b/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserInfoDTO.java new file mode 100644 index 0000000..741fa0b --- /dev/null +++ b/backend/src/main/java/rd/data/dto/user/teacher/TeacherUserInfoDTO.java @@ -0,0 +1,7 @@ +package rd.data.dto.user.teacher; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record TeacherUserInfoDTO(Long id, String username, String teacherName) { +} diff --git a/backend/src/main/java/rd/data/enums/UserType.java b/backend/src/main/java/rd/data/enums/UserType.java new file mode 100644 index 0000000..ce48495 --- /dev/null +++ b/backend/src/main/java/rd/data/enums/UserType.java @@ -0,0 +1,24 @@ +package rd.data.enums; + +public enum UserType { + STUDENT(0, "student"), + TEACHER(1, "teacher"), + ADMIN(0, "admin"), + ; + + public final int code; + private final String value; + + UserType(int code, String value) { + this.code = code; + this.value = value; + } + + public int getCode() { + return code; + } + + public String value() { + return value; + } +} diff --git a/backend/src/main/java/rd/data/model/request/activity/ActivityTargetAddRequest.java b/backend/src/main/java/rd/data/model/request/activity/ActivityTargetAddRequest.java new file mode 100644 index 0000000..063e20f --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/activity/ActivityTargetAddRequest.java @@ -0,0 +1,23 @@ +package rd.data.model.request.activity; + +import lombok.Data; + +import java.util.List; + +@Data +public class ActivityTargetAddRequest { + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; +} diff --git a/backend/src/main/java/rd/data/model/request/activity/ActivityTargetUpadeRequest.java b/backend/src/main/java/rd/data/model/request/activity/ActivityTargetUpadeRequest.java new file mode 100644 index 0000000..5047f23 --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/activity/ActivityTargetUpadeRequest.java @@ -0,0 +1,23 @@ +package rd.data.model.request.activity; + +import lombok.Data; + +import java.util.List; + +@Data +public class ActivityTargetUpadeRequest { + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; +} diff --git a/backend/src/main/java/rd/data/model/request/admin/ActivityInfoDto.java b/backend/src/main/java/rd/data/model/request/admin/ActivityInfoDto.java new file mode 100644 index 0000000..7e91891 --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/admin/ActivityInfoDto.java @@ -0,0 +1,14 @@ +package rd.data.model.request.admin; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Builder; + +import java.time.LocalDateTime; + +@Builder +public record ActivityInfoDto(Long id, String name, String term, + @JsonFormat(locale = "zh", timezone = "GMT+8") + LocalDateTime start, + @JsonFormat(locale = "zh", timezone = "GMT+8") + LocalDateTime end) { +} diff --git a/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorIdRequest.java b/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorIdRequest.java new file mode 100644 index 0000000..72439ff --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorIdRequest.java @@ -0,0 +1,7 @@ +package rd.data.model.request.admin; + +import lombok.Builder; + +@Builder +public record StudentAddWithMajorIdRequest(String studentNumber, String studentName, Long majorId, String password) { +} diff --git a/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorNameRequest.java b/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorNameRequest.java new file mode 100644 index 0000000..5973ec8 --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/admin/StudentAddWithMajorNameRequest.java @@ -0,0 +1,7 @@ +package rd.data.model.request.admin; + +import lombok.Builder; + +@Builder +public record StudentAddWithMajorNameRequest(String studentNumber, String studentName, String majorName) { +} diff --git a/backend/src/main/java/rd/data/model/request/admin/StudentBatchAddRequest.java b/backend/src/main/java/rd/data/model/request/admin/StudentBatchAddRequest.java new file mode 100644 index 0000000..7f02edc --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/admin/StudentBatchAddRequest.java @@ -0,0 +1,9 @@ +package rd.data.model.request.admin; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record StudentBatchAddRequest(List students) { +} diff --git a/backend/src/main/java/rd/data/model/request/admin/TeacherAddRequest.java b/backend/src/main/java/rd/data/model/request/admin/TeacherAddRequest.java new file mode 100644 index 0000000..3c723cf --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/admin/TeacherAddRequest.java @@ -0,0 +1,7 @@ +package rd.data.model.request.admin; + +import lombok.Builder; + +@Builder +public record TeacherAddRequest(String username, String teacherName, String initialPassword) { +} diff --git a/backend/src/main/java/rd/data/model/request/auth/UserLoginRequest.java b/backend/src/main/java/rd/data/model/request/auth/UserLoginRequest.java new file mode 100644 index 0000000..f55c8a5 --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/auth/UserLoginRequest.java @@ -0,0 +1,5 @@ +package rd.data.model.request.auth; + +public record UserLoginRequest(String username, String password) { + +} diff --git a/backend/src/main/java/rd/data/model/request/course/CourseRequest.java b/backend/src/main/java/rd/data/model/request/course/CourseRequest.java new file mode 100644 index 0000000..bb12e0b --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/course/CourseRequest.java @@ -0,0 +1,26 @@ +package rd.data.model.request.course; + +import lombok.Data; + +@Data +public class CourseRequest { + /** + * 课程名称 + */ + private String name; + + /** + * 课时 + */ + private Integer courseHours; + + /** + * 是否春季期课程(false即是秋季期) + */ + private Boolean springTerm; + + /** + * 考试成绩占比 + */ + private Float examRatio; +} diff --git a/backend/src/main/java/rd/data/model/request/course/CourseTeacherUpdateRequest.java b/backend/src/main/java/rd/data/model/request/course/CourseTeacherUpdateRequest.java new file mode 100644 index 0000000..b7e8a93 --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/course/CourseTeacherUpdateRequest.java @@ -0,0 +1,10 @@ +package rd.data.model.request.course; + +import lombok.Data; + +import java.util.List; + +@Data +public class CourseTeacherUpdateRequest { + private List teachers; +} diff --git a/backend/src/main/java/rd/data/model/request/schedule/CourseScheduleRequest.java b/backend/src/main/java/rd/data/model/request/schedule/CourseScheduleRequest.java new file mode 100644 index 0000000..705160c --- /dev/null +++ b/backend/src/main/java/rd/data/model/request/schedule/CourseScheduleRequest.java @@ -0,0 +1,20 @@ +package rd.data.model.request.schedule; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CourseScheduleRequest { + private String term; + + private int section; + + private int weekday; + + private int startWeek; + + private int endWeek; + + private String place; +} diff --git a/backend/src/main/java/rd/data/model/response/PaginationWrapper.java b/backend/src/main/java/rd/data/model/response/PaginationWrapper.java new file mode 100644 index 0000000..d0c50db --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/PaginationWrapper.java @@ -0,0 +1,7 @@ +package rd.data.model.response; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record PaginationWrapper(int current, int pageSize, int total, T result) { +} diff --git a/backend/src/main/java/rd/data/model/response/Response.java b/backend/src/main/java/rd/data/model/response/Response.java new file mode 100644 index 0000000..d22beb9 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/Response.java @@ -0,0 +1,48 @@ +package rd.data.model.response; + +import com.fasterxml.jackson.annotation.JsonInclude; +import rd.data.code.ServiceCode; + +/** + * 通用的响应 + * + * @param code 响应码 + * @param msg 响应信息 + * @param data 响应数据 + * @param data的类型 + */ +@JsonInclude(JsonInclude.Include.NON_NULL) +public record Response(int code, String msg, T data) { + + public static Response success() { + return success(null); + } + + public static Response success(T data) { + return new Response<>(ServiceCode.Ok.code, "ok", data); + } + + public static Response success(int code, T data) { + return new Response<>(code, "ok", data); + } + + public static Response success(int code, String msg, T data) { + return new Response<>(code, msg, data); + } + + public static Response error(ServiceCode code) { + return new Response<>(code.code, code.msg, null); + } + + public static Response error(int code) { + return new Response<>(code, null, null); + } + + public static Response error(int code, String message) { + return new Response<>(code, message, null); + } + + public static Response error(ServiceCode code, String message) { + return new Response<>(code.code, message, null); + } +} diff --git a/backend/src/main/java/rd/data/model/response/activity/ActivityTargetResponse.java b/backend/src/main/java/rd/data/model/response/activity/ActivityTargetResponse.java new file mode 100644 index 0000000..7a27b5c --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/activity/ActivityTargetResponse.java @@ -0,0 +1,44 @@ +package rd.data.model.response.activity; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class ActivityTargetResponse { + /** + * id + */ + private Long id; + + /** + * activity + */ + private Long activity; + + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; +} diff --git a/backend/src/main/java/rd/data/model/response/activity/ActivityTargetWithClassNameResponse.java b/backend/src/main/java/rd/data/model/response/activity/ActivityTargetWithClassNameResponse.java new file mode 100644 index 0000000..80cbb59 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/activity/ActivityTargetWithClassNameResponse.java @@ -0,0 +1,44 @@ +package rd.data.model.response.activity; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class ActivityTargetWithClassNameResponse { + /** + * id + */ + private Long id; + + /** + * activity + */ + private Long activity; + + /** + * grade + */ + private Integer grade; + + /** + * major + */ + private Long major; + + /** + * course + */ + private List course; + + /** + * create_time + */ + private LocalDateTime createTime; + + /** + * edit_time + */ + private LocalDateTime editTime; +} diff --git a/backend/src/main/java/rd/data/model/response/auth/UserLoginStatusResponse.java b/backend/src/main/java/rd/data/model/response/auth/UserLoginStatusResponse.java new file mode 100644 index 0000000..b6566b9 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/auth/UserLoginStatusResponse.java @@ -0,0 +1,7 @@ +package rd.data.model.response.auth; + +import com.fasterxml.jackson.annotation.JsonInclude; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public record UserLoginStatusResponse(Long id, String role, boolean status) { +} diff --git a/backend/src/main/java/rd/data/model/response/course/CandidateCourseResponse.java b/backend/src/main/java/rd/data/model/response/course/CandidateCourseResponse.java new file mode 100644 index 0000000..6c05da6 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/course/CandidateCourseResponse.java @@ -0,0 +1,29 @@ +package rd.data.model.response.course; + +import lombok.Data; + +/** + * 待选课程响应 + */ +@Data +public class CandidateCourseResponse { + /** + * 课程id + */ + private Long id; + + /** + * 课程名称 + */ + private String name; + + /** + * 课时 + */ + private String courseHours; + + /** + * 是否春季期课程(false即是秋季期) + */ + private Boolean springTerm; +} diff --git a/backend/src/main/java/rd/data/model/response/course/CourseResponse.java b/backend/src/main/java/rd/data/model/response/course/CourseResponse.java new file mode 100644 index 0000000..183417d --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/course/CourseResponse.java @@ -0,0 +1,31 @@ +package rd.data.model.response.course; + +import lombok.Builder; +import lombok.Data; + +/** + * 课程信息响应 + */ +@Data +@Builder +public class CourseResponse { + /** + * 课程id + */ + private Long id; + + /** + * 课程名称 + */ + private String name; + + /** + * 课时 + */ + private int courseHours; + + /** + * 春季期课程 + */ + private String term; +} diff --git a/backend/src/main/java/rd/data/model/response/course/CourseTeacherResponse.java b/backend/src/main/java/rd/data/model/response/course/CourseTeacherResponse.java new file mode 100644 index 0000000..8b6dca0 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/course/CourseTeacherResponse.java @@ -0,0 +1,20 @@ +package rd.data.model.response.course; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CourseTeacherResponse { + /** + * 教师id + */ + private Long id; + + /** + * 教师姓名 + */ + private String name; +} diff --git a/backend/src/main/java/rd/data/model/response/score/StudentScoreSummary.java b/backend/src/main/java/rd/data/model/response/score/StudentScoreSummary.java new file mode 100644 index 0000000..5583ce5 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/score/StudentScoreSummary.java @@ -0,0 +1,7 @@ +package rd.data.model.response.score; + +import lombok.Builder; + +@Builder +public record StudentScoreSummary(String courseName, int usualScore, int finalScore) { +} diff --git a/backend/src/main/java/rd/data/model/response/user/UserBasicInfo.java b/backend/src/main/java/rd/data/model/response/user/UserBasicInfo.java new file mode 100644 index 0000000..0436410 --- /dev/null +++ b/backend/src/main/java/rd/data/model/response/user/UserBasicInfo.java @@ -0,0 +1,15 @@ +package rd.data.model.response.user; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; +import rd.data.enums.UserType; + +@Data +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UserBasicInfo { + private Long id; + private String username; + private UserType userType; +} diff --git a/backend/src/main/java/rd/exception/GlobalExceptionHandler.java b/backend/src/main/java/rd/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..ff5a100 --- /dev/null +++ b/backend/src/main/java/rd/exception/GlobalExceptionHandler.java @@ -0,0 +1,144 @@ +package rd.exception; + +import cn.dev33.satoken.exception.SaTokenException; +import com.fasterxml.jackson.databind.JsonMappingException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.BindException; +import org.springframework.web.servlet.NoHandlerFoundException; +import rd.data.code.ServiceCode; +import rd.data.model.response.Response; + +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +@Slf4j +@ControllerAdvice +public class GlobalExceptionHandler { + @ResponseBody + @ExceptionHandler(ServiceException.class) + public Response baseException(ServiceException e) { + return Response.error(e.getCodeValue(), e.getMessage()); + } + + @ResponseBody + @ExceptionHandler(SaTokenException.class) + public Response baseException(SaTokenException e) { + return Response.error(ServiceCode.UserAuthErr, e.getMessage()); + } + + @ResponseBody + @ExceptionHandler(Exception.class) + public Response baseException(Exception e) { + log.error("未处理的异常:", e); + return Response.error(ServiceCode.UnknownErr); + } + + /** + * 404 + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(NoHandlerFoundException.class) + public Response baseException(NoHandlerFoundException e) { + return Response.error(ServiceCode.ApiNotImplement); + } + + /** + * 处理参数不完整的请求异常 + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(MissingServletRequestParameterException.class) + public Response handler(MissingServletRequestParameterException e) { + log.debug("请求的参数不完整: " + e); + return Response.error(ServiceCode.ParamWrong); + } + + /** + * 处理参数不完整的请求异常 + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(BindException.class) + public Response handler(BindException e) { + log.debug("请求的参数不完整: " + e); + return Response.error(ServiceCode.ParamWrong); + } + + /** + * 处理参数类型错误的请求异常(请求参数类型错误) + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public Response handler(MethodArgumentTypeMismatchException e) { + log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e)); + return Response.error(ServiceCode.ParamWrong); + } + + /** + * 处理参数类型错误的请求异常2(Json解析错误) + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(JsonMappingException.class) + public Response handler(JsonMappingException e) { + log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e)); + return Response.error(ServiceCode.ParamWrong); + } + + /** + * 处理参数类型错误的请求异常3(字段映射错误) + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(HttpMessageNotReadableException.class) + public Response handler(HttpMessageNotReadableException e) { + log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e)); + return Response.error(ServiceCode.ParamWrong); + } + + /** + * 处理请求头中“Content-Type”字段不正确的异常 + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(HttpMediaTypeNotSupportedException.class) + public Response handler(HttpMediaTypeNotSupportedException e) { + log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e)); + return Response.error(ServiceCode.ParamWrong, "不接受的Content-Type类型: %s".formatted(e)); + } + + /** + * 处理请求方法错误的情况 + * + * @param e 异常 + * @return 统一响应 + */ + @ResponseBody + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public Response handler(HttpRequestMethodNotSupportedException e) { + log.debug(String.format("请求错误(%s): %s", e.getClass().getName(), e)); + return Response.error(ServiceCode.RequestInvalid); + } +} diff --git a/backend/src/main/java/rd/exception/ServiceException.java b/backend/src/main/java/rd/exception/ServiceException.java new file mode 100644 index 0000000..bba1df0 --- /dev/null +++ b/backend/src/main/java/rd/exception/ServiceException.java @@ -0,0 +1,49 @@ +package rd.exception; + +import rd.data.code.ServiceCode; + +public class ServiceException extends RuntimeException { + private final int code; + + public ServiceException(ServiceCode code) { + this(code, code.msg); + } + + public ServiceException(ServiceCode code, String message) { + super(message); + this.code = code.code; + } + + public ServiceException(int code) { + this(code, ""); + } + + public ServiceException(int code, String message) { + super(message); + this.code = code; + } + + public ServiceCode getCode() { + return ServiceCode.of(code); + } + + public int getCodeValue() { + return code; + } + + public static ServiceException error(int code) throws ServiceException { + return new ServiceException(code); + } + + public static ServiceException error(ServiceCode code) throws ServiceException { + return new ServiceException(code); + } + + public static ServiceException error(ServiceCode code, String msg) throws ServiceException { + return new ServiceException(code, msg); + } + + public static ServiceException error(int code, String msg) throws ServiceException { + return new ServiceException(code, msg); + } +} diff --git a/backend/src/main/java/rd/rpc/WusthelperApi.java b/backend/src/main/java/rd/rpc/WusthelperApi.java new file mode 100644 index 0000000..0d05cb8 --- /dev/null +++ b/backend/src/main/java/rd/rpc/WusthelperApi.java @@ -0,0 +1,81 @@ +package rd.rpc; + +import cn.hutool.core.net.url.UrlBuilder; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import okhttp3.FormBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import rd.configure.RdConfigure; +import rd.data.Constants; +import rd.data.code.ServiceCode; +import rd.data.model.response.Response; +import rd.exception.ServiceException; +import rd.rpc.model.WusthelperStudentInfo; + +import java.io.IOException; + +@Service +public class WusthelperApi { + + private final OkHttpClient okHttpClient; + private final ObjectMapper objectMapper; + private final RdConfigure rdConfigure; + + public WusthelperApi(OkHttpClient okHttpClient, + @Qualifier("objectMapper") ObjectMapper objectMapper, + RdConfigure rdConfigure + ) { + this.okHttpClient = okHttpClient; + this.objectMapper = objectMapper; + this.rdConfigure = rdConfigure; + } + + private static final TypeReference> StringResponseTypeReference = new TypeReference<>() { + }; + + public String wusthelperLogin(String stuNum, String pwd) throws IOException { + var req = new Request.Builder() + .url(UrlBuilder.of(rdConfigure.getWusthelperBaseUrl()) + .addPath(Constants.Wusthelper.UndergradLogin) + .toURL() + ) + .post(new FormBody.Builder() + .add("stuNum", stuNum) + .add("jwcPwd", pwd) + .build() + ) + .build(); + + return this.execReq(req, StringResponseTypeReference); + } + + private static final TypeReference> StuInfoResponseTypeReference = new TypeReference<>() { + }; + + public WusthelperStudentInfo getStudentInfo(String token) throws IOException { + var req = new Request.Builder() + .url(UrlBuilder.of(rdConfigure.getWusthelperBaseUrl()) + .addPath(Constants.Wusthelper.UndergradStuInfo) + .toURL() + ) + .addHeader("token", token) + .get() + .build(); + + return this.execReq(req, StuInfoResponseTypeReference); + } + + private T execReq(Request req, TypeReference> typeReference) throws IOException { + try (var resp = okHttpClient.newCall(req).execute()) { + var wusthelperResponse = objectMapper.readValue(resp.body().string(), typeReference); + if (wusthelperResponse.code() != 10000) { + throw ServiceException.error(ServiceCode.WusthelperApiRequestErr, wusthelperResponse.msg()); + } + + return wusthelperResponse.data(); + } + } +} diff --git a/backend/src/main/java/rd/rpc/model/WusthelperResponse.java b/backend/src/main/java/rd/rpc/model/WusthelperResponse.java new file mode 100644 index 0000000..c97d0fb --- /dev/null +++ b/backend/src/main/java/rd/rpc/model/WusthelperResponse.java @@ -0,0 +1,4 @@ +package rd.rpc.model; + +public record WusthelperResponse(int code, String msg, T data) { +} diff --git a/backend/src/main/java/rd/rpc/model/WusthelperStudentInfo.java b/backend/src/main/java/rd/rpc/model/WusthelperStudentInfo.java new file mode 100644 index 0000000..786722a --- /dev/null +++ b/backend/src/main/java/rd/rpc/model/WusthelperStudentInfo.java @@ -0,0 +1,18 @@ +package rd.rpc.model; + +import lombok.Data; + +@Data +public class WusthelperStudentInfo { + private String stuNum; + + private String stuName; + + private String nickName; + + private String college; + + private String major; + + private String classes; +} diff --git a/backend/src/main/java/rd/service/activity/ActivityService.java b/backend/src/main/java/rd/service/activity/ActivityService.java new file mode 100644 index 0000000..2107e30 --- /dev/null +++ b/backend/src/main/java/rd/service/activity/ActivityService.java @@ -0,0 +1,272 @@ +package rd.service.activity; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.yitter.idgen.YitIdHelper; +import lombok.extern.slf4j.Slf4j; +import rd.dao.mapper.activity.ActivityMapper; +import rd.data.Constants; +import rd.data.code.ServiceCode; +import rd.data.db.table.Activity; +import rd.data.model.request.admin.ActivityInfoDto; +import rd.data.model.response.PaginationWrapper; +import rd.exception.ServiceException; + +import rd.service.cache.GlobalCache; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.StringJoiner; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class ActivityService { + private static final Cache activityCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private static final Cache> termCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private final ActivityMapper activityMapper; + private final RedisTemplate redisTemplate; + + public ActivityService(ActivityMapper activityMapper, + RedisTemplate redisTemplate) { + this.activityMapper = activityMapper; + this.redisTemplate = redisTemplate; + } + + public PaginationWrapper> list(int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var result = activityMapper + .selectPage(queryPage, new QueryWrapper() + .orderByDesc("end_time") + .eq("deleted", false) + ); + + return new PaginationWrapper<>( + (int) result.getCurrent(), + (int) result.getSize(), + (int) result.getTotal(), + result.getRecords() + ); + } + + public Activity getById(Long actId) { + return getById(actId, true); + } + + private Activity getById(Long actId, boolean useCache) { + var activity = activityCache.getIfPresent(actId); + if (!useCache || activity == null) { + activity = activityMapper.selectOne(new QueryWrapper() + .eq("id", actId) + .eq("deleted", false) + .last("limit 1") + ); + + if (activity != null) { + putCache(activity); + } + } + + return activity; + } + + public Set getByTerm(String term) { + var list = termCache.getIfPresent(term); + if (list == null) { + var result = activityMapper.selectList(new QueryWrapper() + .orderByDesc("end_time") + .eq("term", term) + .eq("deleted", false) + ); + list = new HashSet<>(result); + termCache.put(term, list); + } + + return list; + } + + private void putCache(Activity activity) { + activityCache.put(activity.getId(), activity); + var list = termCache.getIfPresent(activity.getTerm()); + if (list == null) { + list = new HashSet<>(4); + } + + list.add(activity); + termCache.put(activity.getTerm(), list); + } + + private static final String CurrentActivityRedisKey = "rd:cache:activity:current"; + + public Activity getCurrentActivity() { + var now = LocalDateTime.now(); + var currentActivity = (Activity) redisTemplate.opsForValue().get(CurrentActivityRedisKey); + if (currentActivity == null) { + currentActivity = this.getCurrentActivityFromDB(now); + if (currentActivity == null) { + return null; + } + + var expire = Duration.between(now, currentActivity.getEndTime()); + + redisTemplate.opsForValue().set(CurrentActivityRedisKey, this.getCurrentActivityFromDB(now), expire); + } + + return currentActivity; + } + + public Activity getCurrentActivityFromDB(LocalDateTime now) { + return activityMapper.selectOne(new QueryWrapper() + .le("start_time", now) + .ge("end_time", now) + .orderByDesc("end_time") + .last("limit 1") + .eq("deleted", false) + ); + } + + private List checkConflict(ActivityInfoDto dto) { + // 检查开始时间和结束时间 + if (!dto.start().isBefore(dto.end())) { + throw ServiceException.error( + ServiceCode.DataFormatWrong, + String.format("时间参数不正确:开始时间:%s,结束时间:%s", + dto.start().format(Constants.DateTime.DEFAULT_DATE_FORMATTER), + dto.end().format(Constants.DateTime.DEFAULT_DATE_FORMATTER) + ) + ); + } + + // 检查冲突 + return activityMapper.getConflictActivity(dto.start(), dto.end()); + } + + private String makeConflictMsg(List conflictActivityList) { + var stringJoiner = new StringJoiner(",", "一个时间段内只能有一个进行中的活动,冲突的活动:", ""); + conflictActivityList.forEach(act -> stringJoiner.add( + String.format("%s(%s至%s)", + act.getName(), + act.getStartTime().format(Constants.DateTime.DEFAULT_DATE_FORMATTER), + act.getEndTime().format(Constants.DateTime.DEFAULT_DATE_FORMATTER) + ) + )); + + return stringJoiner.toString(); + } + + public void addActivity(ActivityInfoDto request) { + var conflictActivityList = checkConflict(request); + if (!conflictActivityList.isEmpty()) { + throw ServiceException.error(ServiceCode.DataConflict, this.makeConflictMsg(conflictActivityList)); + } + + Long id = YitIdHelper.nextId(); + + Activity activity = new Activity(); + activity.setId(id); + activity.setName(request.name()); + activity.setTerm(request.term()); + activity.setStartTime(request.start()); + activity.setEndTime(request.end()); + + activityMapper.insert(activity); + + putCache(activity); + try { + var now = LocalDateTime.now(); + if (!activity.getStartTime().isAfter(now) && !activity.getEndTime().isBefore(now)) { + var expire = Duration.between(now, activity.getEndTime()); + redisTemplate.opsForValue().set(CurrentActivityRedisKey, activity, expire); + } + } catch (Exception e) { + log.warn("添加活动处理当前活动redis缓存时出现异常:", e); + } + } + + @Transactional + public void delete(Long actId) { + Activity activity = getById(actId); + if (activity == null) { + return; + } + + activity.setDeleted(true); + activity.setEditTime(LocalDateTime.now()); + + activityMapper.update(activity, new QueryWrapper() + .eq("id", actId) + .eq("deleted", false) + ); + + activityCache.invalidate(actId); + termCache.invalidate(activity.getTerm()); + GlobalCache.ActivityTargetCourseCache.invalidateAll(); + try { + var currentActivity = (Activity) redisTemplate.opsForValue().get(CurrentActivityRedisKey); + if (currentActivity != null && currentActivity.getId().equals(actId)) { + redisTemplate.opsForValue().getAndDelete(CurrentActivityRedisKey); + } + } catch (Exception e){ + log.warn("删除活动处理当前活动redis缓存时出现异常:", e); + } + } + + @Transactional + public Activity update(Long actId, ActivityInfoDto request) { + Activity activity = getById(actId); + if (activity == null) { + throw ServiceException.error(ServiceCode.DataNotExists, "活动id不存在"); + } + + // 时间冲突检测 + var conflictActivityList = checkConflict(request); + if (!conflictActivityList.isEmpty()) { + throw ServiceException.error(ServiceCode.DataConflict, this.makeConflictMsg(conflictActivityList)); + } + + activity.setName(request.name()); + activity.setTerm(request.term()); + activity.setStartTime(request.start()); + activity.setEndTime(request.end()); + + activityMapper.update(activity, new QueryWrapper() + .eq("id", actId) + .eq("deleted", false) + ); + + var newAct = this.getById(actId, false); + try { + var currentActivity = (Activity) redisTemplate.opsForValue().get(CurrentActivityRedisKey); + if (currentActivity != null && currentActivity.getId().equals(newAct.getId())) { + var expire = Duration.between(LocalDateTime.now(), newAct.getEndTime()); + redisTemplate.opsForValue().set(CurrentActivityRedisKey, newAct, expire); + } + } catch (Exception e){ + log.warn("更新活动处理当前活动redis缓存时出现异常:", e); + } + + return newAct; + } +} diff --git a/backend/src/main/java/rd/service/activity/ActivityTargetService.java b/backend/src/main/java/rd/service/activity/ActivityTargetService.java new file mode 100644 index 0000000..cd914a9 --- /dev/null +++ b/backend/src/main/java/rd/service/activity/ActivityTargetService.java @@ -0,0 +1,199 @@ +package rd.service.activity; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.activity.ActivityTargetMapper; +import rd.data.code.ServiceCode; +import rd.data.dto.activity.ActivityTargetAddDto; +import rd.data.dto.activity.ActivityTargetUpdateDto; +import rd.data.db.table.ActivityTarget; +import rd.exception.ServiceException; + +import rd.service.cache.GlobalCache; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Service +public class ActivityTargetService { + private final ActivityTargetMapper activityTargetMapper; + + public ActivityTargetService(ActivityTargetMapper activityTargetMapper) { + this.activityTargetMapper = activityTargetMapper; + } + + private static String getActivityTargetCourseCacheKey(Long majorId, Integer grade, Long activityId) { + return String.format("%d:%d:%d", majorId, grade, activityId); + } + + public List getMajorGradeActivityCandidateCourses(Long majorId, Integer grade, Long activityId) { + var majorGradeActivityTarget = GlobalCache.ActivityTargetCourseCache.get( + getActivityTargetCourseCacheKey(majorId, grade, activityId), + key -> activityTargetMapper.selectOne(new LambdaQueryWrapper() + .eq(ActivityTarget::getGrade, grade) + .eq(ActivityTarget::getMajor, majorId) + .eq(ActivityTarget::getActivity, activityId) + .eq(ActivityTarget::getDeleted, false) + .last("limit 1") + ) + ); + + if (majorGradeActivityTarget == null) { + return new ArrayList<>(); + } + + return Arrays.asList(majorGradeActivityTarget.getCourseList()); + } + + public List getActivityTargetList(Long activityId) { + return activityTargetMapper.selectList(new LambdaQueryWrapper() + .eq(ActivityTarget::getActivity, activityId) + .eq(ActivityTarget::getDeleted, false) + ); + } + + public ActivityTarget getActivityTargetInfo(Long id) { + return activityTargetMapper.selectOne(new LambdaQueryWrapper() + .eq(ActivityTarget::getId, id) + .eq(ActivityTarget::getDeleted, false) + .last("limit 1") + ); + } + + public void addActivityTargetCourse(Long activityId, ActivityTargetAddDto activityTargetAddDto) { + Integer grade = activityTargetAddDto.getGrade(); + Long majorId = activityTargetAddDto.getMajor(); + + var exists = activityTargetMapper.exists(new LambdaQueryWrapper() + .eq(ActivityTarget::getGrade, grade) + .eq(ActivityTarget::getMajor, majorId) + .eq(ActivityTarget::getActivity, activityId) + .eq(ActivityTarget::getDeleted, false) + ); + if (exists) { + throw ServiceException.error( + ServiceCode.DataDuplicate, + String.format("数据重复:年级='%s',专业ID='%d',活动ID='%d'", grade, majorId, activityId) + ); + } + + Long id = YitIdHelper.nextId(); + ActivityTarget activityTarget = convert(activityTargetAddDto); + activityTarget.setId(id); + activityTarget.setActivity(activityId); + + activityTargetMapper.insert(activityTarget); + + GlobalCache.ActivityTargetCourseCache.put( + getActivityTargetCourseCacheKey(majorId, grade, activityId), + activityTarget + ); + } + + private static ActivityTarget convert(ActivityTargetAddDto activityTargetAddDto) { + ActivityTarget activityTarget = new ActivityTarget(); + activityTarget.setGrade(activityTargetAddDto.getGrade()); + activityTarget.setMajor(activityTargetAddDto.getMajor()); + activityTarget.setCourseList(activityTargetAddDto.getCourse().toArray(new Long[0])); + activityTarget.setCreateTime(LocalDateTime.now()); + activityTarget.setEditTime(LocalDateTime.now()); + activityTarget.setDeleted(false); + + return activityTarget; + } + + public void duplicateFromExistsActivity(Long srcAct, Long dstAct) { + var exists = activityTargetMapper.exists(new LambdaQueryWrapper() + .eq(ActivityTarget::getActivity, dstAct) + .eq(ActivityTarget::getDeleted, false) + ); + if (exists) { + throw ServiceException.error( + ServiceCode.DataDuplicate, + "要从其他活动复制对象信息,请先保证目标活动的活动对象数据是空的。" + ); + } + + var activityTargetList = this.getActivityTargetList(srcAct); + if (activityTargetList == null || activityTargetList.isEmpty()) { + throw ServiceException.error(ServiceCode.DataNotExists, "源活动没有设置活动对象数据"); + } + + for (ActivityTarget activityTarget : activityTargetList) { + Long id = YitIdHelper.nextId(); + activityTarget.setId(id); + activityTarget.setActivity(dstAct); + activityTarget.setCreateTime(LocalDateTime.now()); + activityTarget.setEditTime(LocalDateTime.now()); + } + + activityTargetMapper.insertBatchSomeColumn(activityTargetList); + + for (ActivityTarget activityTarget : activityTargetList) { + GlobalCache.ActivityTargetCourseCache.put( + getActivityTargetCourseCacheKey(activityTarget.getMajor(), activityTarget.getGrade(), dstAct), + activityTarget + ); + } + } + + public void removeActivityTargetCourse(Long id) { + var activityTarget = activityTargetMapper.selectOne(new LambdaQueryWrapper() + .eq(ActivityTarget::getId, id) + .eq(ActivityTarget::getDeleted, false) + .last("limit 1") + ); + + if (activityTarget == null) { + return; + } + + activityTargetMapper.update(null, new LambdaUpdateWrapper() + .set(ActivityTarget::getDeleted, true) + .eq(ActivityTarget::getId, id) + .eq(ActivityTarget::getDeleted, false) + ); + + GlobalCache.ActivityTargetCourseCache.invalidate( + getActivityTargetCourseCacheKey( + activityTarget.getMajor(), activityTarget.getGrade(), activityTarget.getActivity() + ) + ); + } + + public void updateActivityTargetCourse(Long id, ActivityTargetUpdateDto activityTargetUpdateDto) { + ActivityTarget activityTarget = activityTargetMapper.selectOne(new LambdaQueryWrapper() + .eq(ActivityTarget::getId, id) + .eq(ActivityTarget::getDeleted, false) + .last("limit 1") + ); + + if (activityTarget == null) { + return; + } + + var legacyActId = activityTarget.getActivity(); + var legacyMajor = activityTarget.getMajor(); + var legacyGrade = activityTarget.getGrade(); + + activityTarget.setGrade(activityTargetUpdateDto.getGrade()); + activityTarget.setMajor(activityTargetUpdateDto.getMajor()); + activityTarget.setCourseList(activityTargetUpdateDto.getCourse().toArray(new Long[0])); + + activityTargetMapper.update(activityTarget, new LambdaUpdateWrapper() + .eq(ActivityTarget::getId, id) + .eq(ActivityTarget::getDeleted, false) + ); + + GlobalCache.ActivityTargetCourseCache.invalidate(getActivityTargetCourseCacheKey(legacyMajor, legacyGrade, legacyActId)); + GlobalCache.ActivityTargetCourseCache.put( + getActivityTargetCourseCacheKey( + activityTarget.getMajor(), activityTarget.getGrade(), activityTarget.getActivity() + ), activityTarget + ); + } +} diff --git a/backend/src/main/java/rd/service/auth/UserTypeStpInterfaceImpl.java b/backend/src/main/java/rd/service/auth/UserTypeStpInterfaceImpl.java new file mode 100644 index 0000000..b7ab231 --- /dev/null +++ b/backend/src/main/java/rd/service/auth/UserTypeStpInterfaceImpl.java @@ -0,0 +1,82 @@ +package rd.service.auth; + +import cn.dev33.satoken.stp.StpInterface; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import lombok.extern.slf4j.Slf4j; +import rd.data.db.table.UserBasic; +import rd.data.enums.UserType; +import rd.service.user.UserBasicService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class UserTypeStpInterfaceImpl implements StpInterface { + private static final Cache> userRoleCache = Caffeine.newBuilder() + .expireAfterAccess(15, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + private static final List EMPTY_ARRAY = List.of(); + + private final UserBasicService userBasicService; + + public UserTypeStpInterfaceImpl(UserBasicService userBasicService) { + this.userBasicService = userBasicService; + } + + @Override + public List getPermissionList(Object uid, String loginType) { + List permissions = new ArrayList<>(); + permissions.add("all"); + + return permissions; + } + + @Override + public List getRoleList(Object uid, String loginType) { + Long longUid; + if (uid instanceof String sUid) { + longUid = Long.valueOf(sUid); + } else if (uid instanceof Long lUid) { + longUid = lUid; + } else { + throw new RuntimeException(); + } + + List roles = userRoleCache.getIfPresent(longUid); + if (roles != null) { + return roles; + } else { + roles = new ArrayList<>(1); + } + + UserBasic userBasic = userBasicService.getUserBasicById(longUid); + if (userBasic == null) { + return EMPTY_ARRAY; + } + + roles.add(switch (userBasic.getType()) { + case 0 -> UserType.STUDENT.name(); + case 1 -> UserType.TEACHER.name(); + case 2 -> UserType.ADMIN.name(); + default -> { + log.warn("未知的用户类型:{}", userBasic.getType()); + yield UserType.STUDENT.name(); + } + }); + + if (userBasic.getType().intValue() == UserType.ADMIN.code) { + roles.add(UserType.TEACHER.name()); + roles.add(UserType.STUDENT.name()); + } + + userRoleCache.put(longUid, roles); + return roles; + } +} diff --git a/backend/src/main/java/rd/service/cache/GlobalCache.java b/backend/src/main/java/rd/service/cache/GlobalCache.java new file mode 100644 index 0000000..d9b8cd1 --- /dev/null +++ b/backend/src/main/java/rd/service/cache/GlobalCache.java @@ -0,0 +1,95 @@ +package rd.service.cache; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import rd.data.db.table.*; + +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +public class GlobalCache { + public static final Cache cookieCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.HOURS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + public static final Cache activityCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache> termCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache ActivityTargetCourseCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache> userRoleCache = Caffeine.newBuilder() + .expireAfterAccess(15, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + public static final Cache courseCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache majorCache = Caffeine.newBuilder() + .expireAfterAccess(30, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache majorNameCache = Caffeine.newBuilder() + .expireAfterAccess(30, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache courseScheduleIdcache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache> courseScheduleCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + public static final Cache usernameCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + public static final Cache idCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + public static final Cache userInfoCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + public static final Cache> courseAllTeacherCache = Caffeine.newBuilder() + .expireAfterAccess(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); +} diff --git a/backend/src/main/java/rd/service/course/CourseService.java b/backend/src/main/java/rd/service/course/CourseService.java new file mode 100644 index 0000000..06d1c9a --- /dev/null +++ b/backend/src/main/java/rd/service/course/CourseService.java @@ -0,0 +1,406 @@ +package rd.service.course; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.course.CourseMapper; +import rd.dao.mapper.course.CourseSelectionMapper; +import rd.data.dto.FileByteDataWrapper; +import rd.data.dto.course.CourseDTO; +import rd.data.dto.course.CourseNameDTO; +import rd.data.dto.schedule.NotSelectStudentExportDto; +import rd.data.dto.schedule.SelectedStudentExportDto; +import rd.data.db.CourseScheduleSelectionInfo; +import rd.data.db.table.Course; +import rd.data.db.table.StudentInfo; +import rd.data.model.response.PaginationWrapper; +import rd.service.cache.GlobalCache; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.*; + +@Service +public class CourseService { + private final CourseMapper courseMapper; + private final CourseSelectionMapper courseSelectionMapper; + + public CourseService(CourseMapper courseMapper, CourseSelectionMapper courseSelectionMapper) { + this.courseMapper = courseMapper; + this.courseSelectionMapper = courseSelectionMapper; + } + + /** + * 添加一个课程信息 + * + * @param courseRequest 添加请求 + * @return 已添加的课程信息 + */ + @Transactional + public CourseDTO add(CourseDTO courseRequest) { + Long id = YitIdHelper.nextId(); + + Course course = new Course(); + course.setId(id); + course.setName(courseRequest.getName()); + course.setCourseHours(courseRequest.getCourseHours()); + course.setSpringTerm(courseRequest.getSpringTerm()); + course.setExamRatio(courseRequest.getExamRatio()); + + courseMapper.insert(course); + + return this.getCourseDTO(id, false); + } + + /** + * 删除指定id的课程 + * + * @param id 欲删除的课程id + */ + @Transactional + public void delete(Long id) { + Course course = new Course(); + course.setDeleted(true); + course.setEditTime(LocalDateTime.now()); + courseMapper.update(course, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + GlobalCache.courseCache.invalidate(id); + GlobalCache.ActivityTargetCourseCache.invalidateAll(); + } + + public CourseDTO getCourseDTO(Long id) { + return getCourseDTO(id, true); + } + + public Course getCourse(Long id) { + return getCourse(id, true); + } + + /** + * 根据课程id获取课程信息 + * + * @param id 课程id + * @param useCache 是否使用缓存 + * @return 课程信息 + */ + public CourseDTO getCourseDTO(Long id, boolean useCache) { + var result = GlobalCache.courseCache.getIfPresent(id); + if (!useCache || result == null) { + result = courseMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + if (result == null) { + return null; + } + + GlobalCache.courseCache.put(id, result); + } + + return convert(result); + } + + /** + * 根据课程id获取课程信息 + * + * @param id 课程id + * @param useCache 是否使用缓存 + * @return 课程信息 + */ + public Course getCourse(Long id, boolean useCache) { + if (useCache) { + return GlobalCache.courseCache.get(id, this::getCourseFromDB); + } else { + var course = this.getCourseFromDB(id); + GlobalCache.courseCache.put(id, course); + return course; + } + } + + private Course getCourseFromDB(Long id) { + return courseMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + } + + /** + * 根据课程id批量获取课程信息 + * + * @param idList 课程id + * @return 课程信息 + */ + public Map getCourse(List idList) { + return GlobalCache.courseCache.getAll(idList, any -> { + var courses = courseMapper.selectList(new QueryWrapper() + .in("id", idList) + .eq("deleted", false) + ); + + Map courseIdMap = new HashMap<>(courses.size()); + for (Course course : courses) { + courseIdMap.put(course.getId(), course); + } + + return courseIdMap; + }); + } + + /** + * 分页获取所有课程 + * + * @param page 第几页 + * @param pageSize 每页数据量 + * @return 分页包装数据 + */ + public PaginationWrapper> list(int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var result = courseMapper.selectPage(queryPage, new QueryWrapper() + .eq("deleted", false) + ); + + List courseDTOList = new ArrayList<>(); + var records = result.getRecords(); + for (var course : records) { + courseDTOList.add(convert(course)); + } + + return new PaginationWrapper<>( + (int) result.getCurrent(), + (int) result.getSize(), + (int) result.getTotal(), + courseDTOList + ); + } + + /** + * 分页获取所有课程名 + * + * @param page 第几页 + * @param pageSize 每页数据量 + * @return 分页包装数据 + */ + public PaginationWrapper> listCourseName(int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var result = courseMapper.selectPage(queryPage, new QueryWrapper() + .select("id", "name") + .eq("deleted", false) + ); + + List courseDTOList = new ArrayList<>(); + var records = result.getRecords(); + for (var course : records) { + courseDTOList.add(new CourseNameDTO(course.getId(), course.getName())); + } + + return new PaginationWrapper<>( + (int) result.getCurrent(), + (int) result.getSize(), + (int) result.getTotal(), + courseDTOList + ); + } + + public CourseNameDTO getCourseName(Long courseId) { + var course = getCourse(courseId); + if (course == null) { + return null; + } + + return new CourseNameDTO(course.getId(), course.getName()); + } + + private CourseDTO convert(Course course) { + CourseDTO courseDTO = new CourseDTO(); + courseDTO.setId(course.getId()); + courseDTO.setName(course.getName()); + courseDTO.setCourseHours(course.getCourseHours()); + courseDTO.setExamRatio(course.getExamRatio()); + courseDTO.setSpringTerm(course.getSpringTerm()); + + return courseDTO; + } + + private Course convert(CourseDTO courseDTO) { + Course course = new Course(); + course.setName(courseDTO.getName()); + course.setCourseHours(courseDTO.getCourseHours()); + course.setExamRatio(courseDTO.getExamRatio()); + course.setSpringTerm(courseDTO.getSpringTerm()); + + return course; + } + + /** + * 更新指定id的课程信息 + * + * @param id 课程id + * @param dto 新的课程信息 + * @return 更新好的课程信息 + */ + @Transactional + public CourseDTO update(Long id, CourseDTO dto) { + var course = convert(dto); + course.setEditTime(LocalDateTime.now()); + + courseMapper.update(course, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + GlobalCache.courseCache.invalidate(id); + GlobalCache.ActivityTargetCourseCache.invalidateAll(); + return this.getCourseDTO(id, false); + } + + private static final Map weekdayNameMap = new HashMap<>(); + + static { + weekdayNameMap.put(1, "星期一"); + weekdayNameMap.put(2, "星期二"); + weekdayNameMap.put(3, "星期三"); + weekdayNameMap.put(4, "星期四"); + weekdayNameMap.put(5, "星期五"); + weekdayNameMap.put(6, "星期六"); + weekdayNameMap.put(7, "星期日"); + } + + private static final Map sectionNameMap = new HashMap<>(); + + static { + sectionNameMap.put(0, "第一大节(1~2)"); + sectionNameMap.put(1, "第二大节(3~4)"); + sectionNameMap.put(2, "第三大节(5~6)"); + sectionNameMap.put(3, "第四大节(7~7)"); + sectionNameMap.put(4, "第五大节(9~10)"); + sectionNameMap.put(5, "第六大节(11~12)"); + } + + public List getSelectedStudentList(Long courseId, String term) { + return courseSelectionMapper.getSelectedStudentList(courseId, term); + } + + public List getNotSelectStudentList(Long courseId, String term) { + return courseSelectionMapper.getNotSelectStudentList(courseId, term); + } + + public FileByteDataWrapper exportSelectedStudents(Long courseId, String term) { + Course course = this.getCourse(courseId); + List courseScheduleSelectionInfoList = this.getSelectedStudentList(courseId, term); + + // 按学生uid聚合 + Map> selectedStudentMap = new HashMap<>(courseScheduleSelectionInfoList.size()); + for (CourseScheduleSelectionInfo selectedStudentInfo : courseScheduleSelectionInfoList) { + selectedStudentMap.computeIfAbsent(selectedStudentInfo.getUid(), uid -> new ArrayList<>()) + .add(selectedStudentInfo); + } + + int count = 0; + List selectedStudentExportDtoList = new ArrayList<>(courseScheduleSelectionInfoList.size()); + for (Long uid : selectedStudentMap.keySet()) { + count++; + List selectionInfos = selectedStudentMap.get(uid); + var studentName = selectionInfos.get(0).getName(); + var studentNumber = selectionInfos.get(0).getStudentNumber(); + var clazz = selectionInfos.get(0).getClazz(); + + SelectedStudentExportDto selectedStudentExportDto = new SelectedStudentExportDto(); + selectedStudentExportDto.setId(count); + selectedStudentExportDto.setStudentNumber(studentNumber); + selectedStudentExportDto.setClazz(clazz); + selectedStudentExportDto.setName(studentName); + StringJoiner stringJoiner = new StringJoiner(",\r\n"); + for (CourseScheduleSelectionInfo info : selectionInfos) { + stringJoiner.add(String.format("%s%s(%d周~%d周)", + weekdayNameMap.getOrDefault(info.getWeekday(), info.getWeekday().toString()), + sectionNameMap.getOrDefault(info.getTime(), info.getTime().toString()), + info.getStartWeek(), info.getEndWeek() + )); + } + + selectedStudentExportDto.setSelectedSchedule(stringJoiner.toString()); + selectedStudentExportDtoList.add(selectedStudentExportDto); + } + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + InputStream template = getClass().getResourceAsStream("/template_student_list.xlsx"); + try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(selectedStudentExportDtoList, fillConfig, writeSheet); + + Map map = MapUtils.newHashMap(); + + map.put("courseName", course.getName()); + map.put("term", term); + map.put("count", count); + + excelWriter.fill(map, writeSheet); + + excelWriter.finish(); + } + + var data = outputStream.toByteArray(); + return new FileByteDataWrapper(data, course.getName()); + } + + public FileByteDataWrapper exportNotSelectStudents(Long courseId, String term) { + Course course = this.getCourse(courseId); + List notSelectStudentList = this.getNotSelectStudentList(courseId, term); + + int count = 0; + List selectedStudentExportDtoList = new ArrayList<>(notSelectStudentList.size()); + for (var notSelectStudent : notSelectStudentList) { + count++; + NotSelectStudentExportDto selectedStudentExportDto = new NotSelectStudentExportDto(); + selectedStudentExportDto.setId(count); + selectedStudentExportDto.setStudentNumber(notSelectStudent.getStudentNumber()); + selectedStudentExportDto.setClazz(notSelectStudent.getClazz()); + selectedStudentExportDto.setName(notSelectStudent.getName()); + + selectedStudentExportDtoList.add(selectedStudentExportDto); + } + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + InputStream template = getClass().getResourceAsStream("/template_student_list_not_selected.xlsx"); + try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(selectedStudentExportDtoList, fillConfig, writeSheet); + + Map map = MapUtils.newHashMap(); + + map.put("courseName", course.getName()); + map.put("term", term); + map.put("count", selectedStudentExportDtoList.size()); + + excelWriter.fill(map, writeSheet); + + excelWriter.finish(); + } + + var data = outputStream.toByteArray(); + return new FileByteDataWrapper(data, course.getName()); + } +} diff --git a/backend/src/main/java/rd/service/course/CourseTeacherService.java b/backend/src/main/java/rd/service/course/CourseTeacherService.java new file mode 100644 index 0000000..1fc4fa9 --- /dev/null +++ b/backend/src/main/java/rd/service/course/CourseTeacherService.java @@ -0,0 +1,149 @@ +package rd.service.course; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import rd.dao.mapper.course.CourseTeacherMapper; +import rd.data.db.table.Course; +import rd.data.db.table.CourseTeacher; +import rd.data.db.table.TeacherInfo; +import rd.service.cache.GlobalCache; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Slf4j +@Service +public class CourseTeacherService { + private final CourseTeacherMapper courseTeacherMapper; + + public CourseTeacherService(CourseTeacherMapper courseTeacherMapper) { + this.courseTeacherMapper = courseTeacherMapper; + } + + public List getCourseForTeacher(Long teacherId) { + return courseTeacherMapper.getCourseForTeacher(teacherId); + } + + public List getCourseTeacherList(Long courseId) { + return this.getCourseTeacherList(courseId, true); + } + + public List getCourseTeacherList(Long courseId, boolean readCache) { + if (readCache) { + return GlobalCache.courseAllTeacherCache.get(courseId, courseTeacherMapper::getCourseAllTeacherInfo); + } else { + var courseTeachers = courseTeacherMapper.getCourseAllTeacherInfo(courseId); + GlobalCache.courseAllTeacherCache.put(courseId, courseTeachers); + return courseTeachers; + } + } + + public List addCourseTeacher(Long courseId, Long teacherId) { + var exists = courseTeacherMapper.exists(new LambdaQueryWrapper() + .eq(CourseTeacher::getTeacher, teacherId) + .eq(CourseTeacher::getCourse, courseId) + .eq(CourseTeacher::getDeleted, false) + ); + if (exists) { + return this.getCourseTeacherList(courseId); + } + + CourseTeacher courseTeacher = new CourseTeacher(); + courseTeacher.setTeacher(teacherId); + courseTeacher.setCourse(courseId); + courseTeacher.setCreateTime(LocalDateTime.now()); + courseTeacher.setEditTime(LocalDateTime.now()); + courseTeacher.setDeleted(false); + + courseTeacherMapper.insert(courseTeacher); + + return this.getCourseTeacherList(courseId, false); + } + + public List addCourseTeachers(Long courseId, List teacherIds) { + if (teacherIds == null || teacherIds.isEmpty()) { + return getCourseTeacherList(courseId); + } + + var existsTeacherCourseList = courseTeacherMapper.selectList(new LambdaQueryWrapper() + .in(CourseTeacher::getTeacher, teacherIds) + .eq(CourseTeacher::getCourse, courseId) + .eq(CourseTeacher::getDeleted, false) + ); + + List courseTeacherList; + if (existsTeacherCourseList.isEmpty()) { + courseTeacherList = teacherIds.stream() + .map(teacherId -> this.makeCourseTeacher(courseId, teacherId)) + .toList(); + } else { + Set filteredTeacherIds = new HashSet<>(teacherIds); + for (CourseTeacher courseTeacher : existsTeacherCourseList) { + filteredTeacherIds.remove(courseTeacher.getTeacher()); + } + + courseTeacherList = filteredTeacherIds.stream() + .map(teacherId -> this.makeCourseTeacher(courseId, teacherId)) + .toList(); + } + + courseTeacherMapper.insertBatchSomeColumn(courseTeacherList); + + return this.getCourseTeacherList(courseId, false); + } + + private CourseTeacher makeCourseTeacher(Long courseId, Long teacherId) { + CourseTeacher courseTeacher = new CourseTeacher(); + courseTeacher.setTeacher(teacherId); + courseTeacher.setCourse(courseId); + courseTeacher.setCreateTime(LocalDateTime.now()); + courseTeacher.setEditTime(LocalDateTime.now()); + courseTeacher.setDeleted(false); + return courseTeacher; + } + + public List removeCourseTeacher(Long courseId, Long teacherId) { + courseTeacherMapper.delete(new LambdaQueryWrapper() + .eq(CourseTeacher::getCourse, courseId) + .eq(CourseTeacher::getTeacher, teacherId) + ); + + return this.getCourseTeacherList(courseId, false); + } + + @Transactional + public List updateCourseTeacherList(Long courseId, Set teacherIds) { + var existCourseTeachers = this.getCourseTeacherList(courseId); + Set removedTeacherIds = new HashSet<>(); + for (TeacherInfo courseTeacher : existCourseTeachers) { + // 传入的teacherIds中已经存在,则在待添加的teacherIds中移除,teacherIds剩下的就是新添加的, + // 如果已存在的teacher不在teacherIds中,则说明这个id是要被删除的 + if (teacherIds.contains(courseTeacher.getId())) { + teacherIds.remove(courseTeacher.getId()); + } else { + removedTeacherIds.add(courseTeacher.getId()); + } + } + + if (!removedTeacherIds.isEmpty()) { + courseTeacherMapper.delete(new LambdaQueryWrapper() + .eq(CourseTeacher::getCourse, courseId) + .in(CourseTeacher::getTeacher, removedTeacherIds) + ); + } + + if (!teacherIds.isEmpty()) { + var courseTeacherEntityList = teacherIds.stream() + .map(teacherId -> this.makeCourseTeacher(courseId, teacherId)) + .toList(); + + courseTeacherMapper.insertBatchSomeColumn(courseTeacherEntityList); + } + + return this.getCourseTeacherList(courseId, false); + } +} diff --git a/backend/src/main/java/rd/service/experiment/ExperimentService.java b/backend/src/main/java/rd/service/experiment/ExperimentService.java new file mode 100644 index 0000000..90a0273 --- /dev/null +++ b/backend/src/main/java/rd/service/experiment/ExperimentService.java @@ -0,0 +1,8 @@ +package rd.service.experiment; + +import org.springframework.stereotype.Service; + +@Service +public class ExperimentService { + +} diff --git a/backend/src/main/java/rd/service/major/MajorService.java b/backend/src/main/java/rd/service/major/MajorService.java new file mode 100644 index 0000000..646e0eb --- /dev/null +++ b/backend/src/main/java/rd/service/major/MajorService.java @@ -0,0 +1,137 @@ +package rd.service.major; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.major.MajorMapper; +import rd.data.code.ServiceCode; +import rd.data.db.table.Major; + +import org.springframework.stereotype.Service; +import rd.exception.ServiceException; + +import java.time.LocalDateTime; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +@Service +public class MajorService { + private static final Cache majorCache = Caffeine.newBuilder() + .expireAfterAccess(30, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private static final Cache majorNameCache = Caffeine.newBuilder() + .expireAfterAccess(30, TimeUnit.DAYS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private final MajorMapper majorMapper; + + public MajorService(MajorMapper majorMapper) { + this.majorMapper = majorMapper; + } + + public Major addMajorIfNotExists(String name) { + Major major = this.getMajorByName(name); + if (major == null) { + major = new Major(); + Long id = YitIdHelper.nextId(); + major.setId(id); + major.setName(name); + + majorMapper.insert(major); + + major = getMajor(id, false); + + putCache(major); + } + + return major; + } + + public void deleteMajor(Long id) { + var major = majorMapper.selectOne(new QueryWrapper() + .select("name") + .eq("id", id) + .eq("deleted", false) + .last("limit 1") + ); + + if (major == null) { + return; + } + + major.setDeleted(true); + major.setEditTime(LocalDateTime.now()); + + majorMapper.update(major, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + majorCache.invalidate(id); + majorNameCache.invalidate(major.getName()); + } + + public Major getMajor(Long id, boolean useCache) { + var major = majorCache.getIfPresent(id); + if (useCache && major != null) { + return major; + } + + major = majorMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + if (major == null) { + throw ServiceException.error(ServiceCode.DataNotExists); + } + + putCache(major); + + return major; + } + + public Major getMajor(Long id) { + return getMajor(id, true); + } + + public Major getMajorByName(String name) { + return majorNameCache.get(name, key -> majorMapper.selectOne(new QueryWrapper() + .eq("name", name) + .eq("deleted", false) + .last("limit 1") + ) + ); + } + + public Set listAllMajor() { + var cacheMap = majorCache.asMap(); + + if (!cacheMap.isEmpty()) { + return new HashSet<>(cacheMap.values()); + } + + var results = majorMapper.selectList(new QueryWrapper() + .select("id", "name") + .eq("deleted", false) + ); + + for (var result : results) { + putCache(result); + } + + return new HashSet<>(results); + } + + private void putCache(Major major) { + majorCache.put(major.getId(), major); + majorNameCache.put(major.getName(), major); + } +} diff --git a/backend/src/main/java/rd/service/schedule/CourseScheduleService.java b/backend/src/main/java/rd/service/schedule/CourseScheduleService.java new file mode 100644 index 0000000..dcf53a3 --- /dev/null +++ b/backend/src/main/java/rd/service/schedule/CourseScheduleService.java @@ -0,0 +1,277 @@ +package rd.service.schedule; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.yitter.idgen.YitIdHelper; +import lombok.extern.slf4j.Slf4j; +import rd.dao.mapper.course.CourseSelectionMapper; +import rd.dao.mapper.schedule.CourseScheduleMapper; +import rd.data.dto.schedule.CourseScheduleDTO; +import rd.data.db.CourseScheduleWithCourseIdName; +import rd.data.db.table.CourseSchedule; +import rd.data.db.table.CourseSelection; +import rd.data.model.response.PaginationWrapper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.StringJoiner; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class CourseScheduleService { + private static final Cache courseScheduleIdcache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private static final Cache> courseScheduleCache = Caffeine.newBuilder() + .expireAfterAccess(1, TimeUnit.HOURS) + .initialCapacity(16) + .maximumSize(64) + .build(); + + private final CourseScheduleMapper courseScheduleMapper; + private final CourseSelectionMapper courseSelectionMapper; + + public CourseScheduleService(CourseScheduleMapper courseScheduleMapper, + CourseSelectionMapper courseSelectionMapper) { + + this.courseScheduleMapper = courseScheduleMapper; + this.courseSelectionMapper = courseSelectionMapper; + } + + public CourseScheduleDTO getScheduleDTO(Long id) { + var schedule = getSchedule(id); + return convert(schedule); + } + + public CourseSchedule getSchedule(Long id) { + return getSchedule(id, true); + } + + private CourseSchedule getSchedule(Long scheduleId, boolean loadFromCache) { + if (loadFromCache) { + var courseSchedule = courseScheduleIdcache.getIfPresent(scheduleId); + if (courseSchedule != null) { + return courseSchedule; + } + } + + var courseSchedule = this.getScheduleFromDb(scheduleId); + this.putCache(courseSchedule); + return courseSchedule; + } + + private CourseSchedule getScheduleFromDb(Long id) { + return courseScheduleMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + .last("limit 1") + ); + } + + private List getScheduleOfCourse(Long courseId, String term) { + String cacheKey = new StringJoiner(":").add(courseId.toString()).add(term).toString(); + return courseScheduleCache.get(cacheKey, k -> + courseScheduleMapper.selectList(new LambdaQueryWrapper() + .eq(CourseSchedule::getAcademicTerm, term) + .eq(CourseSchedule::getCourse, courseId) + .eq(CourseSchedule::getDeleted, false) + ) + ); + } + + public List getTermCourseSchedule(Long courseId, String term) { + var schedules = getScheduleOfCourse(courseId, term); + return schedules.stream() + .map(CourseScheduleService::convert) + .toList(); + } + + public PaginationWrapper> getScheduleOfCourse(Long courseId, String term, int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var pageRecord = courseScheduleMapper.selectPage(queryPage, new LambdaQueryWrapper() + .eq(term != null && !term.isEmpty(), CourseSchedule::getAcademicTerm, term) + .eq(CourseSchedule::getCourse, courseId) + .eq(CourseSchedule::getDeleted, false) + ); + + return wrapPaginationResult(pageRecord); + } + + public List getStudentTermSchedule(Long studentUid, String term) { + return courseSelectionMapper.getStudentSelectedSchedulesDetail(studentUid, term); + } + + private PaginationWrapper> wrapPaginationResult(Page pageRecord) { + var records = pageRecord.getRecords(); + var resultList = new ArrayList(records.size()); + for (var schedule : records) { + resultList.add(convert(schedule)); + } + + return new PaginationWrapper<>( + (int) pageRecord.getCurrent(), + (int) pageRecord.getSize(), + (int) pageRecord.getTotal(), + resultList + ); + } + + private static CourseSchedule convert(CourseScheduleDTO dto) { + if (dto == null) { + return null; + } + + CourseSchedule courseSchedule = new CourseSchedule(); + + courseSchedule.setId(dto.getId()); + courseSchedule.setCourse(dto.getCourse()); + courseSchedule.setStartWeek(dto.getStartWeek()); + courseSchedule.setEndWeek(dto.getEndWeek()); + courseSchedule.setTime(dto.getTime()); + courseSchedule.setWeekday(dto.getWeekday()); + courseSchedule.setAcademicTerm(dto.getAcademicTerm()); + courseSchedule.setPlace(dto.getPlace()); + + return courseSchedule; + + } + + private static CourseScheduleDTO convert(CourseSchedule courseSchedule) { + if (courseSchedule == null) { + return null; + } + + CourseScheduleDTO courseScheduleDTO = new CourseScheduleDTO(); + + courseScheduleDTO.setId(courseSchedule.getId()); + courseScheduleDTO.setCourse(courseSchedule.getCourse()); + courseScheduleDTO.setStartWeek(courseSchedule.getStartWeek()); + courseScheduleDTO.setEndWeek(courseSchedule.getEndWeek()); + courseScheduleDTO.setTime(courseSchedule.getTime()); + courseScheduleDTO.setWeekday(courseSchedule.getWeekday()); + courseScheduleDTO.setAcademicTerm(courseSchedule.getAcademicTerm()); + courseScheduleDTO.setPlace(courseSchedule.getPlace()); + + return courseScheduleDTO; + } + + private void putCache(CourseSchedule courseSchedule) { + if (courseSchedule == null) { + return; + } + + courseScheduleIdcache.put(courseSchedule.getId(), courseSchedule); + + String key = new StringJoiner(":") + .add(courseSchedule.getCourse().toString()) + .add(courseSchedule.getAcademicTerm()) + .toString(); + + var list = courseScheduleCache.getIfPresent(key); + if (list == null) { + list = new ArrayList<>(8); + list.add(courseSchedule); + courseScheduleCache.put(key, list); + } + + list.remove(courseSchedule); + list.add(courseSchedule); + } + + @Transactional + public CourseSchedule add(Long courseId, CourseScheduleDTO dto) { + Long id = YitIdHelper.nextId(); + + CourseSchedule courseSchedule = convert(dto); + courseSchedule.setId(id); + courseSchedule.setCourse(courseId); + + courseScheduleMapper.insert(courseSchedule); + + return this.getSchedule(id, false); + } + + @Transactional + public CourseSchedule update(Long id, CourseScheduleDTO dto) { + CourseSchedule courseSchedule = convert(dto); + courseSchedule.setId(id); + + courseScheduleMapper.update(courseSchedule, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + return this.getSchedule(id, false); + } + + @Async + @Transactional + public void cloneSchedule(Long course, String sourceTerm, String targetTerm) { + var scheduleList = this.getScheduleOfCourse(course, sourceTerm); + if (scheduleList.isEmpty()) { + return; + } + + for (CourseSchedule schedule : scheduleList) { + Long id = YitIdHelper.nextId(); + CourseSchedule clone = new CourseSchedule(); + clone.setId(id); + clone.setCourse(course); + clone.setStartWeek(schedule.getStartWeek()); + clone.setEndWeek(schedule.getEndWeek()); + clone.setTime(schedule.getTime()); + clone.setWeekday(schedule.getWeekday()); + clone.setAcademicTerm(targetTerm); + clone.setPlace(schedule.getPlace()); + clone.setCreateTime(LocalDateTime.now()); + clone.setEditTime(LocalDateTime.now()); + clone.setDeleted(false); + + courseScheduleMapper.insert(clone); + } + } + + public void delete(Long id) { + CourseSchedule schedule = getSchedule(id); + if (schedule == null) { + return; + } + + schedule.setDeleted(true); + schedule.setEditTime(LocalDateTime.now()); + + courseScheduleMapper.update(schedule, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + courseScheduleIdcache.invalidate(id); + String key = new StringJoiner(":") + .add(schedule.getCourse().toString()) + .add(schedule.getAcademicTerm()) + .toString(); + courseScheduleCache.invalidate(key); + } + + public int getSelectedCount(Long scheduleId) { + return courseSelectionMapper.selectCount(new LambdaQueryWrapper() + .eq(CourseSelection::getSchedule, scheduleId) + .eq(CourseSelection::getDeleted, false) + ).intValue(); + } +} diff --git a/backend/src/main/java/rd/service/schedule/StudentCourseScheduleService.java b/backend/src/main/java/rd/service/schedule/StudentCourseScheduleService.java new file mode 100644 index 0000000..e763cdd --- /dev/null +++ b/backend/src/main/java/rd/service/schedule/StudentCourseScheduleService.java @@ -0,0 +1,113 @@ +package rd.service.schedule; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.course.CourseSelectionMapper; +import rd.data.code.ServiceCode; +import rd.data.db.table.CourseSelection; +import rd.exception.ServiceException; + +import rd.service.activity.ActivityService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; + +@Service +public class StudentCourseScheduleService { + + private final ActivityService activityService; + private final CourseScheduleService courseScheduleService; + private final CourseSelectionMapper courseSelectionMapper; + + public StudentCourseScheduleService(ActivityService activityService, + CourseScheduleService courseScheduleService, + CourseSelectionMapper courseSelectionMapper) { + + this.activityService = activityService; + this.courseScheduleService = courseScheduleService; + this.courseSelectionMapper = courseSelectionMapper; + } + + public boolean isStudentSelected(Long studentUid, Long scheduleId) { + return courseSelectionMapper.exists(new LambdaQueryWrapper() + .eq(CourseSelection::getSchedule, scheduleId) + .eq(CourseSelection::getStudent, studentUid) + .eq(CourseSelection::getDeleted, false) + ); + } + + @Transactional + public void selectSchedule(Long uid, Long scheduleId, Long activityId) { + var schedule = courseScheduleService.getSchedule(scheduleId); + if (schedule == null) { + throw ServiceException.error(ServiceCode.DataNotExists, "课堂id不存在:" + scheduleId); + } + + var activity = activityService.getById(activityId); + if (activity == null) { + throw ServiceException.error(ServiceCode.DataNotExists, "选课活动id不存在:" + activityId); + } + + var now = LocalDateTime.now(); + if (!activity.getStartTime().isBefore(now) || !activity.getEndTime().isAfter(now)) { + var msg = String.format( + "当前的选课活动'%s'已结束:%s ~ %s", + activity.getName(), activity.getStartTime(), activity.getEndTime() + ); + throw ServiceException.error(ServiceCode.ActivityEnded); + } + + if (!schedule.getAcademicTerm().equals(activity.getTerm())) { + var msg = String.format( + "学期不匹配:选定的课堂学期:%s,选课活动对应的学期:%s", + schedule.getAcademicTerm(), activity.getTerm() + ); + throw ServiceException.error(ServiceCode.DataNotMatch, msg); + } + + var exists = courseSelectionMapper.exists(new LambdaQueryWrapper() + .eq(CourseSelection::getId, scheduleId) + .eq(CourseSelection::getStudent, uid) + .eq(CourseSelection::getDeleted, false) + ); + if (exists) { + return; + } + + Long id = YitIdHelper.nextId(); + CourseSelection courseSelection = new CourseSelection(); + courseSelection.setId(id); + courseSelection.setTerm(activity.getTerm()); + courseSelection.setStudent(uid); + courseSelection.setSchedule(scheduleId); + courseSelection.setActivity(activityId); + courseSelection.setCreateTime(LocalDateTime.now()); + courseSelection.setEditTime(LocalDateTime.now()); + courseSelection.setDeleted(false); + + courseSelectionMapper.insert(courseSelection); + } + + public void unselect(Long uid, Long scheduleId) { + courseSelectionMapper.delete(new LambdaQueryWrapper() + .eq(CourseSelection::getSchedule, scheduleId) + .eq(CourseSelection::getStudent, uid) + .eq(CourseSelection::getDeleted, false) + ); + } + + @Transactional + public void update(Long uid, Long oldSchedule, Long newSchedule, Long activityId) { + CourseSelection courseSelection = new CourseSelection(); + courseSelection.setSchedule(newSchedule); + courseSelection.setEditTime(LocalDateTime.now()); + courseSelectionMapper.update(courseSelection, new QueryWrapper() + .eq("schedule", oldSchedule) + .eq("activity", activityId) + .eq("student", uid) + .eq("deleted", false) + ); + } +} diff --git a/backend/src/main/java/rd/service/schedule/TeacherCourseScheduleService.java b/backend/src/main/java/rd/service/schedule/TeacherCourseScheduleService.java new file mode 100644 index 0000000..290748f --- /dev/null +++ b/backend/src/main/java/rd/service/schedule/TeacherCourseScheduleService.java @@ -0,0 +1,22 @@ +package rd.service.schedule; + +import rd.dao.mapper.course.CourseTeacherMapper; +import rd.data.db.CourseScheduleWithCourseIdName; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class TeacherCourseScheduleService { + private final CourseTeacherMapper courseTeacherMapper; + + public TeacherCourseScheduleService(CourseTeacherMapper courseTeacherMapper) { + + this.courseTeacherMapper = courseTeacherMapper; + } + + public List getTeacherSchedule(Long uid, String term) { + return courseTeacherMapper.getAllCourseScheduleForTeacher(uid, term); + } + +} diff --git a/backend/src/main/java/rd/service/score/ScoreService.java b/backend/src/main/java/rd/service/score/ScoreService.java new file mode 100644 index 0000000..f856e49 --- /dev/null +++ b/backend/src/main/java/rd/service/score/ScoreService.java @@ -0,0 +1,167 @@ +package rd.service.score; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.util.MapUtils; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.score.ScoreMapper; +import rd.data.code.ServiceCode; +import rd.data.dto.FileByteDataWrapper; +import rd.data.dto.score.CourseScoreInfoDto; +import rd.data.dto.score.ScoreExportDto; +import rd.data.dto.score.StudentScore; +import rd.data.db.table.Score; +import rd.exception.ServiceException; + +import rd.service.course.CourseService; +import rd.service.user.StudentUserService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +public class ScoreService { + private final ScoreMapper scoreMapper; + private final StudentUserService studentUserService; + private final CourseService courseService; + + public ScoreService(ScoreMapper scoreMapper, + StudentUserService studentUserService, + CourseService courseService) { + + this.scoreMapper = scoreMapper; + this.studentUserService = studentUserService; + this.courseService = courseService; + } + + public List getStudentAllScore(Long uid, String term) { + return scoreMapper.getStudentAllScore(uid, term); + } + + public List getCourseTermAllSelectedStudentScore(Long courseId, String term) { + return scoreMapper.getTermCourseAllSelectedStudentScore(courseId, term); + } + + @Transactional + public void insertOrUpdateScore(Long scoreId, Long courseId, String term, CourseScoreInfoDto courseScoreInfoDto) { + if (courseScoreInfoDto.getUsualScore() == null || + courseScoreInfoDto.getExamScore() == null || + courseScoreInfoDto.getStudentNumber() == null || + term == null + ) { + throw ServiceException.error(ServiceCode.DataFormatWrong); + } + + if (courseScoreInfoDto.getExamRatio() == null) { + var course = courseService.getCourse(courseId); + if (course == null) { + throw ServiceException.error(ServiceCode.DataNotExists, "课程id不存在"); + } + + courseScoreInfoDto.setExamRatio(course.getExamRatio()); + } + + Long studentUid = studentUserService.getByStudentNumber(courseScoreInfoDto.getStudentNumber()).id(); + + if (scoreId == null) { + scoreId = YitIdHelper.nextId(); + } + + Score score = convert(courseScoreInfoDto); + score.setId(scoreId); + score.setCourse(courseId); + score.setStudent(studentUid); + score.setTerm(term); + score.setEditTime(LocalDateTime.now()); + + scoreMapper.insertOrUpdateScore(score); + } + + public FileByteDataWrapper exportTermCourseAllStudentScoreExcel(Long courseId, String term) { + var course = courseService.getCourse(courseId); + if (course == null) { + throw ServiceException.error(ServiceCode.DataNotExists, "课程id不存在"); + } + + var scoreList = scoreMapper.getTermCourseAllSelectedStudentScore(courseId, term); + + int count = 0; + double sum = 0.0; + + List scoreExportDtoList = new ArrayList<>(scoreList.size()); + for (int i = 0; i < scoreList.size(); i++) { + var score = scoreList.get(i); + float examRatio = score.getExamRatio() == null ? course.getExamRatio() : score.getExamRatio(); + ScoreExportDto scoreExportDto = convert(i + 1, score); + scoreExportDto.setExamRatio(examRatio); + if (score.getId() != null) { + count++; + double weightedUsualScore = score.getUsualScore() * (1 - examRatio); + double weightedExamScore = score.getExamScore() * examRatio; + double finalScore = weightedUsualScore + weightedExamScore; + sum += finalScore; + scoreExportDto.setFinalScore(String.format("%.2f", finalScore)); + } + + scoreExportDtoList.add(scoreExportDto); + } + + double avg = 0.0; + if (count != 0) { + avg = sum / count; + } + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + InputStream template = getClass().getResourceAsStream("/template_score.xlsx"); + try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(template).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + excelWriter.fill(scoreExportDtoList, fillConfig, writeSheet); + + Map map = MapUtils.newHashMap(); + + map.put("courseName", course.getName()); + map.put("count", scoreExportDtoList.size()); + map.put("recordCount", count); + map.put("avg", String.format("%.2f", avg)); + map.put("sum", String.format("%.2f", sum)); + + excelWriter.fill(map, writeSheet); + + excelWriter.finish(); + } + + return new FileByteDataWrapper(outputStream.toByteArray(), course.getName()); + } + + public static ScoreExportDto convert(int index, CourseScoreInfoDto courseScoreInfoDto) { + ScoreExportDto scoreExportDto = new ScoreExportDto(); + scoreExportDto.setId(index); + scoreExportDto.setStudentName(courseScoreInfoDto.getStudentName()); + scoreExportDto.setNumber(courseScoreInfoDto.getStudentNumber()); + scoreExportDto.setUsualScore(courseScoreInfoDto.getUsualScore()); + scoreExportDto.setExamScore(courseScoreInfoDto.getExamScore()); + + return scoreExportDto; + } + + public static Score convert(CourseScoreInfoDto courseScoreInfoDto) { + Score score = new Score(); + score.setId(courseScoreInfoDto.getId()); +// score.setStudent(score.getStudent()); + score.setUsualScore(courseScoreInfoDto.getUsualScore()); + score.setExamScore(courseScoreInfoDto.getExamScore()); + score.setExamRatio(courseScoreInfoDto.getExamRatio()); + + return score; + } +} diff --git a/backend/src/main/java/rd/service/user/StudentUserService.java b/backend/src/main/java/rd/service/user/StudentUserService.java new file mode 100644 index 0000000..076f537 --- /dev/null +++ b/backend/src/main/java/rd/service/user/StudentUserService.java @@ -0,0 +1,319 @@ +package rd.service.user; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yitter.idgen.YitIdHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.StringRedisTemplate; +import rd.dao.mapper.user.StudentInfoMapper; +import rd.data.Constants; +import rd.data.code.ServiceCode; +import rd.data.dto.user.UserBasicInfoDTO; +import rd.data.dto.user.student.BasicStudentInfoDto; +import rd.data.dto.user.student.BasicStudentInfoWithMajorNameDto; +import rd.data.dto.user.student.NewStudentDTO; +import rd.data.dto.user.student.StudentUserInfoDTO; +import rd.data.db.table.StudentInfo; +import rd.data.enums.UserType; +import rd.data.model.response.PaginationWrapper; +import rd.exception.ServiceException; + +import rd.rpc.WusthelperApi; +import rd.service.major.MajorService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Service +public class StudentUserService { + private final StudentInfoMapper studentInfoMapper; + private final UserBasicService userBasicService; + private final UserInfoService userInfoService; + private final MajorService majorService; + + private final WusthelperApi wusthelperApi; + private final StringRedisTemplate stringRedisTemplate; + + public StudentUserService(StudentInfoMapper studentInfoMapper, + UserBasicService userBasicService, + UserInfoService userInfoService, + MajorService majorService, + WusthelperApi wusthelperApi, StringRedisTemplate stringRedisTemplate) { + + this.studentInfoMapper = studentInfoMapper; + this.userBasicService = userBasicService; + this.userInfoService = userInfoService; + this.majorService = majorService; + + this.wusthelperApi = wusthelperApi; + this.stringRedisTemplate = stringRedisTemplate; + } + + public PaginationWrapper> list(int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var result = studentInfoMapper.selectPage(queryPage, new QueryWrapper() + .eq("deleted", false) + ); + + return new PaginationWrapper<>( + (int) result.getCurrent(), + (int) result.getSize(), + (int) result.getTotal(), + result.getRecords() + ); + } + + public StudentInfo getById(Long id) { + var result = studentInfoMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + if (result == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return result; + } + + public List getByIds(List idList) { + if (idList.isEmpty()) { + return new ArrayList<>(); + } + + var result = studentInfoMapper.selectList(new QueryWrapper() + .in("id", idList) + .eq("deleted", false) + ); + + if (result.isEmpty()) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return result; + } + + public StudentUserInfoDTO getByStudentNumber(String studentNumber) { + var result = studentInfoMapper.selectOne(new QueryWrapper() + .eq("student_number", studentNumber) + .eq("deleted", false) + ); + + if (result == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + var userBasic = userBasicService.getUserBasicById(result.getId()); + if (userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return StudentUserInfoDTO.builder() + .id(result.getId()) + .username(userBasic.getUsername()) + .number(result.getStudentNumber()) + .name(result.getName()) + .major(result.getMajor()) + .grade(result.getGrade()) + .clazz(result.getClazz()) + .build(); + } + + public StudentUserInfoDTO getInfoById(Long id) { + var result = studentInfoMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + var userBasic = userBasicService.getUserBasicById(id); + + if (result == null || userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return StudentUserInfoDTO.builder() + .id(id) + .username(userBasic.getUsername()) + .number(result.getStudentNumber()) + .name(result.getName()) + .major(result.getMajor()) + .grade(result.getGrade()) + .clazz(result.getClazz()) + .build(); + } + + @Transactional + public StudentInfo add(BasicStudentInfoDto dto) { + Long id = YitIdHelper.nextId(); + + StudentInfo studentInfo = new StudentInfo(); + studentInfo.setId(id); + studentInfo.setStudentNumber(dto.studentNumber()); + studentInfo.setName(dto.studentName()); + studentInfo.setMajor(dto.majorId()); + studentInfo.setGrade(Integer.parseInt(dto.studentNumber().substring(0, 4))); + studentInfo.setClazz(""); + studentInfo.setCreateTime(LocalDateTime.now()); + studentInfo.setEditTime(LocalDateTime.now()); + studentInfo.setDeleted(false); + + studentInfoMapper.insert(studentInfo); + + String username = dto.studentNumber(); + String password = dto.studentNumber(); // 默认密码与学号相同 + userBasicService.addUser(id, username, password, (short) UserType.STUDENT.code); + + return studentInfo; + } +// +// @Transactional +// public StudentInfo addBatch(List basicStudentInfoDtoList) { +// String id = Long.toString(YitIdHelper.nextId()); +// +// StudentInfo studentInfo = new StudentInfo(); +// studentInfo.setId(id); +// studentInfo.setStudentNumber(dto.studentNumber()); +// studentInfo.setName(dto.studentName()); +// studentInfo.setMajor(dto.major()); +// studentInfo.setGrade(Integer.parseInt(dto.studentNumber().substring(0, 4))); +// studentInfo.setClazz(""); +// studentInfo.setCreateTime(LocalDateTime.now()); +// studentInfo.setEditTime(LocalDateTime.now()); +// studentInfo.setDeleted(false); +// +// studentInfoMapper.insert(studentInfo); +// +// String username = dto.studentNumber(); +// String password = ""; +// userBasicService.addUser(id, username, password, (short) UserType.STUDENT.code); +// +// return studentInfo; +// } + + @Transactional + public StudentInfo addWithAutoMajor(BasicStudentInfoWithMajorNameDto dto) { + var userBasic = userBasicService.getUserBasicByUsername(dto.studentNumber()); + if (userBasic != null) { + return userInfoService.getAsStudent(userBasic.getId()); + } + + Long id = YitIdHelper.nextId(); + + StudentInfo studentInfo = new StudentInfo(); + studentInfo.setId(id); + studentInfo.setStudentNumber(dto.studentNumber()); + studentInfo.setName(dto.studentName()); + + var major = majorService.addMajorIfNotExists(dto.majorName()); + studentInfo.setMajor(major.getId()); + + studentInfo.setGrade(Integer.parseInt(dto.studentNumber().substring(0, 4))); + studentInfo.setClazz("unknown"); + studentInfo.setCreateTime(LocalDateTime.now()); + studentInfo.setEditTime(LocalDateTime.now()); + studentInfo.setDeleted(false); + + studentInfoMapper.insert(studentInfo); + + String username = dto.studentNumber(); + String password = ""; + userBasicService.addUser(id, username, password, (short) UserType.STUDENT.code); + + return studentInfo; + } + + @Transactional + public void delete(Long id) { + StudentInfo studentInfo = new StudentInfo(); + studentInfo.setDeleted(true); + + studentInfoMapper.update(studentInfo, new QueryWrapper() + .eq("id", id) + ); + + userBasicService.deleteUser(id); + userInfoService.invalidateCache(id); + } + + @Transactional + public StudentInfo update(Long id, StudentUserInfoDTO dto) { + StudentInfo studentInfo = this.getById(id); + studentInfo.setStudentNumber(dto.number()); + studentInfo.setName(dto.name()); + studentInfo.setMajor(dto.major()); + studentInfo.setGrade(dto.grade()); + studentInfo.setClazz(dto.clazz()); + studentInfo.setEditTime(LocalDateTime.now()); + + studentInfoMapper.update(studentInfo, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + UserBasicInfoDTO userBasicInfoDTO = new UserBasicInfoDTO(id, dto.username(), dto.password(), (short) UserType.STUDENT.code); + userBasicService.updateUser(id, userBasicInfoDTO); + + return userInfoService.getAsStudent(id, false); + } + + @Transactional + public NewStudentDTO tryAddStudentFromOfficial(String studentNumber, String password) throws IOException { + String cacheToken = null; + try { + cacheToken = stringRedisTemplate.opsForValue().get(Constants.Redis.WusthelperTokenCacheKey.formatted(studentNumber)); + } catch (Exception e) { + log.error("err reading redis cache token", e); + } + + var token = cacheToken == null ? wusthelperApi.wusthelperLogin(studentNumber, password) : cacheToken; + try { + stringRedisTemplate.opsForValue().set(Constants.Redis.WusthelperTokenCacheKey.formatted(studentNumber), token); + } catch (Exception e) { + log.error("err writing redis cache token", e); + } + + var originInfo = wusthelperApi.getStudentInfo(token); + + String name = originInfo.getStuName(); + String majorName = originInfo.getMajor(); + String clazz = originInfo.getClasses(); + + var studentInfo = studentInfoMapper.selectOne(new QueryWrapper() + .eq("student_number", studentNumber) + .eq("deleted", false) + ); + + Long id; + if (studentInfo == null) { + id = YitIdHelper.nextId(); + studentInfo = StudentInfo.builder() + .id(id) + .studentNumber(studentNumber) + .name(name) + .grade(Integer.parseInt(studentNumber.substring(0, 4))) + .clazz(clazz) + .build(); + } else { + id = studentInfo.getId(); + } + + var major = majorService.addMajorIfNotExists(majorName); + studentInfo.setMajor(major.getId()); + studentInfoMapper.insertOrUpdate(studentInfo); + + var newUserBasic = userBasicService.addUser(id, studentNumber, password, (short) UserType.STUDENT.code); + + var newStudentInfo = userInfoService.getAsStudent(id, false); + + return new NewStudentDTO(newUserBasic, newStudentInfo); + } +} diff --git a/backend/src/main/java/rd/service/user/TeacherUserService.java b/backend/src/main/java/rd/service/user/TeacherUserService.java new file mode 100644 index 0000000..4b35fa4 --- /dev/null +++ b/backend/src/main/java/rd/service/user/TeacherUserService.java @@ -0,0 +1,141 @@ +package rd.service.user; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yitter.idgen.YitIdHelper; +import rd.dao.mapper.user.TeacherInfoMapper; +import rd.data.code.ServiceCode; +import rd.data.dto.user.UserBasicInfoDTO; +import rd.data.dto.user.teacher.TeacherUserDTO; +import rd.data.dto.user.teacher.TeacherUserInfoDTO; +import rd.data.db.table.TeacherInfo; +import rd.data.enums.UserType; +import rd.data.model.response.PaginationWrapper; +import rd.exception.ServiceException; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +public class TeacherUserService { + private final TeacherInfoMapper teacherInfoMapper; + + private final UserBasicService userBasicService; + private final UserInfoService userInfoService; + + public TeacherUserService(TeacherInfoMapper teacherInfoMapper, + UserBasicService userBasicService, + UserInfoService userInfoService) { + this.teacherInfoMapper = teacherInfoMapper; + this.userBasicService = userBasicService; + this.userInfoService = userInfoService; + } + + public PaginationWrapper> list(int page, int pageSize) { + if (pageSize == 0) { + pageSize = 1024; + } + + Page queryPage = new Page<>(page, pageSize); + var result = teacherInfoMapper.selectPage(queryPage, new QueryWrapper() + .select("id, name, create_time, edit_time") + .eq("deleted", false) + ); + + return new PaginationWrapper<>( + (int) result.getCurrent(), + (int) result.getSize(), + (int) result.getTotal(), + result.getRecords() + ); + } + + public TeacherInfo getInfo(Long id) { + var result = teacherInfoMapper.selectOne(new QueryWrapper() + .select("id, name, create_time, edit_time") + .eq("id", id) + .eq("deleted", false) + ); + + if (result == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return result; + } + + public TeacherUserInfoDTO getUserInfoById(Long id) { + var result = teacherInfoMapper.selectOne(new QueryWrapper() + .select("id, name, create_time, edit_time") + .eq("id", id) + .eq("deleted", false) + ); + + var userBasic = userBasicService.getUserBasicById(id); + + if (result == null || userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + return new TeacherUserInfoDTO(id, userBasic.getUsername(), result.getName()); + } + + public List getInfoById(List ids) { + if (ids.isEmpty()) { + return new ArrayList<>(); + } + + return userInfoService.getAsTeacher(ids); + } + + @Transactional + public TeacherInfo add(TeacherUserDTO dto) { + Long id = YitIdHelper.nextId(); + + TeacherInfo teacherInfo = new TeacherInfo(); + teacherInfo.setId(id); + teacherInfo.setName(dto.teacherName()); + + teacherInfoMapper.insert(teacherInfo); + + String username = (dto.username() == null) ? teacherInfo.getId().toString() : dto.username(); + String password = dto.password(); + userBasicService.addUser(id, username, password, (short) UserType.TEACHER.code); + + return userInfoService.getAsTeacher(id, false); + } + + @Transactional + public void delete(Long id) { + TeacherInfo teacherInfo = new TeacherInfo(); + teacherInfo.setDeleted(true); + + teacherInfoMapper.update(teacherInfo, new QueryWrapper() + .eq("id", id) + ); + + userBasicService.deleteUser(id); + userInfoService.invalidateCache(id); + } + + @Transactional + public TeacherInfo update(Long id, TeacherUserDTO dto) { + TeacherInfo teacherInfo = this.getInfo(id); + teacherInfo.setName(dto.teacherName()); + teacherInfo.setEditTime(LocalDateTime.now()); + + teacherInfoMapper.update(teacherInfo, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + UserBasicInfoDTO userBasicInfoDTO = new UserBasicInfoDTO(id, dto.username(), dto.password(), (short) UserType.TEACHER.code); + userBasicService.updateUser(id, userBasicInfoDTO); + + return userInfoService.getAsTeacher(id, false); + } +} diff --git a/backend/src/main/java/rd/service/user/UserBasicService.java b/backend/src/main/java/rd/service/user/UserBasicService.java new file mode 100644 index 0000000..570a23d --- /dev/null +++ b/backend/src/main/java/rd/service/user/UserBasicService.java @@ -0,0 +1,190 @@ +package rd.service.user; + +import cn.hutool.crypto.digest.BCrypt; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.github.yitter.idgen.YitIdHelper; +import lombok.extern.slf4j.Slf4j; +import rd.dao.mapper.user.UserBasicMapper; +import rd.data.code.ServiceCode; +import rd.data.dto.user.UserBasicInfoDTO; +import rd.data.db.table.UserBasic; + +import rd.exception.ServiceException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class UserBasicService { + private static final Cache usernameCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + private static final Cache idCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + private final UserBasicMapper userBasicMapper; + + public UserBasicService(UserBasicMapper userBasicMapper) { + this.userBasicMapper = userBasicMapper; + } + + public UserBasic getUserBasicByUsername(String username) { + UserBasic userBasic = usernameCache.getIfPresent(username); + if (userBasic != null) { + return userBasic; + } + + userBasic = userBasicMapper.selectOne( + new QueryWrapper() + .eq("username", username) + .eq("deleted", false) + .last("limit 1") + ); + + return putCache(userBasic); + } + + public UserBasic getUserBasicById(Long id) { + return getUserBasicById(id, true); + } + + public UserBasic getUserBasicById(Long id, boolean useCache) { + UserBasic userBasic = idCache.getIfPresent(id); + if (useCache && userBasic != null) { + return userBasic; + } + + userBasic = userBasicMapper.selectOne( + new QueryWrapper() + .select("id", "username", "password", "type") + .eq("id", id) + .eq("deleted", false) + .last("limit 1") + ); + + return putCache(userBasic); + } + + private UserBasic putCache(UserBasic userBasic) { + if (userBasic == null) { + return null; + } + + usernameCache.put(userBasic.getUsername(), userBasic); + idCache.put(userBasic.getId(), userBasic); + + return userBasic; + } + + public UserBasic addUser(String username, String password, short type) { + long id = YitIdHelper.nextId(); + return this.addUser(id, username, password, type); + } + + public UserBasic addUser(Long id, String username, String password, short type) { + var find = this.getUserBasicById(id); + + UserBasic userBasic = new UserBasic(); + if (find != null) { + String encryptedPassword = BCrypt.hashpw(password); + + userBasic.setId(id); + userBasic.setUsername(username); + userBasic.setPassword(encryptedPassword); + userBasic.setType(type); + + userBasicMapper.update(userBasic, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + } else { + // 默认密码同用户名 + if (password == null || password.isEmpty()) { + password = username; + } + + String encryptedPassword = BCrypt.hashpw(password); + + userBasic.setId(id); + userBasic.setUsername(username); + userBasic.setPassword(encryptedPassword); + userBasic.setType(type); + + userBasicMapper.insert(userBasic); + } + + putCache(userBasic); + return userBasic; + } + + @Transactional + public UserBasic updatePassword(Long uid, String newPassword) { + var userBasic = this.getUserBasicById(uid); + if (userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + String encryptedPassword = BCrypt.hashpw(newPassword); + + userBasic.setPassword(encryptedPassword); + userBasic.setEditTime(LocalDateTime.now()); + userBasicMapper.update(userBasic, new QueryWrapper() + .eq("id", uid) + .eq("deleted", false) + ); + + return this.getUserBasicById(uid, false); + } + + @Transactional + public UserBasic updateUser(Long id, UserBasicInfoDTO dto) { + var userBasic = this.getUserBasicById(id, false); + if (userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + String encryptedPassword = BCrypt.hashpw(dto.password()); + + userBasic.setId(id); + userBasic.setUsername(dto.username()); + userBasic.setPassword(encryptedPassword); + userBasic.setType(dto.type()); + userBasic.setEditTime(LocalDateTime.now()); + userBasicMapper.update(userBasic, new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + return this.getUserBasicById(id, false); + } + + public void deleteUser(Long id) { + UserBasic userBasic = this.getUserBasicById(id); + if (userBasic == null) { + throw ServiceException.error(ServiceCode.UserNotExists); + } + + userBasic.setDeleted(true); + userBasic.setEditTime(LocalDateTime.now()); + userBasicMapper.update(userBasic, new QueryWrapper() + .eq("id", id) + ); + + var cache = idCache.getIfPresent(id); + if (cache != null) { + usernameCache.invalidate(cache.getUsername()); + } + idCache.invalidate(id); + } +} diff --git a/backend/src/main/java/rd/service/user/UserInfoService.java b/backend/src/main/java/rd/service/user/UserInfoService.java new file mode 100644 index 0000000..7609e17 --- /dev/null +++ b/backend/src/main/java/rd/service/user/UserInfoService.java @@ -0,0 +1,108 @@ +package rd.service.user; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import lombok.extern.slf4j.Slf4j; +import rd.dao.mapper.user.StudentInfoMapper; +import rd.dao.mapper.user.TeacherInfoMapper; +import rd.data.code.ServiceCode; +import rd.data.db.table.StudentInfo; +import rd.data.db.table.TeacherInfo; +import rd.exception.ServiceException; + +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@Slf4j +@Service +public class UserInfoService { + + private static final Cache userInfoCache = Caffeine.newBuilder() + .expireAfterWrite(2, TimeUnit.DAYS) + .initialCapacity(256) + .maximumSize(2048) + .build(); + + private final StudentInfoMapper studentInfoMapper; + + private final TeacherInfoMapper teacherInfoMapper; + + public UserInfoService(StudentInfoMapper studentInfoMapper, TeacherInfoMapper teacherInfoMapper) { + this.studentInfoMapper = studentInfoMapper; + this.teacherInfoMapper = teacherInfoMapper; + } + + public void invalidateCache(Long id) { + userInfoCache.invalidate(id); + } + + public StudentInfo getAsStudent(Long id, boolean useCache) { + Object info = userInfoCache.getIfPresent(id); + if (useCache && info != null) { + log.debug("使用缓存的用户信息,用户id:{}", id); + return (StudentInfo) info; + } + + info = studentInfoMapper.selectOne(new QueryWrapper() + .eq("id", id) + .eq("deleted", false) + ); + + if (info == null) { + throw ServiceException.error( + ServiceCode.UserNotExists, + "账号信息存在,但是用户信息不存在,这种情况不应该出现,请联系管理员:lensfrex@qq.com" + ); + } + + userInfoCache.put(id, info); + return (StudentInfo) info; + } + + public StudentInfo getAsStudent(Long id) { + return getAsStudent(id, true); + } + + public TeacherInfo getAsTeacher(Long id, boolean useCache) { + Object info = userInfoCache.getIfPresent(id); + if (useCache && info != null) { + log.debug("使用缓存的用户信息,用户id:{}", id); + return (TeacherInfo) info; + } + + info = teacherInfoMapper.selectOne(new QueryWrapper() + .select("id", "name") + .eq("id", id) + .eq("deleted", false) + ); + + userInfoCache.put(id, info); + return (TeacherInfo) info; + } + + public TeacherInfo getAsTeacher(Long id) { + return getAsTeacher(id, true); + } + + public List getAsTeacher(List idList) { + var cached = userInfoCache.getAll(idList, keyList -> { + var teachers = teacherInfoMapper.selectList(new QueryWrapper() + .in("id", idList) + .eq("deleted", false) + ); + + Map teacherInfoMap = new HashMap<>(teachers.size()); + for (TeacherInfo teacher : teachers) { + teacherInfoMap.put(teacher.getId(), teacher); + } + return teacherInfoMap; + }); + + return cached.values().stream().map(obj -> (TeacherInfo) obj).toList(); + } +} diff --git a/backend/src/main/java/rd/util/StringUtil.java b/backend/src/main/java/rd/util/StringUtil.java new file mode 100644 index 0000000..216bf68 --- /dev/null +++ b/backend/src/main/java/rd/util/StringUtil.java @@ -0,0 +1,112 @@ +package rd.util; + +import org.apache.commons.codec.binary.Base64; + +import java.nio.charset.StandardCharsets; +import java.util.*; + +public class StringUtil { + + public static String NoneNullString(String str) { + return str == null ? "" : str; + } + + public static String NoneNullString(String str, String defaultStr) { + return str == null ? defaultStr : str; + } + + public static String getTermString(Date date, boolean autumn, boolean firstHalfTerm) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + + return getTermString(calendar, autumn, firstHalfTerm); + } + + public static String getTermString(Calendar calendar, boolean autumn, boolean firstHalfTerm) { + int year = calendar.get(Calendar.YEAR); + if (firstHalfTerm) { + year -= 1; + } + + int nextYear = year + 1; + + // 秋季期,就是第一个学期 + return String.format("%d-%d-%s", year, nextYear, autumn ? "1" : "2"); + } + + public static String getTermString(int year, boolean autumn, boolean firstHalf) { + if (firstHalf) { + year -= 1; + } + + int nextYear = year + 1; + + // 秋季期,就是第一个学期 + return String.format("%d-%d-%s", year, nextYear, autumn ? "1" : "2"); + } + + public static String getCurrentTermString() { + Calendar now = Calendar.getInstance(); + int month = now.get(Calendar.MONTH) + 1; + + return getTermString(now, month >= 8 || month < 2, month < 2); + } + + static public List split(String source, char gap) { + List result = new ArrayList<>(4); + char[] sourceChars = source.toCharArray(); + + int startIndex = 0; + for (int index = -1; ++index != sourceChars.length; ) { + if (sourceChars[index] != gap) { + continue; + } + result.add(source.substring(startIndex, index)); + startIndex = index + 1; + } + + result.add(source.substring(startIndex, sourceChars.length)); + + return result; + } + + /** + * 清除字符串中的html(xml)标签,其中`<br>`被替换为换行`\n` + * + * @param raw 原始字符串 + * @return 处理后的字符串 + */ + public static String cleanHtml(String raw) { + return cleanHtml(raw, true); + } + + /** + * 清除字符串中的html(xml)标签,并指定`<br>`是否要替换为换行符`\n` + * + * @param raw 原始字符串 + * @param withBreakLine 是否将换行标签`<br>`替换成换行符`\n` + * @return 处理后的字符串 + */ + public static String cleanHtml(String raw, boolean withBreakLine) { + if (withBreakLine) { + raw = raw.replaceAll("
", "\n"); + } + + return raw.replaceAll("<.*?>", ""); + } + + /** + * 解析转换字符串,如果出现任何问题,则返回给定的默认值 + * + * @param string 待转换字符串 + * @param defaultValue 默认值 + * @return 转换后的int值,若转换中出现问题,则返回默认值 + */ + public static int parseInt(String string, int defaultValue) { + try { + return Integer.parseInt(string); + } catch (Exception e) { + return defaultValue; + } + } +} diff --git a/backend/src/main/resources/application-dev.yml b/backend/src/main/resources/application-dev.yml new file mode 100644 index 0000000..f1ca395 --- /dev/null +++ b/backend/src/main/resources/application-dev.yml @@ -0,0 +1,51 @@ + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl + mapper-locations: classpath*:/mapper/**/*.xml + +logging: + level: + rd: debug + druid.sql.Statement: trace + pattern: + console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}" + file: "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}" + +spring: + task: + execution: + pool: + core-size: 16 + max-size: 32 + queue-capacity: 128 + keep-alive: 90s + devtools: + restart: + enabled: true + data: + redis: + client-name: neolaf + host: 127.0.0.1 + port: 6379 + password: Test2333! + database: 0 + + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://127.0.0.1:5432/little_busters?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai + username: postgres + password: Test2333! + +server: + address: 127.0.0.1 + port: 8800 + servlet: + context-path: / + +sa-token: + token-name: auth-token + is-concurrent: true + +rd: + WusthelperBaseUrl: https://wusthelper.wustlinghang.cn/mobileapi/v2 diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml new file mode 100644 index 0000000..5e1925e --- /dev/null +++ b/backend/src/main/resources/application.yml @@ -0,0 +1,50 @@ + +mybatis-plus: + configuration: + log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl + mapper-locations: classpath*:/mapper/**/*.xml + +logging: + level: + rd: debug + pattern: + console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}" + file: "%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}" + +spring: + task: + execution: + pool: + core-size: 16 + max-size: 32 + queue-capacity: 128 + keep-alive: 90s + devtools: + restart: + enabled: true + data: + redis: + client-name: rdrev + host: ciduid.top + port: 55640 + password: 9caf3200c5cc5a0e7a87f7e3a1616a8db7b5084d0085cb81b2001ec0f08474fc24ee5294f10ec3c89c5e6a9285f063aa + database: 0 + + datasource: + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://ciduid.top:55642/rdrev?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai + username: postgres + password: a7d929f76d45d13a4337f2d16f5634bc17e5b8b2 + +server: + address: 0.0.0.0 + port: 8800 + servlet: + context-path: / + +sa-token: + token-name: auth-token + is-concurrent: true + +rd: + WusthelperBaseUrl: https://wusthelper.wustlinghang.cn/mobileapi/v2 diff --git a/backend/src/main/resources/logback.xml b/backend/src/main/resources/logback.xml new file mode 100644 index 0000000..5922551 --- /dev/null +++ b/backend/src/main/resources/logback.xml @@ -0,0 +1,54 @@ + + + + + + RadicalDreamers + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + + + + + ${FILE_LOG_PATTERN} + + + + ${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log.gz + 365 + 128MB + + + true + + + + 5000 + 0 + false + + + + + + + + + \ No newline at end of file diff --git a/backend/src/main/resources/mapper/ActivityMapper.xml b/backend/src/main/resources/mapper/ActivityMapper.xml new file mode 100644 index 0000000..e72b877 --- /dev/null +++ b/backend/src/main/resources/mapper/ActivityMapper.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/backend/src/main/resources/mapper/ActivityTargetMapper.xml b/backend/src/main/resources/mapper/ActivityTargetMapper.xml new file mode 100644 index 0000000..106425f --- /dev/null +++ b/backend/src/main/resources/mapper/ActivityTargetMapper.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/backend/src/main/resources/mapper/CourseMapper.xml b/backend/src/main/resources/mapper/CourseMapper.xml new file mode 100644 index 0000000..42925aa --- /dev/null +++ b/backend/src/main/resources/mapper/CourseMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + diff --git a/backend/src/main/resources/mapper/CourseScheduleMapper.xml b/backend/src/main/resources/mapper/CourseScheduleMapper.xml new file mode 100644 index 0000000..e6b9cca --- /dev/null +++ b/backend/src/main/resources/mapper/CourseScheduleMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + c.id course_id, c."name" course_name, array_agg(ti."name") teachers, c.course_hours, c.spring_term, c.target_major, c.target_grade, + cs.id schedule_id, cs.start_week, cs.end_week, cs.time, cs.academic_term, cs.place, cs.ratio + + + + + + + + + diff --git a/backend/src/main/resources/mapper/CourseSelectionMapper.xml b/backend/src/main/resources/mapper/CourseSelectionMapper.xml new file mode 100644 index 0000000..980d7cf --- /dev/null +++ b/backend/src/main/resources/mapper/CourseSelectionMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + diff --git a/backend/src/main/resources/mapper/CourseTeacherMapper.xml b/backend/src/main/resources/mapper/CourseTeacherMapper.xml new file mode 100644 index 0000000..3040414 --- /dev/null +++ b/backend/src/main/resources/mapper/CourseTeacherMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + diff --git a/backend/src/main/resources/mapper/ScoreMapper.xml b/backend/src/main/resources/mapper/ScoreMapper.xml new file mode 100644 index 0000000..cb01f5f --- /dev/null +++ b/backend/src/main/resources/mapper/ScoreMapper.xml @@ -0,0 +1,50 @@ + + + + + insert into score ("id", "student", "usual_score", "exam_score", "exam_ratio", "course", "term") + values (#{score.id}, #{score.student}, #{score.usualScore}, #{score.examScore}, #{score.examRatio}, #{score.course}, #{score.term}) + on conflict (student, course, term) + do update set (usual_score, exam_score, exam_ratio) = (excluded.usual_score, excluded.exam_score, excluded.exam_ratio) + + + + + + + + + + + + + + + diff --git a/backend/src/main/resources/mapper/StudentInfoMapper.xml b/backend/src/main/resources/mapper/StudentInfoMapper.xml new file mode 100644 index 0000000..402d5d9 --- /dev/null +++ b/backend/src/main/resources/mapper/StudentInfoMapper.xml @@ -0,0 +1,9 @@ + + + + + insert into student_info (id, student_number, "name", major, grade, class) + values (#{student.id}, #{student.studentNumber}, #{student.name}, #{student.major}, #{student.grade}, #{student.clazz}) + on conflict (id, student_number) do update set (id, student_number, "name", major, grade, class) = (#{student.id}, #{student.studentNumber}, #{student.name}, #{student.major}, #{student.grade}, #{student.clazz}) + + diff --git a/backend/src/main/resources/template_score.xlsx b/backend/src/main/resources/template_score.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..105e905e26b820f3f98473f1de336268e1d9e40f GIT binary patch literal 10778 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 literal 0 HcmV?d00001 diff --git a/backend/src/main/resources/template_student_list.xlsx b/backend/src/main/resources/template_student_list.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d7f91d6b093e1cea0195820a3477d1af653c9fb0 GIT binary patch literal 10613 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 literal 0 HcmV?d00001 diff --git a/backend/src/main/resources/template_student_list_not_selected.xlsx b/backend/src/main/resources/template_student_list_not_selected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8163e532f5fc5cc94024fa39b7c1d9ab6150d1f8 GIT binary patch literal 10674 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 F{{aqUf9?PP literal 0 HcmV?d00001 diff --git a/doc/features.md b/doc/features.md new file mode 100644 index 0000000..6a0d16d --- /dev/null +++ b/doc/features.md @@ -0,0 +1,48 @@ +# 功能详情 + +设定信息: + - 课程:一门课 + - *课堂*:实际上课的一门课程,即具体安排的一门课,同一个课程的不同时间安排,就是一个*课堂* + - 选课:实际上就是在选课活动的时间内,学生对*课堂*的选择 + - 选课活动:一个学期的选课活动,在选课时间段内学生可以进行任意的选课,设定当前选课活动中的专业对象,其对应课程在查看待选*课堂*时进行筛选 + +> 选课信息是实时的,不需要等待选课活动结束才能得到名单,也可以立即导出,在选课活动结束后只是学生不能再进行选课以及修改 + +管理员可以设定课程(一门课的信息),并且指定上这门课的老师,而具体的上课信息(上课地点,学期,节次等)需要设置这门课程上课安排。 + +在选课活动进行中时,需要设置活动对象,指定在该活动中可以进行选择的年级和专业,以及可选的课程,只有符合条件的学生,才能选择指定课程的上课安排。 + +在同一个时间段内,只能有一个进行中的活动,即每个活动的时间不能有重叠。 + +管理员的用户名为root,初始默认密码:root,其他由管理员手动添加的账号信息默认情况下均与用户名相同,可在进入后修改。 +学生账号可以直接使用武科大本科生系统的账号密码直接登入,会自动创号。 + +## 用户(学生) + +1. 学生进入网页,使用教务处账号登录认证,获取学生信息,进入系统 +2. 进入系统后可自动获取显示自己专业自己年级待选的实验课列表 +3. 在选课时间段内,可点击相应的实验课后查看可选则的时间段。选择相应的时间段 +4. 在选课时间段内,可以任意更改所选课程的时间段。 +5. 选课结束后,可以查看已选择的时间 +6. 课程结束后,可以按课程查看分数详情,包括平时分和考试分以及最后总分。 + +## 教师 + +1. 教师账号通过管理员手动添加 +2. 教师登陆后可以查看自己教授的课程, +3. 查看自己教的课程列表,可以查看该课程相应的*课堂*,进而可以查看*课堂*信息(选课人数,时间等),包括学生名单,并将其导出为excel +4. 教师可以按照*课堂*对全班学生进行成绩登记,包括平时成绩与考试成绩,管理员设定该*课堂*的成绩占比后可以立即计算所有学生的最终成绩,并将其导出excel +5. 教师仍可以查看往期*课堂*的信息,包括学生名单和全班成绩信息等 + +## 管理员 + +1. 管理员是负责对*课堂*、课程等信息进行管理的用户 +2. 管理员可以增删查改*课堂*、课程信息,设定相应的参数信息。 +3. 由管理员发布选课活动,设定*课堂*的成绩比例 +4. 管理员可以查看所有信息(学生+教师) +5. 管理员也可查看未完整进行选课(一个或多个课程仍未进行选课)的学生列表(需要提前导入学生列表) + +一些信息的参数: + - 选课活动:名称,学年学期(如2023-2024-1),目标年级(多选),目标专业(多选),开始时间,结束时间 + - 课程:名称,课时,目标年级(多选),目标专业(多选) + - *课堂*:对应课程id,起始周,上课时间(12345678节等等),上课地点,成绩占比 diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/frontend/.eslintignore b/frontend/.eslintignore new file mode 100644 index 0000000..f78c8ac --- /dev/null +++ b/frontend/.eslintignore @@ -0,0 +1,7 @@ +/dist +/src-capacitor +/src-cordova +/.quasar +/node_modules +.eslintrc.js +/quasar.config.*.temporary.compiled* diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000..103f97b --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,66 @@ +module.exports = { + // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy + // This option interrupts the configuration hierarchy at this file + // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos) + root: true, + + parserOptions: { + ecmaVersion: 2021, // Allows for the parsing of modern ECMAScript features + }, + + env: { + node: true, + browser: true, + 'vue/setup-compiler-macros': true + }, + + // Rules order is important, please avoid shuffling them + extends: [ + // Base ESLint recommended rules + // 'eslint:recommended', + + // Uncomment any of the lines below to choose desired strictness, + // but leave only one uncommented! + // See https://eslint.vuejs.org/rules/#available-rules + 'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention) + // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability) + // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead) + + // https://github.com/prettier/eslint-config-prettier#installation + // usage with Prettier, provided by 'eslint-config-prettier'. + 'prettier' + ], + + plugins: [ + // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-files + // required to lint *.vue files + 'vue', + + // https://github.com/typescript-eslint/typescript-eslint/issues/389#issuecomment-509292674 + // Prettier has not been included as plugin to avoid performance impact + // add it as an extension for your IDE + + ], + + globals: { + ga: 'readonly', // Google Analytics + cordova: 'readonly', + __statics: 'readonly', + __QUASAR_SSR__: 'readonly', + __QUASAR_SSR_SERVER__: 'readonly', + __QUASAR_SSR_CLIENT__: 'readonly', + __QUASAR_SSR_PWA__: 'readonly', + process: 'readonly', + Capacitor: 'readonly', + chrome: 'readonly' + }, + + // add your custom rules here + rules: { + + 'prefer-promise-reject-errors': 'off', + + // allow debugger during development only + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' + } +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..f1d913c --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,33 @@ +.DS_Store +.thumbs.db +node_modules + +# Quasar core related directories +.quasar +/dist +/quasar.config.*.temporary.compiled* + +# Cordova related directories and files +/src-cordova/node_modules +/src-cordova/platforms +/src-cordova/plugins +/src-cordova/www + +# Capacitor related directories and files +/src-capacitor/www +/src-capacitor/node_modules + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln + +# local .env files +.env.local* diff --git a/frontend/.npmrc b/frontend/.npmrc new file mode 100644 index 0000000..32bd84d --- /dev/null +++ b/frontend/.npmrc @@ -0,0 +1,3 @@ +# pnpm-related options +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/frontend/config.js b/frontend/config.js new file mode 100644 index 0000000..c45c04b --- /dev/null +++ b/frontend/config.js @@ -0,0 +1,4 @@ +export default { + // backendBaseUrl: 'http://127.0.0.1:8800', + backendBaseUrl: '', +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..480c1b6 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,20 @@ + + + + <%= productName %> + + + + + + + + + + + + + + + + diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json new file mode 100644 index 0000000..c8e8f37 --- /dev/null +++ b/frontend/jsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "app/*": [ + "*" + ], + "components/*": [ + "src/components/*" + ], + "layouts/*": [ + "src/layouts/*" + ], + "pages/*": [ + "src/pages/*" + ], + "assets/*": [ + "src/assets/*" + ], + "boot/*": [ + "src/boot/*" + ], + "stores/*": [ + "src/stores/*" + ], + "vue$": [ + "node_modules/vue/dist/vue.runtime.esm-bundler.js" + ] + } + }, + "exclude": [ + "dist", + ".quasar", + "node_modules" + ] +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..aaebc29 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,9067 @@ +{ + "name": "radical-dreamers-fe", + "version": "0.0.1-beta", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "radical-dreamers-fe", + "version": "0.0.1-beta", + "dependencies": { + "@quasar/extras": "^1.16.6", + "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16", + "axios": "^1.5.0", + "axios-retry": "^3.7.0", + "dayjs": "^1.11.9", + "pinia": "^2.1.6", + "qs": "^6.11.2", + "quasar": "^2.12.6", + "stylus": "^0.60.0", + "vue": "^3.3.4", + "vue-router": "^4.2.4", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz" + }, + "devDependencies": { + "@quasar/app-vite": "^1.5.0", + "@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.16", + "@quasar/vite-plugin": "^1.4.1", + "autoprefixer": "^10.4.15", + "eslint": "^8.48.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-vue": "^9.17.0", + "postcss": "^8.4.29", + "prettier": "^3.0.3", + "tailwindcss": "^3.3.3", + "workbox-build": "^7.0.0", + "workbox-cacheable-response": "^7.0.0", + "workbox-core": "^7.0.0", + "workbox-expiration": "^7.0.0", + "workbox-precaching": "^7.0.0", + "workbox-routing": "^7.0.0", + "workbox-strategies": "^7.0.0" + }, + "engines": { + "node": "^20 || ^19 || ^18 || ^16 || ^14.19", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.2.0.tgz", + "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.22.11.tgz", + "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.11", + "@babel/parser": "^7.22.11", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", + "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "dev": true, + "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.5", + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "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" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.11.tgz", + "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.11", + "@babel/types": "^7.22.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.13", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.13.tgz", + "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.14", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.14.tgz", + "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "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.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", + "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "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==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@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.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", + "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", + "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.12", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", + "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "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==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.14", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.14.tgz", + "integrity": "sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@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.22.11", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@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.5", + "@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.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.11", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", + "@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.11", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.12", + "@babel/plugin-transform-parameters": "^7.22.5", + "@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.22.11", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.11.tgz", + "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.11", + "@babel/types": "^7.22.11", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.22.11", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "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==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@quasar/app-vite": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@quasar/app-vite/-/app-vite-1.5.0.tgz", + "integrity": "sha512-iopq5UFtXHXrSlPoWj3dmlpnQ79c/dc5FCspAr07V3bLbICNTOEAPzxTuxja8W/bGXGBkQp2IY7k86W3iNuOVw==", + "dev": true, + "dependencies": { + "@quasar/render-ssr-error": "^1.0.1", + "@quasar/vite-plugin": "^1.3.3", + "@rollup/pluginutils": "^4.1.2", + "@types/chrome": "^0.0.208", + "@types/compression": "^1.7.2", + "@types/cordova": "0.0.34", + "@types/express": "^4.17.13", + "@vitejs/plugin-vue": "^2.2.0", + "archiver": "^5.3.0", + "chokidar": "^3.5.3", + "ci-info": "^3.7.1", + "compression": "^1.7.4", + "cross-spawn": "^7.0.3", + "dot-prop": "6.0.1", + "elementtree": "0.1.7", + "esbuild": "0.14.51", + "express": "^4.17.3", + "fast-glob": "3.2.12", + "fs-extra": "^11.1.0", + "html-minifier": "^4.0.0", + "inquirer": "^8.2.1", + "isbinaryfile": "^5.0.0", + "kolorist": "^1.5.1", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "open": "^8.4.0", + "register-service-worker": "^1.7.2", + "rollup-plugin-visualizer": "^5.5.4", + "sass": "1.32.12", + "semver": "^7.3.5", + "serialize-javascript": "^6.0.0", + "table": "^6.8.0", + "vite": "^2.9.13", + "webpack-merge": "^5.8.0" + }, + "bin": { + "quasar": "bin/quasar" + }, + "engines": { + "node": "^24 || ^22 || ^20 || ^18 || ^16 || ^14.19", + "npm": ">= 6.14.12", + "yarn": ">= 1.17.3" + }, + "peerDependencies": { + "electron-builder": ">= 22", + "electron-packager": ">= 15", + "eslint": "^8.11.0", + "pinia": "^2.0.0", + "quasar": "^2.8.0", + "vue": "^3.2.29", + "vue-router": "^4.0.12", + "vuex": "^4.0.0", + "workbox-build": "^6.5.0" + }, + "peerDependenciesMeta": { + "electron-builder": { + "optional": true + }, + "electron-packager": { + "optional": true + }, + "eslint": { + "optional": true + }, + "pinia": { + "optional": true + }, + "vuex": { + "optional": true + }, + "workbox-build": { + "optional": true + } + } + }, + "node_modules/@quasar/extras": { + "version": "1.16.6", + "resolved": "https://registry.npmmirror.com/@quasar/extras/-/extras-1.16.6.tgz", + "integrity": "sha512-yHvp2Z73LuS29fhjE+dSzUvEKGCuTTy+WGIsAYxbnhBVW2rTYlYmFQfGdOPdzNreHZh+G/1D56n0Q6ClZxJHKg==" + }, + "node_modules/@quasar/quasar-app-extension-qcalendar": { + "version": "4.0.0-beta.16", + "resolved": "https://registry.npmmirror.com/@quasar/quasar-app-extension-qcalendar/-/quasar-app-extension-qcalendar-4.0.0-beta.16.tgz", + "integrity": "sha512-Rj3KKjPFrE13cswlZAPcqdqi1YH9CeHMpWIw8xsNqdLhCoaRhMGbRas9fvHFLJOXpnsDaVwWINNgN/bBUyn99w==", + "dev": true, + "dependencies": { + "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 5.6.0", + "yarn": ">= 1.6.0" + } + }, + "node_modules/@quasar/quasar-ui-qcalendar": { + "version": "4.0.0-beta.16", + "resolved": "https://mirrors.cloud.tencent.com/npm/@quasar/quasar-ui-qcalendar/-/quasar-ui-qcalendar-4.0.0-beta.16.tgz", + "integrity": "sha512-KVbFJD1HQp91tiklv+6XsG7bq8FKK6mhhnoVzmjgoyhUAEb9csfbDPbpegy1/FzXy3o0wITe6mmRZ8nbaiMEZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/hawkeye64" + } + }, + "node_modules/@quasar/render-ssr-error": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@quasar/render-ssr-error/-/render-ssr-error-1.0.2.tgz", + "integrity": "sha512-Y0wyqYHVxc1IOBH6pRiKMSWDqO1mwQu11Zo8rw4cBdclPOQqFb7f65UuRbk5LfbqlXV2hYvklNcy0SBAOiAQnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "stack-trace": "^1.0.0-pre2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@quasar/vite-plugin": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@quasar/vite-plugin/-/vite-plugin-1.4.1.tgz", + "integrity": "sha512-lLw7j1A7viLQ6++p29NuYUdfjpaWctRi6tRhMYm8VPumXs8enGeV59JEJ+1tJR2FcQUMYsGOoyHHcQrsakXIkA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "peerDependencies": { + "@vitejs/plugin-vue": "^2.0.0 || ^3.0.0 || ^4.0.0", + "quasar": "^2.8.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rollup/plugin-replace/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/chrome": { + "version": "0.0.208", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/chrome/-/chrome-0.0.208.tgz", + "integrity": "sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, + "node_modules/@types/compression": { + "version": "1.7.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/compression/-/compression-1.7.2.tgz", + "integrity": "sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cordova": { + "version": "0.0.34", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/filesystem": { + "version": "0.0.32", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/filesystem/-/filesystem-0.0.32.tgz", + "integrity": "sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.29", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/filewriter/-/filewriter-0.0.29.tgz", + "integrity": "sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/har-format": { + "version": "1.2.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/har-format/-/har-format-1.2.11.tgz", + "integrity": "sha512-T232/TneofqK30AD1LRrrf8KnjLvzrjWDp7eWST5KoiSzrBfRsLrWDPk4STQPW4NZG6v2MltnduBVmakbZOBIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.4.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/node/-/node-20.4.5.tgz", + "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "2.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.5.10", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "license": "MIT", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true, + "license": "MIT" + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.15", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz", + "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001520", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axios": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-retry": { + "version": "3.7.0", + "resolved": "https://registry.npmmirror.com/axios-retry/-/axios-retry-3.7.0.tgz", + "integrity": "sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ==", + "dependencies": { + "@babel/runtime": "^7.15.4", + "is-retry-allowed": "^2.2.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://mirrors.cloud.tencent.com/npm/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001525", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", + "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://mirrors.cloud.tencent.com/npm/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.32.1", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.1.tgz", + "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.10" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.9", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz", + "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.480", + "resolved": "https://mirrors.cloud.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.4.480.tgz", + "integrity": "sha512-IXTgg+bITkQv/FLP9FjX6f9KFCs5hQWeh5uNSKxB9mqYj/JXhHDbu+ekS43LVvbkL3eW6/oZy4+r9Om6lan1Uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/elementtree": { + "version": "0.1.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.14.51", + "resolved": "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.14.51.tgz", + "integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.51", + "esbuild-android-arm64": "0.14.51", + "esbuild-darwin-64": "0.14.51", + "esbuild-darwin-arm64": "0.14.51", + "esbuild-freebsd-64": "0.14.51", + "esbuild-freebsd-arm64": "0.14.51", + "esbuild-linux-32": "0.14.51", + "esbuild-linux-64": "0.14.51", + "esbuild-linux-arm": "0.14.51", + "esbuild-linux-arm64": "0.14.51", + "esbuild-linux-mips64le": "0.14.51", + "esbuild-linux-ppc64le": "0.14.51", + "esbuild-linux-riscv64": "0.14.51", + "esbuild-linux-s390x": "0.14.51", + "esbuild-netbsd-64": "0.14.51", + "esbuild-openbsd-64": "0.14.51", + "esbuild-sunos-64": "0.14.51", + "esbuild-windows-32": "0.14.51", + "esbuild-windows-64": "0.14.51", + "esbuild-windows-arm64": "0.14.51" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://mirrors.cloud.tencent.com/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.48.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "node_modules/gensync": { + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-minifier": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://mirrors.cloud.tencent.com/npm/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/isbinaryfile/-/isbinaryfile-5.0.0.tgz", + "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jiti": { + "version": "1.19.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/jiti/-/jiti-1.19.1.tgz", + "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "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==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/magic-string/-/magic-string-0.30.2.tgz", + "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://mirrors.cloud.tencent.com/npm/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "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==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinia": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.1.6.tgz", + "integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.29", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quasar": { + "version": "2.12.6", + "resolved": "https://registry.npmmirror.com/quasar/-/quasar-2.12.6.tgz", + "integrity": "sha512-C4rDMzRu+onIP+4f8WrXUJYqMZ7KsZZewU5zjxCPHQqDVKAWNbfqePN/4ME42PZ3u5C26J9eLLW32rc/vEXXfg==", + "engines": { + "node": ">= 10.18.1", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/register-service-worker": { + "version": "1.7.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/register-service-worker/-/register-service-worker-1.7.2.tgz", + "integrity": "sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/resolve/-/resolve-1.22.3.tgz", + "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.12.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.77.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.9.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz", + "integrity": "sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.4.0", + "picomatch": "^2.3.1", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.32.12", + "resolved": "https://mirrors.cloud.tencent.com/npm/sass/-/sass-1.32.12.tgz", + "integrity": "sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sax": { + "version": "1.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/sax/-/sax-1.1.4.tgz", + "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=", + "dev": true, + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "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==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://mirrors.cloud.tencent.com/npm/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.9", + "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", + "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylus": { + "version": "0.60.0", + "resolved": "https://registry.npmmirror.com/stylus/-/stylus-0.60.0.tgz", + "integrity": "sha512-j2pBgEwzCu05yCuY4cmyp0FtPQQFBBAGB7TY7QaNl7eztiHwkxzwvIp5vjZJND/a1JNOka+ZW9ewVPFZpI3pcA==", + "dependencies": { + "@adobe/css-tools": "~4.2.0", + "debug": "^4.3.2", + "glob": "^7.1.6", + "sax": "~1.2.4", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stylus/node_modules/debug": { + "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" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/stylus/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/stylus/node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.19.3", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.19.3.tgz", + "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://mirrors.cloud.tencent.com/npm/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "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==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "2.9.16", + "resolved": "https://mirrors.cloud.tencent.com/npm/vite/-/vite-2.9.16.tgz", + "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": ">=2.59.0 <2.78.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/vite/node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://mirrors.cloud.tencent.com/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vue": { + "version": "3.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", + "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/vue-router/-/vue-router-4.2.4.tgz", + "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-background-sync": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-build": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-core": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "license": "ISC" + }, + "node_modules/xlsx": { + "version": "0.20.0", + "resolved": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz", + "integrity": "sha512-adg5edVTkXXGTnb0iWrc3Z47ViGgwmD47yx6VfSCZhfdKPtHcElYGs48OtcO4nwOu90Pjz5mmyl0HLcvbSRYTQ==", + "license": "Apache-2.0", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..7a7d814 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,56 @@ +{ + "name": "radical-dreamers-fe", + "version": "0.0.1-beta", + "description": "一个普普通通的选课", + "productName": "RadicalDreamers", + "author": "lensfrex ", + "private": true, + "scripts": { + "lint": "eslint --ext .js,.vue ./", + "format": "prettier --write \"**/*.{js,vue,scss,html,md,json}\" --ignore-path .gitignore", + "test": "echo \"No test specified\" && exit 0", + "dev": "quasar dev", + "build": "quasar build" + }, + "dependencies": { + "@quasar/extras": "^1.16.6", + "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16", + "axios": "^1.5.0", + "axios-retry": "^3.7.0", + "dayjs": "^1.11.9", + "isnumber": "^1.0.0", + "pinia": "^2.1.6", + "pinia-plugin-persistedstate": "^3.2.1", + "qs": "^6.11.2", + "quasar": "^2.12.6", + "stylus": "^0.60.0", + "vue": "^3.4.30", + "vue-router": "^4.2.4", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz" + }, + "devDependencies": { + "@quasar/app-vite": "^1.5.0", + "@quasar/quasar-app-extension-qcalendar": "^4.0.0-beta.16", + "@quasar/vite-plugin": "^1.4.1", + "autoprefixer": "^10.4.15", + "eslint": "^8.48.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-vue": "^9.17.0", + "postcss": "^8.4.29", + "prettier": "^3.0.3", + "tailwindcss": "^3.3.3", + "workbox-build": "^7.0.0", + "workbox-cacheable-response": "^7.0.0", + "workbox-core": "^7.0.0", + "workbox-expiration": "^7.0.0", + "workbox-precaching": "^7.0.0", + "workbox-routing": "^7.0.0", + "workbox-strategies": "^7.0.0" + }, + "engines": { + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" +} + diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs new file mode 100644 index 0000000..7e6e8ea --- /dev/null +++ b/frontend/postcss.config.cjs @@ -0,0 +1,28 @@ +/* eslint-disable */ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + plugins: [ + // https://github.com/postcss/autoprefixer + require('autoprefixer')({ + overrideBrowserslist: [ + 'last 4 Chrome versions', + 'last 4 Firefox versions', + 'last 4 Edge versions', + 'last 4 Safari versions', + 'last 4 Android versions', + 'last 4 ChromeAndroid versions', + 'last 4 FirefoxAndroid versions', + 'last 4 iOS versions' + ] + }), + require('tailwindcss') + + // https://github.com/elchininet/postcss-rtlcss + // If you want to support RTL css, then + // 1. yarn/npm install postcss-rtlcss + // 2. optionally set quasar.config.js > framework > lang to an RTL language + // 3. uncomment the following line: + // require('postcss-rtlcss') + ] +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ad0af3d0369d0eef33b346d905b964a7ae6d0a13 GIT binary patch literal 270398 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 XHGfj`j|F^jZ$SEZ{(nhP&Jq6)8bwz* literal 0 HcmV?d00001 diff --git a/frontend/public/icons/apple-icon-120x120.png b/frontend/public/icons/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..245e05e7f497d4214faa886f50ea22f0862b2aa5 GIT binary patch literal 4762 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/apple-icon-152x152.png b/frontend/public/icons/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae35a82333f7c555df5460dfbadb2f5b0cc6632 GIT binary patch literal 5765 zcmchb_d6SI)bN8CvBj)C5~^0z96000ySEj8nNo%jERgy{Zd>f_|PS9t!$ znks<03D!LTfI$(VrfeFFJhTA?o2s`ew8`zo#X(jO!^MC_RVHc&P&5f;UlNTu6FxaP z>DO5tJlw6{(MN5F(2{j%N1k4T?U@73Q<~{~saN@Ui;QSCd=Lmk%?Yw3v6O|cecac+ zWN7R37Lf|4)epD*GTPm?Z@SWRs}Q(9=SSEZMN*X%Rr210E{y~LCP$P!!q!= zc?Y|(KdGueynrVVoHh)5B?o5+*ataj9v zAh;)BSp`|@s^RNW!Cg=m7bFl56gY6_<`m?wJ4*_V57%SF2%=oD`%P3@O^m zJ@S{Z5G2&q&sro`M7HY+!{;+=j4_>kpvLEV?_e)l-5HbL7F-E{-(IdqdAN40rvZ4y zfQgzaK59U5b8*%AO1mLINoRL)zvtQ+#P`lTQrk{w$*#$U3q1aTTs1}}*8gyrd}Jy# zNWEN*ta0by%RtYkg&Eqw+~Cg~ue5c}ns@b+|Ajo5*q0diEn<0jyPje=Dte05w1Zn`_aiJdk*dmD}Xy~1TLg(FoxD_8|AvTIpR*A0ft`aDCyhlC6&X(F7 z9F-lkNb>CLIOTb*Vg_?rB(=mJ)YEhPX#ME!3j6XAjS_C;0BwVxK28qlYlKwRxWCh$ za{!Fx(wVoh5czG%u%JV&G�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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/apple-icon-167x167.png b/frontend/public/icons/apple-icon-167x167.png new file mode 100644 index 0000000000000000000000000000000000000000..8051acf6ec17a619aba12e7be05b42cdea5d9606 GIT binary patch literal 6644 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/apple-icon-180x180.png b/frontend/public/icons/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..92e9000aac05b2266a00403654dc6ea856cebb3d GIT binary patch literal 7179 zcmdT}CDV?<~=j-iPY11LHvmB5dZ)n)=*b{{b1|=TllySyWA+Q=z{@% zdHq5eP&LM|3jomfX{ah0K+MtayuVVYodskKDUl^;ktM{%VUw{0=9UEF2c0UvB2~j! zdIb#st3#Dt>%-$$TC){So9e3m@I|fiwSv}K>e&AA@eLL|X60k$V8si{OuWt(QYk@(}SZGUxrYY9|k8=sI!`A@7dA+s5 zu?K+l{}?=5tG~>Bq7)0wJqQGc+9&bhBLEwRvg#8Rpo6-KPliTruc4@a=1Q9)I_Ijc z@l<|#yzRLT6@t4&By6C1aw+oMkZmk=Y(SM8Gz`kTv#^)(;`{5<4+fLM*;J%dKZXgl zYl`PS#pPJ^AFqVlGI@Ep2W`H^3aHxM%lsf@h6NbF%6f;rqnN7aa_x*2SUjhz3#CpJ z6*X*UxLaX|z$yoDbA%SUbEqqCiDNavNj(ZF9TQ$OM;w4f@|`_4MZDHfd<2umAQ0hY z)3-2SJDEq>=OM*3vk~0fWbTwt*>`$k)neCJk@sgLb2rJy%z-X6EWEW++ur^OK+9fz z^908=S+MDX%F?ioLQHrd!ZlSZ%tw<>1)g`+8Cad8qSEbQ%ywWC6h zSovvUPh}-NnzD3*nMWCMQ{E{f<5@9k%lCO!y^=L}wnjPH*>C^ZOv2QDf#Hpz*a>3e z+4i6OOorz5`YEaIwl+@;wBq}FE8Li8A1zX%MDT`RZi?0F^LSE` zlaX0^Itz}+!eIgdShDR7g!}=@-=2ZIpy>d{v=sobHOFm&ctP0VnlDKfdyMG#ZR;9!ALRGcvFp1(W)03_r<;f73d_Twj zZz3imh$`HOctO~4kx+tuvG7y<>CKle+y3-=eBT^zWB(tKIRk84!r656cwfjc2Np!c zd;(PV4vyO&jWWBFq`S7@vi9hm&ydJL>&OD#ti8Aaz%B9xGe%70M2{@O%c-g)khooi zsrvJ}2%ap@s$tJVeSB`cFT}P7L$)b%8@|x8=e}MHmLn@%jcO4o&6sBJ-qO( z*)i2eIWqnm%~um`LA`n)cNPtmHi3t;K1>TKu1N7^X9(G*TeC>faWfgYJX!ty31$18 zc8NXAI$tiWi!Vc_(ZlO_xX)?fojzn^M{H zzQ;(nRPfl>*mNWUR|RI9IN2w?@Aa*%S)Ryedl_k}xY+j&A>nzfkDXR{7XJp3D`>{3 z;Y7;xe={r^Wl}ItPO%GpA>gEE1R|>Bdju1odrW1VBwQuTQl?n{)t;lZFJ&Q90NUy0x@oYR6Pvu{Tv~Z z$CH_ASGN;4HW{ULc>>5r(pTba*fX0Quup5nf=^CH-J}%dQoir(*#ud8w zCMAvnruRj2!%FSnYY`Q~TnAY{Ny$6!1qXXFIJ|AF-opGPtPYucSszn+vCGXAP;+S3 za=q(1apS!|ylu$lW7$2b(?>Pk$gtm~9yt3u&wq+E_j*XWTC9HAi%-0)ytWZB|Js^7 zP5#o%<&?x->t}Ri@!;X~KQQ2|lBY_c(t`L7~rt^?zLx1~=l1QosRH2p%n4{wyc zb!;*0d5)ax+5ebYZsOp5?IP=BXDnxSMQ3ut3u5dh8(~rO{pJR$AK>o+73NWX)33;m z3+E!PJVJHvv)q;T51SZh~8{h65*YG z!pO-8G@<^3k7)f{$VC^&3SDk&SqR)U)g7On%H?(}och;L-&owp;j^%BElrubG}AfU zQCs)*7k&hIK!4>uma4sjod?5{fvovsCX<2n52bj5Bp&sD*@@9QAi7Iz`*dFH9sgA* zB`figZvSNq%>yeDk?<(C{R^2)>7mT>*!Q;lnIZM4m6cH7Sbf*RIgTO9m-)7s@@+Fo$qKBD zLhRG*XvhO$fJ!_eU};|ZP|1+PI#==3WP+N4d5i6W67)C%^<_W=C6l}k>tHkzJod=? zS`;N@@yUo#ZEZPg<1+U@_E+jamm|4#Ex<@pyBngxezIJ~UbVn8MS5(G+=HZ|?mV67utW=9J*Eg)PQ^iEbTx%pY zLARfneLJeDxZ__cI;QtT`Gf||47@-gnfoAbYP`3xWSuK`gU;UEyxm%YG8U^6%#KYou5DAp+o#+Ng?bz$j>=OB25pY z#7PBTMnhLVAgfBtu}GTsc!Oai3=Xnl_m2#JMtx`A{HQi#FUl8$y{)Z$Q0N=&N@lz; z53-;}!cJnN?+4e#FMX~0vYqlf0&nfWf5S^TkSo}rhsL%OpMG_|TE9a`f`j9!lo-+I z(Vo@GAx9c4Yb@Y24Wri`!Mn~Xh&3=X`|V>H7xPL~2DyNvuh+l2@ci?FC5`rVjBMgM zr-Id}c3eF(x6_uw^4L02IZnU(I*s(kvwqX>#;bbdtyAxqLX3V2EZ>P6G+57XxWhkx ziITG&PbPl0<=i+`vt7&kwy~b7p|Plv_$;Xa8Ze3AtHreeEjUw~j={0k*~7a=c*L;D zkcBvQO8+)QZi>sTA|@|1h!i9?4^mOPjvX*2I^3pSPbgs(GZ@(wv zS2Dt~2{4i?NJLVEOK13?HuIra?TObyvsjuGk)K2~Lhb+*$OHG%!>;_9Je9JhW1|~O zTxD^_9&k4=&zmVN50sD5U40N1|*?`iWGH`IgD#aP- zZ!CK2xfmfvW2@jy^`?gQIKKeMVFnlV`_|OeVLYAdFx;+*zzzMl(-Lr(q7cwPwiJ2$ zwUA-o;*={uur%r6b^D#isTWdMDq+_vyzyHFFRzH)C2{i6`;uDU{``ReB+3qmWbJbyUD>BgDWxQ~Yq2Z@{Ox&eOsSj`>$i;O&s zqddcpbBRIbmClcIu?(8)Yx6CHk7!INq@McIe3(l;S}s$RG#S^GN+i};oP~XrTP_+6 zM$8hNk+YLBdc>IzeG2kXLB$#(;N;cN$B6^T1cLW_J%p9iQ9}i8b2^AfPU$lne|ArN zbXAWQlJv0@kvODxgHVlh65(7#XNHY!52L`PexFsJ0v7659q1B!>g-8jR(w{;Kg{&@ zlFxm5{q^#CWRIcYmR4HsOMM5&lsQo`Vt-j$;=Qoh?~eR|Rvsk2a)+y$%-!28az8il%2CyLeUH{z(_KHPOi3Pq1U>hkaiFd>vM5%Vko0iRj92Nbna(?)KN z{Q-1!pHKkY0IPA))EF-w@rJZ|?G~`Mn(23@kQ|G3>Y-sPa}(*sxR|C+!J92Yrr3^K z67>+}rxt*!FL#CVW6G}_|y!+YL zS+ZyU{BMk`hcI)a;rcFRrQRv44leZ~cMeXdp=Jv=cG`uEnCk2B^s~Gd){cY>JSpwu z*fX6FJ@MJB4Zk?uK-+y%e1v@9WMpM9ma)BVuOM0Ez zU^!J}zWwHN;`v`Z>|NN>wfc&G=41AM&zmBPx#slDFR-n%iF}vVt%cGP37xg#X_#sg z`}Eg77pTxS8W@!cPT4X!p~XfP@;?)dpwvYNl%GGEJ-$_{-_v*4LDn{pH1`_-wFAf4 z&MDWHL~`WYwNCFcvK2ENG!j(-DyUa%b>Vm0e`(>Q83M_NKH?Bv3?Y$ClgR$MPqwh*m%@G ztEzExDoe_T@dZB=z-Wm-Gsln#1g=&@Xn(!Zns4>-DLa=mM(pIB^NDB8gb0a=9gFu9 z%T#I7^(`#STZh>`Ve*WLR`Ys4jCgHY`m*iXYp25Xa+ugHn+E!1O4W9Z=!A$;ii2!& zasoY<^9K22WN&DFHJ^4TXjh$6N8+3+rD8eRg2PM^$$x|m?Jmj7szUL7K#pqHbpYzg zsNn6?Fn!u)Z=W-sZ^_6JUB;O7x7oA8y_CyI+@@v|kygLgURVUjHVzfrgFu?Vi3s3b z$^YgL7m2EuXOerVnoaS@>0%P^-jzoBWK-=0lQit3lsSpSHA2;Ktr!X=FIZbGjd!TN z&)-|jL3}+OZHQi-yyV7g(;VlhNgP|UkC&Xn$5X|8(onz8i5pw-5m@}Lp!xvXF`>Ra z^4VQTQAM7qC%k6}Y{USCE1&$%qZG{g4m%nvo>g?hYW?fyg37k|2T4r`1^2FNS$#GU zV>+IE)Ru~jJedLqfQL>Yb|W$e!}~!RD!zj!-HL)(CPbWz9<7%=Rj+bdAyP?(Lw`7Y z%W6(WgjoE+`)86Xw><8Cd94R=0JP5A5aAral5U>w70&swxPcZoUUT>dT%}*R>S^u{ z$u8B^;rkLNBxPxUI&nF;W0mC2Bs^G_dzR>2*LEezv-u1qAiI9BJsLu|cODY^?zV#E zVUpDU8xr&lfG$dUaA-)8nQ|LzwZYok}?5R(S1*kevYGZ&f~!OqMHWo9+n&)yLAz z#X4l_Oe=G5DULYW%NQ!0zBe-b>0xVxn!jOmv@0MKp&A=e8s*nr(_(!*+nQbMp=Q=+ zU8#ZmaYXjkXvAer4_A~K4PA{f2?e0>h7!Whu=JMUzD1{u>%nYe+bf6~y=wR;WN~SNITxDz+joTbaza97Zx{%WA+4Ln8{Kr0I$1C^ zH01TX?y!Oyd_AlJRtE#*g!#D@!9+Qm8eM>PXGDAdZe2PRHwE46bhJ>>`fx{x*hy|k zSqBMu?kQ%-&fxCq%5S!drDBj{o`Fqc@yFWCqLiEDj|EAI`YUn&(Jv+vkMsQ3g04C? zmZ@tCmhCQg+x;t30BGN{;o^=ySoQn&+xt!&U@r!@L|vkjgdn;;0z}7l={_9+LfTkd zh<%+a4#3Fk7^+<~Hh#_P#H;$MXf``F(x?vS{a*tUDgzpVvi@xKAo5&Yj`Pz_Up>H8 z!id%j74zGhcwQ%o1sj&`cfmoRdqp5kveWU@sR|URZ^tSU(_zJ1I!gn zhSw1{c1m<1Ml$#z-UW`979z9MU0{d*1T4xVP(ij5&JN+!lrDitw;3mjGsB$|@XU(^ z$t^`d>^Bz?FDym!&X!R;?C>J%(mGFsD^tPrphrfBD{a(Gv(DP}tG3c8Fylj8vCF^C z*rcDR4R>hn1cEwN%YtpL(6H5a>xD9Khkigi*!WCyKa61K(xsDxGiJwG@d@Iv=V>>j ztbqWLjY-uf&%N%h_oouU&fT`N)!73s1ojA4uS# z3|YYH|M_pe^SmkufacznaQ9R;mE5OzDUnIhul53~O~I6wVmT~Otp5DhgFrQ|(j?w2 zs`HwPOR>$S$P@&sH>L8{RSZ1KhWa?-ODj5h@W-W~PeikK;M;+$Z=~=M%UIn!;xtr< zJ;0-!YdGxR6P%?&@!B@a|=BB5~UJL%U{Woc_Y77iXg`%e*_A$CRWU%`QFu zY_(Kkwk!*PrX7!*k7b}adC=rc186T$e)pEe$2fYYN5UoI^~*YBxuAU*-!&4SH(Uco!es`qP_=m n$m`X}VpSx^{l5T$?(ryXmLWwrpPe3l_W&AdI;vI5mcjo6K)l)1 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/apple-icon-384x384.png b/frontend/public/icons/apple-icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..172372386fcb3f49b1f929f44d9104997ad78e30 GIT binary patch literal 15561 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 D^l}UT`eM7?!O?T)S;~p6)KK33F8E#Am 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 V^ftFx`VCP8R28)pD&#DJ{|EYp)c61Z literal 0 HcmV?d00001 diff --git a/frontend/public/icons/favicon-16x16.png b/frontend/public/icons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..140cd704e14fb416334f76cb8ed49de2aeff748c GIT binary patch literal 359 zcmV-t0hs=YP)Px$AxT6*R5(v#WS|f*QmCJSZU+3HXJrL;Y|^n~D3-!GC5nRod+xu->Y{m8R{w83 zf58xBX2x*k@go#N;2Kt1tN#x_dXo`GBO3@ZAnDjKhMyOAFtF=;fE)tXht?t zsNTdG3&xd&|IfDfH?#{&G^lB6G6Wyl&tRpk%W&-KWujd0AL`F~1_p-4WvZ6{qi!E( zXcv}XsC@f^a2TL_=k4|x|Ajp>KsNusot(#@I(HKOKtwVCe-;L;7!j1m~+W-5v^695&vVG-|%%qjo?002ovPDHLk FV1jdlnXmu= literal 0 HcmV?d00001 diff --git a/frontend/public/icons/favicon-32x32.png b/frontend/public/icons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..61fb419dfce85d0d3245de93596bb670517aa31b GIT binary patch literal 927 zcmV;Q17Q4#P)Px&SxH1eR9Hvtm2F5;W4UN)htrrPW(+Wx`(Y{!TUkrq) z^`)&S6nnE5!i?06<)pGGi?YHXo3x5vG%6$0=_Hg&d($vHaSq;*wzq2wzj(jwo_p{4 zKfm+*pK~U_IA4Ns*2e_Egah7ofb3L+K{+#oWjn)cravw<{(7mCi}Vl(3~5k2p~T_8Bgv$!M86xXy|pG zCzrjpw`J)Z7B1W7Of>Hq?-BRKxtT$$KG`2281+CiGp| z{I!>bYFM1zs{*EySN&g@BcBr%p{=!%xgif*f+AyW9DsWs9YlPy!2Q|er6rRhV=aC@ zzX`vn1bdlVsyN(R4-^#EJ9J_!XTC$muMH+LDNw|T)4J^JIJayyEZ_QY{OQC03PAib z(=bqK%4jnjM$EEx9(u$h%?7Vi*OL$3n8bRB$Kk@*R37QVpIDor_s4? z?f5qUPHeP-70pE#g@K4B!sEZ`mu{Q05^exxZMS=AjYcf zu>+$8*2re-1rX4%@xGj8!L0+lm3U5=02p@%egooGFEEJjJ`n%_002ovPDHLkV1i!L BuRZ_( literal 0 HcmV?d00001 diff --git a/frontend/public/icons/favicon-96x96.png b/frontend/public/icons/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..92a86edda8d92843e04baf5befe5ff298c614891 GIT binary patch literal 3832 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/icon-128x128.png b/frontend/public/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..0396aec6a39e2a388444b353464a284098a58523 GIT binary patch literal 4683 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/icon-192x192.png b/frontend/public/icons/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..01a2fbdd538bcdd62339f65c619e5266dd7cfd3e GIT binary patch literal 14340 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 Q7XW_bWmRO#o*KRTKd}1YssI20 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/icon-384x384.png b/frontend/public/icons/icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..172372386fcb3f49b1f929f44d9104997ad78e30 GIT binary patch literal 15561 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 D^l}UT`eM7?!O?T)S;~p6)KK33F8E#Am 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/info.svg b/frontend/public/icons/info.svg new file mode 100644 index 0000000..2dde11f --- /dev/null +++ b/frontend/public/icons/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons/ms-icon-144x144.png b/frontend/public/icons/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..cb71641510073509827772198fb993929a673908 GIT binary patch literal 5241 zcmcgw_dnEu|9{^(T%4@PcF4>)dvn>dBb1%JS282c&I&o%n{3I-o~4LW_RJr$Jd9YB-}%~zaQ`TwR4isg&6rL(8_sV{8VRtmL6nrhVSB$j&vq94 zS>N*+1*RGPvEv8>;OUJ#eqn0!&3F9^gHI#A=y%B+`0{d`rOHvbCIwL5SbjJXlH;pRax^CzojKkF0kU`Mc{x)6c?F`bo zjMx0@y)Y$6qq57lnAn4mIAIHqe_{^K?q9K?!iwe5skzJPj%>Ams_$8uT)EC8=0**e zb%%J04+U+i7bhrWuvea?)IaLj41qhJqfJsyQ1OTwsAd#D zBms_AaAuAVX*lH%r-A|&zqvDW`o>28&XJZ%mBXY(ZMV385?#TMAJDN6`Hydouyef; znd``vJsw56w~2xEf|eLS8Uoa~fUzI6-M#6r+4YON9N7DZ$!SErRf@X=6^BP9~!P-d%4Y&#jWrJjZcGB6C8UwG&j4@Q>K2s4R?!2gD{fj*2glUiI&zWU@ zTdWAP-Q-(5-$+UIJ+iQJ!yhAw3Yl&Weye^K$~;eS^If3R5vTMy?37dc?e(vLCb?8- zIVD|t2o|m-LFIT4tHRe{WXGS^)i7Mz988Wg1pQiwHXr8lUIk;OD=YOZpC0oJm9N`j zYWmA!=-Z{&X^EQe9}!%=(4bOSy=KI!jGf-a zTJ)LOK0PBH`XWG9#M7A-hB1u*ApZ`akQThTjWZw=KZg##~EfVu3&uIUvh)DnI)=Gp*PY$=UVWR zJoxHr8r8sxUqQ}Pi@~P~RZ!3`A}%PBq06#qH*CW1*@6Uv7<%8!%kf^r59k`PeTz#_ z-KGe?EML2U(u^8Tk-<_s>rUpcV~~IBK~jJM?ESch?R`p5)?=n2W!cAtmtH?_3Yk)J zqW{D^tzO%Hd9t$mn&cJ|QXqJ#CySv8nf%*VtP(pw?jTFM?sm^iS$;1=)Z#-j0ok!v z!3Rs++1#EF6hTju-#+`Shz43Vjp`Mv5WR{1vwPuKykOw1g_$1xIMTbjh-#gZiO<-Y z%i|1Smg{SJHnXL({+GlDDzf^uubwJ{ns(cCS;!nkw+{I}5!yHNx^VbwbHpt-GP2}u zt6DR`+lU#nUXO-|&Pk#e2F8Md4=g%F9CR=uFR8s{FR6mr6#zsj2$&4lPkJ~z^*O)E zk^gM`F&WM;>aVJWX(uMri+ZtaH4GFdL={{5)pNwZQ8lfZShuuv$wbK z`RKlprPhNbmVDrQjiZdWL4 zoF*nB$2U;cx4b-ddP>9!m(0MJbR#(1@q_wK$Im=Vq3@|gGPuiEL0Qf(`#g;Y0R(O~ z^Yk>*9>~y9`${JR>2ZR@JVns$RP`Emk@F>`^=x~dwAX7&WU~#~MYdJCIC;2)T)4;Dcebgv}Ztin;k;>wQ{|;m1o*F(s`=x(|P3u9>a$`lSBb~M}(u( zfk1?w#K-2M%a&+&e%J|Kot~yIVV@>2q4zvSwSd32b9i_7V~%5+WuNxV5fPwiRQgrJ zp^7l%aLnB66dyKqbU|ZeeuU*~Ikac7j2U(&-xTGNVCN#3>qE(VCz2vlkw)wS z3SLMN1?^Gt{!3-*9eYfAH%y!u-`jaL&h}}CJTOYVaMHt5bg7yBO|CB;UU**9MY;pT z`Bb`xJ|?Ma;ZmB;voh7W@_mDWOu#FcO_}%M#eA-g3b5lh{EEbin;uH$DrTy7N~}O@ zC!y?T2+QaThr>m0F+I??B1eTUW3DN3hK!Y=U}_5?SyIZf_}+yHsP3(>Wdztwwud$# zZEC6@*aybZ`n@b)mA-D<9dqGdw{kit(+soKC)(ZlS?;LQ-(Tk-dmU60>wXc7wTq~F zNjO}pXa2dZu}~ST=O9)mbM3PAWMOs?n}mDtE78I@$mPy?#r-RAgw^DC{uZB_+kZwy z5KuPf$G7i|*zBe*_Txu|(C76H$qkqKb*E+p-XjXZ9UH%_F+bi5j|!7pV+GxxiObrj z&8u9tmKmk@=i5q5*b0fvXNV?EOUpmoow@Jdw!Z&L1B}CnP161KkBm zh+=vyC{wJoH3_nx&-HX#7W#g+Y7|#G$|>u$!bQ}LxM>ysqOyI%o_*S4dGo%j=c4_9 zCDD5&7e?_e{)^t6sE4Yv+zX}+e9+8G7H`^m&RTLohvu>V)Qp;miD5NQ&l*P$FgRJm z-LjJ+`n-1Kre#LTI3wi#9V5%g)Q5U4(++b*6%Hn_FcSPHYvY1z2bMCgAW4qri)^4zMK= z#T>F@SjrVhh>eRfnBIkVH#0bJa`o@2;GC@wj^nYd1Tb3az0QlJLq8Q&;h{#VX?|%- zZTAwN;>!u*k13}-3F(~7zMB4?hq*NqQGs{m%|?hK0)145XQq~sEg3Jljdj&t)fpH5 zoFaK*YTDzy13S%?AuYa&fG@6YRa&^2Ga2*K9>$Y`5DYzt_{27TT{n!6;8_fhvY@EC z)q03T&fNqbw)NUOs0ZsZG5bq7HWDL_ep6A2Iu43a-)$NS*F*9zqR9qaQ_~Xru0N#G z;~?|!y;VQ+YC=P@B67lP%d9+Gl*m`M6_6FF719_kV*-p{6^Q5vSU z$xq={Yug%>RJFhI6(cZDdG6UkMg45_xva~dK=ReUBmp30Cw@hW)Z~@Aj6%O5DW?uo z;xB)@B6+H4>idcc1cg~Df73yjkS`O|poj(IW?>-_qN3s9cK*m}d$$mG4?$VFo$UaL zbn#2agv>aih7AT!omNKs$-At@)!*z21g_RX>rPR1wTHPEvzP(fryn+0|&$I$2yF@IliUC6Dh zQtWU`_T=ER`e;s(V0BOdJC-JKgB}+vHRyYiLfkvG03*EVR5PA8aPoA)N`Ml?84?(o z)d-}9xxA#TqB>h=n`WXN9mVPVNUMZsW4@p#t+&%B4s-FnIOoOq9w%5UDcX62nWevc<&9!{4u9<>*e#!T0kxFexFoSJ zUL2SP1-`r@pT3penHgq29FZvD&oGmfwX*Dat=)3RRKxfjek6U6`o8bhm3KEa`w=s} zHir!*a>0SV`8051t&3*w2*%QqD0`Qd2$clU^s@>4X&L+SE>8fah(&!d(7(p&HJ=QsF zShf+lq7*`I2SJK`q15j};qy9-mR1dT(d%*XUBNhR(bk;?zax`gKG4rhr+N!IP`PO3 zQO-L_&{t}&iH<5Nf?LWV(@Fb-WX)*q)kn zKhNhhYnG;S&yU%g+&PmA$LL0 zQFl65lg4JSMp*uhP*~w{yb)#rKu?`mQzv05AIH4 zdA^Rv#39$4bx(i+xg1S?-CbPU=OMo^4R<(J&*L0-Uhs97a0d#@tsntu6p4eAW$0Fl z&hctLi9sIoK>?4j5C*y4eUX%Gbra{t&Hv4EXHHl00~AT3`v7oZEpEBLc5KbT#+J-1 z$qn(SI^11U-J5_(W|uU)P>uf4|4VDXY<~8xQFbUQNgep}JsbiLBwVrEiO=j`Za&nY zdy@kOg-G6hvaGpqDR}w#$+m%i^J}WtZ97pxGUFP%DB#g-5d{9B$V+uKb(^StQ=+7U2#SQj)6A8D@Yt&hys(61>+6;^KHhde=Gzv2R|k>W1`9;1lAFIT zNf_K}5WFeOn)Y8EcLAPvO*~ndgPxGhH4+~PI zO~e#&CwwwieQ)bURxV5OdjH{3x*Ho?FNl*RLB%C66iBE$u;KW#w_kZK*Q|d|>DF~# z@-JXu_w=(CM;XrXtE&=@9B0Es>_A|qz8I}K;G!O;mFJWfNe4v(D!|yM2W;W>HM`( z*~Rq-2Z*CKfl~XAK24Uvn;LsNcUR6RML_}2Kihahl6UdT?W83yM*X#&Grf4qpD4X2 rNPg0&7S-~PHDgEo|M6wG8-jY?2Xr3bhvxsdL_kyZp-QciRrr4ZuUEUS literal 0 HcmV?d00001 diff --git a/frontend/public/icons/personal.svg b/frontend/public/icons/personal.svg new file mode 100644 index 0000000..080da91 --- /dev/null +++ b/frontend/public/icons/personal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons/schedule.svg b/frontend/public/icons/schedule.svg new file mode 100644 index 0000000..7678008 --- /dev/null +++ b/frontend/public/icons/schedule.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons/score.svg b/frontend/public/icons/score.svg new file mode 100644 index 0000000..d664329 --- /dev/null +++ b/frontend/public/icons/score.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons/selection.svg b/frontend/public/icons/selection.svg new file mode 100644 index 0000000..60963ed --- /dev/null +++ b/frontend/public/icons/selection.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/quasar.config.js b/frontend/quasar.config.js new file mode 100644 index 0000000..a56495d --- /dev/null +++ b/frontend/quasar.config.js @@ -0,0 +1,212 @@ +/* eslint-env node */ + +/* + * This file runs in a Node context (it's NOT transpiled by Babel), so use only + * the ES6 features that are supported by your Node version. https://node.green/ + */ + +// Configuration for your app +// https://v2.quasar.dev/quasar-cli-vite/quasar-config-js + + +const { configure } = require('quasar/wrappers'); + + +module.exports = configure(function (/* ctx */) { + return { + eslint: { + // fix: true, + // include: [], + // exclude: [], + // rawOptions: {}, + warnings: true, + errors: true + }, + + // https://v2.quasar.dev/quasar-cli/prefetch-feature + // preFetch: true, + + // app boot file (/src/boot) + // --> boot files are part of "main.js" + // https://v2.quasar.dev/quasar-cli/boot-files + boot: [ + + + ], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css + css: [ + 'app.scss', 'tailwind.css' + ], + + // https://github.com/quasarframework/quasar/tree/dev/extras + extras: [ + // 'ionicons-v4', + // 'mdi-v5', + // 'fontawesome-v6', + // 'eva-icons', + // 'themify', + // 'line-awesome', + // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! + + 'roboto-font', // optional, you are not bound to it + 'material-icons', // optional, you are not bound to it + ], + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#build + build: { + target: { + browser: [ 'es2020', 'edge88', 'firefox78', 'chrome87', 'safari13.1' ], + node: 'node18' + }, + + vueRouterMode: 'hash', // available values: 'hash', 'history' + // vueRouterBase, + // vueDevtools, + // vueOptionsAPI: false, + + // rebuildCache: true, // rebuilds Vite/linter/etc cache on startup + + publicPath: '/', + // analyze: true, + // env: {}, + // rawDefine: {} + // ignorePublicFolder: true, + // minify: false, + // polyfillModulePreload: true, + // distDir + + // extendViteConf (viteConf) {}, + // viteVuePluginOptions: {}, + + + // vitePlugins: [ + // [ 'package-name', { ..options.. } ] + // ] + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#devServer + devServer: { + // https: true + open: true, // opens browser window automatically, + proxy: { + // with options + '/api/v1': { + target: 'http://127.0.0.1:8800', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api\/v1/, '') + } + } + }, + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#framework + framework: { + config: { + dark: 'true' + }, + lang: 'zh-cn', + plugins: ['Dialog', 'Loading'] + }, + + // animations: 'all', // --- includes all animations + // https://v2.quasar.dev/options/animations + animations: [], + + // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#property-sourcefiles + // sourceFiles: { + // rootComponent: 'src/App.vue', + // router: 'src/router/index', + // store: 'src/store/index', + // registerServiceWorker: 'src-pwa/register-service-worker', + // serviceWorker: 'src-pwa/custom-service-worker', + // pwaManifestFile: 'src-pwa/manifest.json', + // electronMain: 'src-electron/electron-main', + // electronPreload: 'src-electron/electron-preload' + // }, + + // https://v2.quasar.dev/quasar-cli/developing-ssr/configuring-ssr + ssr: { + // ssrPwaHtmlFilename: 'offline.html', // do NOT use index.html as name! + // will mess up SSR + + // extendSSRWebserverConf (esbuildConf) {}, + // extendPackageJson (json) {}, + + pwa: false, + + // manualStoreHydration: true, + // manualPostHydrationTrigger: true, + + prodPort: 3000, // The default port that the production server should use + // (gets superseded if process.env.PORT is specified at runtime) + + middlewares: [ + 'render' // keep this as last one + ] + }, + + // https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa + pwa: { + workboxMode: 'generateSW', // or 'injectManifest' + injectPwaMetaTags: true, + swFilename: 'sw.js', + manifestFilename: 'manifest.json', + useCredentialsForManifestTag: false, + // useFilenameHashes: true, + // extendGenerateSWOptions (cfg) {} + // extendInjectManifestOptions (cfg) {}, + // extendManifestJson (json) {} + // extendPWACustomSWConf (esbuildConf) {} + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova + cordova: { + // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor + capacitor: { + hideSplashscreen: true + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli/developing-electron-apps/configuring-electron + electron: { + // extendElectronMainConf (esbuildConf) + // extendElectronPreloadConf (esbuildConf) + + // specify the debugging port to use for the Electron app when running in development mode + inspectPort: 5858, + + bundler: 'packager', // 'packager' or 'builder' + + packager: { + // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options + + // OS X / Mac App Store + // appBundleId: '', + // appCategoryType: '', + // osxSign: '', + // protocol: 'myapp://path', + + // Windows only + // win32metadata: { ... } + }, + + builder: { + // https://www.electron.build/configuration/configuration + + appId: 'little-busters-fe' + } + }, + + // Full list of options: https://v2.quasar.dev/quasar-cli-vite/developing-browser-extensions/configuring-bex + bex: { + contentScripts: [ + 'my-content-script' + ], + + // extendBexScriptsConf (esbuildConf) {} + // extendBexManifestJson (json) {} + } + } +}); diff --git a/frontend/quasar.extensions.json b/frontend/quasar.extensions.json new file mode 100644 index 0000000..e239c30 --- /dev/null +++ b/frontend/quasar.extensions.json @@ -0,0 +1,3 @@ +{ + "@quasar/qcalendar": {} +} \ No newline at end of file diff --git a/frontend/src-pwa/custom-service-worker.js b/frontend/src-pwa/custom-service-worker.js new file mode 100644 index 0000000..16a22ba --- /dev/null +++ b/frontend/src-pwa/custom-service-worker.js @@ -0,0 +1,30 @@ +/* eslint-env serviceworker */ + +/* + * This file (which will be your service worker) + * is picked up by the build system ONLY if + * quasar.config.js > pwa > workboxMode is set to "injectManifest" + */ + +import { clientsClaim } from 'workbox-core' +import { precacheAndRoute, cleanupOutdatedCaches, createHandlerBoundToURL } from 'workbox-precaching' +import { registerRoute, NavigationRoute } from 'workbox-routing' + +self.skipWaiting() +clientsClaim() + +// Use with precache injection +precacheAndRoute(self.__WB_MANIFEST) + +cleanupOutdatedCaches() + +// Non-SSR fallback to index.html +// Production SSR fallback to offline.html (except for dev) +if (process.env.MODE !== 'ssr' || process.env.PROD) { + registerRoute( + new NavigationRoute( + createHandlerBoundToURL(process.env.PWA_FALLBACK_HTML), + { denylist: [/sw\.js$/, /workbox-(.)*\.js$/] } + ) + ) +} diff --git a/frontend/src-pwa/manifest.json b/frontend/src-pwa/manifest.json new file mode 100644 index 0000000..8c7ca61 --- /dev/null +++ b/frontend/src-pwa/manifest.json @@ -0,0 +1,36 @@ +{ + "orientation": "portrait", + "background_color": "#ffffff", + "theme_color": "#027be3", + "icons": [ + { + "src": "icons/icon-64x64.png", + "sizes": "64x64", + "type": "image/png" + },{ + "src": "icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/icon-256x256.png", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/frontend/src-pwa/pwa-flag.d.ts b/frontend/src-pwa/pwa-flag.d.ts new file mode 100644 index 0000000..cda1c0e --- /dev/null +++ b/frontend/src-pwa/pwa-flag.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +// THIS FEATURE-FLAG FILE IS AUTOGENERATED, +// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING +import "quasar/dist/types/feature-flag"; + +declare module "quasar/dist/types/feature-flag" { + interface QuasarFeatureFlags { + pwa: true; + } +} diff --git a/frontend/src-pwa/register-service-worker.js b/frontend/src-pwa/register-service-worker.js new file mode 100644 index 0000000..c872c56 --- /dev/null +++ b/frontend/src-pwa/register-service-worker.js @@ -0,0 +1,41 @@ +import { register } from 'register-service-worker' + +// The ready(), registered(), cached(), updatefound() and updated() +// events passes a ServiceWorkerRegistration instance in their arguments. +// ServiceWorkerRegistration: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration + +register(process.env.SERVICE_WORKER_FILE, { + // The registrationOptions object will be passed as the second argument + // to ServiceWorkerContainer.register() + // https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameter + + // registrationOptions: { scope: './' }, + + ready (/* registration */) { + // console.log('Service worker is active.') + }, + + registered (/* registration */) { + // console.log('Service worker has been registered.') + }, + + cached (/* registration */) { + // console.log('Content has been cached for offline use.') + }, + + updatefound (/* registration */) { + // console.log('New content is downloading.') + }, + + updated (/* registration */) { + // console.log('New content is available; please refresh.') + }, + + offline () { + // console.log('No internet connection found. App is running in offline mode.') + }, + + error (/* err */) { + // console.error('Error during service worker registration:', err) + } +}) diff --git a/frontend/src/App.vue b/frontend/src/App.vue new file mode 100644 index 0000000..d78bd47 --- /dev/null +++ b/frontend/src/App.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/frontend/src/api/activity/activity.js b/frontend/src/api/activity/activity.js new file mode 100644 index 0000000..fafe3a0 --- /dev/null +++ b/frontend/src/api/activity/activity.js @@ -0,0 +1,72 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; + +const activityApi = { + list, add, getInfo, update, deleteActivity, getCurrent +} + +export default activityApi + +async function list(page, pageSize) { + const response = await client.get(apiUrls.activity.list, { + params: { + page: page, + pageSize: pageSize + } + }) + + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.activity.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(data) { + const request = { + name: data.name, + term: data.term, + start: data.start, + end: data.end + } + + const response = await client.post(apiUrls.admin.activity.add, request) + + return processResponse(response) +} + +async function update(id, data) { + const request = { + name: data.name === '' ? undefined : data.name, + term: data.term === '' ? undefined : data.term, + start: data.start === '' ? undefined : data.start, + end: data.end === '' ? undefined : data.end + } + + const response = await client.post( + apiUrls.admin.activity.update, + request, { + params: {id: id} + }) + + return processResponse(response) +} + + +async function deleteActivity(id) { + const response = await client.post(apiUrls.admin.activity.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} + + +async function getCurrent() { + const response = await client.get(apiUrls.activity.current) + return processResponse(response) +} diff --git a/frontend/src/api/activity/activity_target.js b/frontend/src/api/activity/activity_target.js new file mode 100644 index 0000000..936405f --- /dev/null +++ b/frontend/src/api/activity/activity_target.js @@ -0,0 +1,118 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; + +const activityTargetApi = { + list, add, getInfo, update, deleteActivityTarget +} + +export default activityTargetApi + +/** + * + * @param act {number} + * @returns {Promise<*>} + */ +async function list(act) { + const response = await client.get(apiUrls.admin.activity.targets.list, { + params: { + act: act + } + }) + + return processResponse(response) +} +/** + * @typedef {{ + * "id": number, + * "activity": number, + * "grade": number, + * "major": number, + * "course": number[], + * "createTime": string, + * "editTime": string + * }} ActivityTarget + */ + +/** + * + * @param id {number} + * @returns {Promise} + */ +async function getInfo(id) { + const response = await client.get(apiUrls.admin.activity.targets.info, { + params: { + id: id + } + }) + + return processResponse(response) +} + +/** + * @param act {number} + * @param data {{ + * "grade": number, + * "major": number, + * "course": number[] + * }} + * @returns {Promise<*>} + */ +async function add(act, data) { + const response = await client.post(apiUrls.admin.activity.targets.add, data, { + params: { + act: act + } + }) + + return processResponse(response) +} + +/** + * + * @param id {number} + * @param data {{ + * "grade": number, + * "major": number, + * "course": number[] + * }} + * @returns {Promise<*>} + */ +async function update(id, data) { + const response = await client.post(apiUrls.admin.activity.targets.update, + data, { + params: {id: id} + }) + + return processResponse(response) +} + +/** + * + * @param id {number} + * @returns {Promise<*>} + */ +async function deleteActivityTarget(id) { + const response = await client.post(apiUrls.admin.activity.targets.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} + +/** + * + * @param src {number} + * @param dst {number} + * @returns {Promise<*>} + */ +async function duplicateActivityTarget(src, dst) { + const response = await client.post(apiUrls.admin.activity.targets.duplicate, undefined, { + params: { + src: src, + dst: dst + } + }) + + return processResponse(response) +} + diff --git a/frontend/src/api/api-urls.js b/frontend/src/api/api-urls.js new file mode 100644 index 0000000..dd15149 --- /dev/null +++ b/frontend/src/api/api-urls.js @@ -0,0 +1,119 @@ +const apiUrls = { + auth: { + login: '/user/auth/login', + logout: '/user/auth/logout', + modifyPassword: '/user/auth/modify-password', + loginStatus: '/user/auth/check' + }, + user: { + info: '/user/info' + }, + admin: { + teacher: { + add: '/admin/user/teacher/add', + delete: '/admin/user/teacher/delete', + update: '/admin/user/teacher/update', + }, + course: { + add: '/admin/course/add', + delete: '/admin/course/delete', + update: '/admin/course/update', + courseTeacher: { + add: '/course/teacher/add', + remove: '/course/teachers/remove', + update: '/course/teachers/update', + } + }, + courseSchedule: { + add: '/admin/course-schedule/add', + delete: '/admin/course-schedule/delete', + update: '/admin/course-schedule/update', + clone: '/admin/course-schedule/clone', + }, + major: { + add: '/admin/major/add', + delete: '/admin/major/delete', + update: '/admin/major/update', + }, + student: { + add: '/admin/user/student/add', + addWithAutoMajor: '/admin/user/student/add-with-auto-major', + delete: '/admin/user/student/delete', + update: '/admin/user/student/update', + }, + activity: { + add: '/admin/activity/add', + delete: '/admin/activity/delete', + update: '/admin/activity/update', + targets: { + list: '/admin/activity/targets/list', + add: '/admin/activity/targets/add', + info: '/admin/activity/targets/info', + duplicate: '/admin/activity/targets/duplicate', + update: '/admin/activity/targets/update', + delete: '/admin/activity/targets/delete', + } + } + }, + course: { + list: '/course/list', + listNames: '/course/list-names', + info: '/course/info', + getSelectedStudents: '/course/get-selected-students', + getNotSelectedStudents: '/course/get-not-selected-students', + exportStudents: '/course/export-students', + exportNotSelectStudents: '/course/export-not-select-students', + courseTeacher: { + list: '/course/teachers/list' + }, + }, + courseSchedule: { + list: '/course-schedule/list', + info: '/course-schedule/info', + fromCourse: '/course-schedule/list-available', + studentList: '/course-schedule/list-student', + }, + major: { + list: '/major/list', + info: '/major/info', + }, + score: { + export: '/score/export', + }, + teacher: { + list: '/teacher/list', + info: '/teacher/info', + course: { + list: '/teacher/course-schedule/teacher-schedules', + courseForTeacher: '/course/teacher-courses' + }, + score: { + scheduleScore: '/teacher/score/list-students', + update: '/teacher/score/update', + } + }, + student: { + list: '/student/list', + info: '/student/info', + course: { + candidate: '/student/course/candidate', + selected: '/student/course-schedule/result', + select: '/student/course-schedule/select', + checkSelected: '/student/course-schedule/check-selected', + unselect: '/student/course-schedule/unselect', + official: '/student/course-schedule/official', + }, + score: { + all: '/student/score/all' + } + }, + activity: { + current: '/activity/current', + list: '/activity/list', + info: '/activity/info', + }, +} + +export { + apiUrls +} diff --git a/frontend/src/api/api.js b/frontend/src/api/api.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/api/auth/authApi.js b/frontend/src/api/auth/authApi.js new file mode 100644 index 0000000..f03b0ff --- /dev/null +++ b/frontend/src/api/auth/authApi.js @@ -0,0 +1,39 @@ +import {client, processResponse} from '../client' +import {apiUrls as api} from "src/api/api-urls"; +import qs from "qs"; + +const authApi = { + login, checkLoginStatus, logout, modifyPassword +} +async function login(username, password) { + const request = {username: username, password: password} + + // const response = await http.post(api.auth.login, qs.stringify(request)) + const response = await client.post(api.auth.login, request) + return processResponse(response) +} + +async function checkLoginStatus() { + const response = await client.get(api.auth.loginStatus) + return processResponse(response) + +} + +async function logout() { + const response = await client.get(api.auth.logout) + return processResponse(response) + +} + +async function modifyPassword(oldPassword, newPassword) { + const data = { + old: oldPassword, + new: newPassword + } + + const response = await client.post(api.auth.modifyPassword, qs.stringify(data)) + + return processResponse(response) +} + +export default authApi diff --git a/frontend/src/api/client.js b/frontend/src/api/client.js new file mode 100644 index 0000000..c55e642 --- /dev/null +++ b/frontend/src/api/client.js @@ -0,0 +1,70 @@ +import axios from 'axios' +import axiosRetry from "axios-retry"; + +import config from "../../config"; + +console.log(config); +const baseUrl = config.backendBaseUrl ? config.backendBaseUrl : `${window.location.origin}/api/v1`; + +const client = axios.create({ + // headers: {}, + baseURL: baseUrl, + timeout: 8000, + withCredentials: true +}) + +axiosRetry(client, { + retries: 3, + shouldResetTimeout: true +}) + +/** + * + * @param response {{ + * code: number, + * msg: string, + * data: any + * }} + * @returns {*} + * @throws {{code: number, message: string}} + */ +function processResponse(response) { + const json = response.data + if (json.code !== 0) { + throw { + code: json.code, message: json.msg ? json.msg : JSON.stringify(json) + } + } + + return json.data +} + +const filenameRegex = /filename[^;=\n]*="((['"]).*?\2|[^;\n]*)"/; + +function processFileDL(response) { + let data = response.data + + if (response.headers.getContentType() !== 'application/octet-stream' || !data) { + return processResponse(response) + } + + const matches = filenameRegex.exec(response.headers.get('content-disposition')); + + response.headers.get('Content-Disposition') + + const a = document.createElement('a') + a.style.display = 'none' + a.href = window.URL.createObjectURL(new Blob([data])) + a.target = "_blank" + a.setAttribute('download', decodeURI(matches[1])) + document.body.appendChild(a) + a.click() + window.URL.revokeObjectURL(a.href) + document.body.removeChild(a) + + return undefined +} + +export { + client, processResponse, processFileDL +} diff --git a/frontend/src/api/course/course.js b/frontend/src/api/course/course.js new file mode 100644 index 0000000..e730b83 --- /dev/null +++ b/frontend/src/api/course/course.js @@ -0,0 +1,200 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const courseApi = { + list, listCourseNames, add, getInfo, update, deleteCourse, exportStudentExcel, + student: { + getCandidate, getSelected, getOfficial, checkSelected, select, unselect + }, + teacher: { + getTeacherCourseSchedule, getCourseForTeacher, + } +} + +export default courseApi + +/** + * + * @param page + * @param pageSize + * @returns {Promise<*>} + */ +async function list(page, pageSize) { + const response = await client.get(apiUrls.course.list, { + params: { + page: page, + pageSize: pageSize + } + }) + + return processResponse(response) +} + +/** + * + * @param page + * @param pageSize + * @returns {Promise<{ + * "current": number, + * "pageSize": number, + * "total": number, + * "result": {"id": number, "name": string}[] + * }>} + */ +async function listCourseNames(page, pageSize) { + const response = await client.get(apiUrls.course.listNames, { + params: { + page: page, + pageSize: pageSize + } + }) + + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.course.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(data) { + const request = { + name: data.name ? data.name: 'undefined', + courseHours: data.courseHours ? data.courseHours: '0', + examRatio: data.examRatio ? data.examRatio: '1.0', + springTerm: data.springTerm ? data.springTerm: 'false', + } + + const response = await client.post(apiUrls.admin.course.add, request) + + return processResponse(response) +} + +async function update(id, data) { + const request = { + name: data.name ? data.name : undefined, + courseHours: data.courseHours ? data.courseHours : undefined, + examRatio: data.examRatio ? data.examRatio : undefined, + springTerm: data.springTerm ? data.springTerm : undefined, + } + + const response = await client.post( + apiUrls.admin.course.update, + request, { + params: {id: id} + }) + + return processResponse(response) +} + +async function deleteCourse(id) { + const response = await client.post(apiUrls.admin.course.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} + +/** + * + * @param act {number} + * @returns {Promise<*>} + */ +async function getCandidate(act) { + const response = await client.get(apiUrls.student.course.candidate, { + params: { + act: act + } + }) + + return processResponse(response) +} + +async function getSelected(term) { + const response = await client.get(apiUrls.student.course.selected, { + params: { + term: term + } + }) + return processResponse(response) +} + +async function getOfficial(term) { + const response = await client.get(apiUrls.student.course.official, { + params: { + term: term + } + }) + + return processResponse(response) +} + +async function checkSelected(id) { + const response = await client.get(apiUrls.student.course.checkSelected, { + params: {id: id} + }) + + return processResponse(response) +} + +async function select(schedule, activity) { + const data = { + schedule: schedule, + activity: activity + } + const response = await client.post(apiUrls.student.course.select, qs.stringify(data)) + + return processResponse(response) +} + +async function unselect(id) { + const response = await client.post(apiUrls.student.course.unselect, undefined, { + params:{id: id} + }) + + return processResponse(response) +} + +async function getTeacherCourseSchedule(term) { + const response = await client.get(apiUrls.teacher.course.list, { + params: { + term: term + } + }) + + return processResponse(response) +} + +async function exportStudentExcel(id, scheduleName) { + const response = await client.get(apiUrls.courseSchedule.studentList, { + params: {id: id}, + responseType: "blob" + }) + + let data = response.data + + if (response.headers.getContentType() !== 'application/octet-stream' || data === undefined) { + return processResponse(response) + } + + const a = document.createElement('a') + a.style.display = 'none' + a.href = window.URL.createObjectURL(new Blob([data])) + a.setAttribute('download', `export_students_${scheduleName}_${id}.xlsx`) + document.body.appendChild(a) + a.click() + window.URL.revokeObjectURL(a.href) + document.body.removeChild(a) + + return undefined +} + +async function getCourseForTeacher() { + const response = await client.get(apiUrls.teacher.course.courseForTeacher) + + return processResponse(response) +} diff --git a/frontend/src/api/course/course_schedule.js b/frontend/src/api/course/course_schedule.js new file mode 100644 index 0000000..805f3ad --- /dev/null +++ b/frontend/src/api/course/course_schedule.js @@ -0,0 +1,79 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const courseScheduleApi = { + list, add, getInfo, update, clone, deleteCourseSchedule, getScheduleForCourse +} + +export default courseScheduleApi + +async function list(courseId, term, page, pageSize) { + const response = await client.get(apiUrls.courseSchedule.list, { + params: { + course: courseId, + page: page, + pageSize: pageSize, + term: term + } + }) + + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.courseSchedule.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(courseId, data) { + const response = await client.post(apiUrls.admin.courseSchedule.add, data, { + params: { + course: courseId, + } + }) + + return processResponse(response) +} + +async function update(id, data) { + const response = await client.post( + apiUrls.admin.courseSchedule.update, + data, { + params: {id: id} + }) + + return processResponse(response) +} + +async function deleteCourseSchedule(id) { + const response = await client.post(apiUrls.admin.courseSchedule.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} + +async function clone(id, source, target) { + const response = await client.post(apiUrls.admin.courseSchedule.clone, qs.stringify({ + course: id, + from: source, + to: target + })) + + return processResponse(response) +} + +async function getScheduleForCourse(course, term) { + const response = await client.get(apiUrls.courseSchedule.fromCourse, { + params: { + course: course, + term: term, + } + }) + + return processResponse(response) +} diff --git a/frontend/src/api/course/course_selection.js b/frontend/src/api/course/course_selection.js new file mode 100644 index 0000000..30dc5c4 --- /dev/null +++ b/frontend/src/api/course/course_selection.js @@ -0,0 +1,69 @@ +import {client, processFileDL, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const courseSelectionApi = { + list, listNotSelected, exportStudentExcel, exportNotSelectStudentExcel +} + +export default courseSelectionApi + +/** + * + * @param courseId {number} + * @param term {string} + * @returns {Promise<*>} + */ +async function list(courseId, term) { + const response = await client.get(apiUrls.course.getSelectedStudents, { + params: { + course: courseId, + term: term + } + }) + + return processResponse(response) +} + +/** + * + * @param courseId {number} + * @param term {string} + * @returns {Promise<*>} + */ +async function listNotSelected(courseId, term) { + const response = await client.get(apiUrls.course.getNotSelectedStudents, { + params: { + course: courseId, + term: term + } + }) + + return processResponse(response) +} + +const filenameRegex = /filename[^;=\n]*="((['"]).*?\2|[^;\n]*)"/; + +async function exportStudentExcel(courseId, term) { + const response = await client.get(apiUrls.course.exportStudents, { + params: { + course: courseId, + term: term + }, + responseType: "blob" + }) + + return processFileDL(response) +} + +async function exportNotSelectStudentExcel(courseId, term) { + const response = await client.get(apiUrls.course.exportNotSelectStudents, { + params: { + course: courseId, + term: term + }, + responseType: "blob" + }) + + return processFileDL(response) +} diff --git a/frontend/src/api/course/course_teacher.js b/frontend/src/api/course/course_teacher.js new file mode 100644 index 0000000..ee698a0 --- /dev/null +++ b/frontend/src/api/course/course_teacher.js @@ -0,0 +1,84 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const courseTeacherApi = { + list, add, remove, update +} + +export default courseTeacherApi + +/** + * + * @param courseId {number} + * @returns {Promise<*>} + */ +async function list(courseId) { + const response = await client.get(apiUrls.course.courseTeacher.list, { + params: { + course: courseId + } + }) + + return processResponse(response) +} + +/** + * + * @param courseId {number} + * @param teacherId {number} + * @returns {Promise<*>} + */ +async function add(courseId, teacherId) { + const data = { + teacher: teacherId + } + + const response = await client.post(apiUrls.admin.course.courseTeacher.add, qs.stringify(data), { + params: { + course: courseId, + } + }) + + return processResponse(response) +} + +/** + * + * @param courseId {number} + * @param teachers {number[]} + * @returns {Promise<*>} + */ +async function update(courseId, teachers) { + const data = { + teachers: teachers + } + + const response = await client.post(apiUrls.admin.course.courseTeacher.update, data, { + params: { + course: courseId, + } + }) + + return processResponse(response) +} + +/** + * + * @param courseId {number} + * @param teacherId {number} + * @returns {Promise<*>} + */ +async function remove(courseId, teacherId) { + const data = { + teachers: teacherId + } + + const response = await client.post(apiUrls.admin.course.courseTeacher.remove, qs.stringify(data), { + params: { + course: courseId, + } + }) + + return processResponse(response) +} diff --git a/frontend/src/api/major/major.js b/frontend/src/api/major/major.js new file mode 100644 index 0000000..a26f6d1 --- /dev/null +++ b/frontend/src/api/major/major.js @@ -0,0 +1,56 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const majorManager = { + list, add, getInfo, update, deleteMajor +} + +export default majorManager + +async function list() { + console.log('request list major') + const response = await client.get(apiUrls.major.list) + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.major.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(data) { + const request = { + name: data + } + + const response = await client.post(apiUrls.admin.major.add, qs.stringify(request)) + + return processResponse(response) +} + +async function update(id, data) { + const request = { + name: data.name === '' ? undefined : data.name + } + + const response = await client.post( + apiUrls.admin.major.update, + qs.stringify(request), { + params: {id: id} + }) + + return processResponse(response) +} + + +async function deleteMajor(id) { + const response = await client.post(apiUrls.admin.major.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} diff --git a/frontend/src/api/score/score.js b/frontend/src/api/score/score.js new file mode 100644 index 0000000..8c8b6f3 --- /dev/null +++ b/frontend/src/api/score/score.js @@ -0,0 +1,61 @@ +import {client, processFileDL, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const scoreApi = { + exportScoreExcel, + student: { + getStudentAllScore + }, + teacher: { + getScheduleStudentScore, updateScore + } +} + +export default scoreApi + +async function getStudentAllScore() { + const response = await client.get(apiUrls.student.score.all) + return processResponse(response) +} + +async function getScheduleStudentScore(courseId, term) { + const response = await client.get(apiUrls.teacher.score.scheduleScore, { + params: { + course: courseId, + term: term + } + }) + + return processResponse(response) +} + +async function updateScore(courseId, term, scoreData) { + const response = await client.post(apiUrls.teacher.score.update, scoreData, { + params: { + course: courseId, + term: term, + scoreId: scoreData.id, + } + }) + + return processResponse(response) +} + +async function exportScoreExcel(courseId, term) { + const response = await client.get(apiUrls.score.export, { + params: { + course: courseId, + term: term + }, + responseType: "blob" + }) + + let data = response.data + + if (response.headers.getContentType() !== 'application/octet-stream' || data === undefined) { + return processResponse(response) + } + + processFileDL(response) +} diff --git a/frontend/src/api/student/student.js b/frontend/src/api/student/student.js new file mode 100644 index 0000000..7527587 --- /dev/null +++ b/frontend/src/api/student/student.js @@ -0,0 +1,76 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; + +const studentManager = { + list, add, getInfo, update, deleteStudent, addWithAutoMajor +} + +export default studentManager + +async function list(page, pageSize) { + const response = await client.get(apiUrls.student.list, { + params: { + page: page, + pageSize: pageSize + } + }) + + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.student.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(data) { + const postData = { + "studentNumber": data.studentNumber, + "studentName": data.name, + "majorId": data.major + } + + const response = await client.post(apiUrls.admin.student.add, postData) + + return processResponse(response) +} + +async function addWithAutoMajor(data) { + const postData = { + "studentNumber": data.studentNumber, + "studentName": data.studentName, + "majorName": data.major + } + + const response = await client.post(apiUrls.admin.student.addWithAutoMajor, postData) + + return processResponse(response) +} + +async function update(id, studentName, username, initialPassword) { + const request = { + studentName: studentName === '' ? undefined : studentName, + username: username === '' ? undefined : username, + initialPassword: initialPassword === '' ? undefined : initialPassword + } + + const response = await client.post( + apiUrls.admin.student.update, + request, { + params: {id: id} + }) + + return processResponse(response) +} + + +async function deleteStudent(id) { + const response = await client.post(apiUrls.admin.student.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} diff --git a/frontend/src/api/teacher/teacher.js b/frontend/src/api/teacher/teacher.js new file mode 100644 index 0000000..13066b7 --- /dev/null +++ b/frontend/src/api/teacher/teacher.js @@ -0,0 +1,64 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; + +const teacherManager = { + list, add, getInfo, update, deleteTeacher +} + +export default teacherManager + +async function list(page, pageSize) { + const response = await client.get(apiUrls.teacher.list, { + params: { + page: page, + pageSize: pageSize + } + }) + + return processResponse(response) +} + +async function getInfo(id) { + const response = await client.get(apiUrls.teacher.info, { + params: {id: id} + }) + + return processResponse(response) +} + +async function add(teacherName, username, initialPassword) { + const request = { + teacherName: teacherName === '' ? undefined : teacherName, + username: username === '' ? undefined : username, + initialPassword: initialPassword === '' ? undefined : initialPassword + } + + const response = await client.post(apiUrls.admin.teacher.add, request) + + return processResponse(response) +} + +async function update(id, teacherName, username, initialPassword) { + const request = { + teacherName: teacherName === '' ? undefined : teacherName, + username: username === '' ? undefined : username, + initialPassword: initialPassword === '' ? undefined : initialPassword + } + + const response = await client.post( + apiUrls.admin.teacher.update, + request, { + params: {id: id} + }) + + return processResponse(response) +} + + +async function deleteTeacher(id) { + const response = await client.post(apiUrls.admin.teacher.delete, undefined, { + params: {id: id} + }) + + return processResponse(response) +} diff --git a/frontend/src/api/user/user.js b/frontend/src/api/user/user.js new file mode 100644 index 0000000..2fb8aa9 --- /dev/null +++ b/frontend/src/api/user/user.js @@ -0,0 +1,20 @@ +import {client, processResponse} from '../client'; +import {apiUrls} from "app/src/api/api-urls"; +import qs from "qs"; + +const userApi = { + getInfo +} + +export default userApi + +async function getInfo(id, userType) { + const response = await client.get(apiUrls.user.info, { + params: { + uid: id, + userType: userType + } + }) + + return processResponse(response) +} diff --git a/frontend/src/assets/77491171_p0.jpg b/frontend/src/assets/77491171_p0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb829fafc9c702f65785bc83a86de18c3952dd7f GIT binary patch literal 468351 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%0AcWGk^ZZ3Ozp#-#Eq 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≧-K1td>v*y7SN1v5!g0P|^? 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

HaVGe*U5af6l2qFxs<+ucyq$BJgeku!zvR?!m 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 z z9A8q2q2t2~`QtV_O53p1PU4d{#7M+Wl+;C04)U5Vx(>{5Q)-0^XvIMcv6@csA9OEn z1z^+)gKmPI-tZ>}7{|m&s$%k8$PBC0Mx0yh=TIMa^syFJja;$^Q4}^sCMbK+FU&q6 z5MKATD>g(+nM+WqRT0Fl8)g|ON}4QVu-NkeN4m;TQrtXLAT*00)iX0-CrNjSXA+3F za?E(dY);V!<1iryMXWHXzY%OKQ3maae(7<735XahqpG{F5iIcnQDX^eaFMZGMybOq zOo9i9>Hru^mQl@tY(Ph4<|;7G8ze=_)Peg&OGO=#(PE08zPZY9toadkuU&)7zO*sq4r5?8Y0-y$cMaAr7P<(QEXImS5PzS)j+F zaDe=i6foF;lmxWgL4s1U1Ys$ZApr7{2oq6^dIT{DH&6}?yk>pKk37r5;Ar&}>dt9( zLSs$zkKU6r?uYV3rB&?SaTma6A}m~#u!f%N?UY$|K%#ugZr3#!52>Sd8>SjSLz7+~ z-al85R^t{WisDlYzj$)q0f|Z53=v#%#w25psc)mms%@FuQnw0WdQX45-I&Lvy#D}X zPXvlA00&pGJ^RMK_>Fnqq_Y#~AT4*a%iyIjltP{iu;Vw`3Q{1EV`oCz3RI^#gS+hj zx)bpg!zke^_MQk}s1RcKo#spsYQwHexi9izSu{bCY$2d<@JAYi4iD%O&#@lTU*Tk# z9jww5o##?7LbWX%PNvEPlwkr?l^J_;7-*;wFXUyNpcFI+GgncwBOZeA z<`kYGFRB8(-0I7XmhV;U8qff-89Dgtv*FENV{e#RlOrdjv1 zM-^j6E1pBXjKNxFez-AO4U0U>FHAkZt#ip596Z_a28usuI;EXBg9)mEslawMJaH9J zHj3h6$T1TtD(VktxL^pdnhtLeL@3)aD+(1AcNS$RC5%}m`6UBTLo(4(gs~O{6sJz8 zo$*6FVAGzGwxDhf1TAFf2<9ahEY!#-j9?=LA_@rTrAGc>>88{)ByTg}i_5HEy@i6x z6fqFhWb+8LPX-IZ8VvS`?*YgoAct`~&NFFxw}+2RID)fE*i1}(tuqPnj;uv8+TLVg5`EftSK%axWvmVrdOmqa$8f(TkSgvEW`;UB1)Nh0<+UqsN+ zKLR?uu!2P))Q3ZCJt(AVyC0z%mXN;ASwJ^xcrZp%Wj|<^G0JF$A<$eVHHHw_6m*!! z@E#brG%^z5E@9F#9^r_)6CT$R!e+>ZPJka0)Q1`O;3%k~Cz*T@A~2vTFmJek@LM0Er+)tca(5SD4x5^udIv2-9wGpLtBK{O>MToC zPK(mwiY0{!Wsa1pR{ime=T&lESAVd=dGydBcmtsb+sF1w#s|#z2)GNDih?|JN=e>W z88W>?l4|oX$0quWdD|3Nz+s;zJ#{(6G+`86teZz>D=)#`7a)2vk(bi0YS*z#hn6yf?hy-$dP=M zV~Y)Z@%>JeSt+c?2Yf0Of_}(39@4=C%%VPonKy3h{AU8zSWbHf$rF$zB4s%|4jnR} zR#8<+vFyr8knqYpm1RN{H5B{TBxTFGOAhGqj+bmCuVh`2y$kH#^*^Bn6 zf}}VqU?v7D<|-gRHX$qmS(sy)9mW}BpyZ7hw(cHO5QGCb7<@)dC*=dGFvD{9JtzTj zh&;fvF2i_&c%kQ%mGV=<*2R};#JWWB7jGzT+4F{ z&L)=B%ZJYF`KK~Xy^!A}Dk{VnLkLcwl`Ak<7o zXSg8g1IIamrb*GD==4s6RH+Hy2*sQsQ@*7t@Zi7bm5YVFz{Yt<@~Z`|!!Ez<4+k)~ zc?IZB00?tw4@7~N0~kjUFqN|cLw~1HIPpH&*wL>9*&ni|4jmqwnUJ*T8I3Og0A}Oy zt^Cq=Md*>lar7O)jOS-FH_#PfclgvJx>nBLn133!dKs(U!$cKIJ1@{>tv*u$4{|c7 zB^F@}RYW%!;=Xh+atbOQ1{ozPZm96L{O z(Tb!A&R{$+Z_%Xcn?;I#2agjKUI~$?Rgo&%0%!jKsVf(_Lpb}$8c+bB3Mp;#thM~r5Ut$m|vcPNXflnY`tIP^hYOxr$X&bAGm(sU25hXyG9SFFJ0k$%Q z1dMWS6u@dJV&z$l%eg}Rd4(-&jGi1tnghB7P+-Do1Q3-GUeWatRPh+PT2wl76U-{E zF@uJ=f^~397|ejImjleq%HmppjU&vSAR3bIl_pbb0{U8+SEd@BCj$$=5{;6;fe=^7 z4q)PmOt73m$++}h2$uw?n7LCVe+DTSWrbLsFGfu0heqQOAmd2f3TF*b6K>PV%m%K! zH>>2)HpA!*u(1vw5wvxR1TEAzm~eCsfT0M)0a($se=yRz+w8CfMXS+?d4H=BVQ^wV zY6P(fi&g;ar)l7oy1iX=T?dHBmRjh9P2_7KSaMo1?Sz>;*ZoTsztBvJq7usQ47(B^ z_EkW(iadb}YC!A?kL?cJG&b1TV3iplf=y#hHDqm8@l3Pjh$vbR<%+_A*!hm3@q4x! ziwNhSK#B<*V^=@PmA3=vV$DSu#UDXN@TlOadzf~8Ob=9fHb{9JLKb`E002;R1Wf^K zY%Gj0b1UfQ8N5k=iXIQ=B`&?=tmVN0I8r885h>)KST~EC!apdl&}(4YR6uvsBB)Uf zgk^A=AJhn`pV+zq-JieUMo&L5M|1X5O0BtneBKE~5{enj^H8(+NL;I;W%Ue_fVGUj z(E@ga!(WlZ2z}*Kh)m_1kK>MAy=%cKj$o~p)`3V+>aN*+mLf1k&>xa$9SS!o1qJy& zp^6k#dfxz6Z4J^b1z3G$ssL1#cA?=gIE-+vFJf+?&O66BR*Syfkx`;DoFiG_qN8p6 zWQJIzo|N6@+_Mx+uJ{g6z{<6KKwy_AAOHZOVeG*LY|aC_9gu7RcvopxD;O=K?>L!L zYk>0&!HdLN4YsAn-LS$K0fjh>}Ldwnm+L=$5nfPx`EU z#MFTWp#(!IZUuu)N86(8j{I-+#fQ{v**juAVTjNn7AY+AXX(y9;KlT>+}g{Pr$|#p#fIa z?#o5356kxs`NF$}RHCo%~Hq4+%*VLW7Eu%L!iQVLS3S23}iggvtSe`3RP z0155UWS+u}?(F+&VvY;vv?v@0C&4al<~tKA>=+UO6=I_xE$3W0|62di)ed8F%Y;#Weg{1mMOnzmO?B>k{3nvmB^rhU4Xp4AR1JXxB0CC;ueHICAvhZlJ$S4$Q zhD2j9vfjn8=?+VxBzrO1++DjN9YA5ae7fIczuBMb<#FJx+k>wBiE@D@Zfd|0H7tqQHLLM`ksuRSc=;_1z~tGNL=QO;lHs#r({qM2u54tKXMD# z5^qg$@Fq~6Asvjy8Cuj7MbKgBa;K+p2?(Ya+hD+Kmn^#C+Y-MJ5%NGULa=Ha5d^pp z)}p2>q>C7_x2QmmLcI|fNS!JqtBEb>tAW#%ib5Rq90>%=a2Ez`n?sTu4j)5AY^2S# z#{qsvE?vQw6lG8xTr&otN`om&pfedJFZ60=ks-oKZUGf9fcuVtLtFiO zj0%<{rYXz}bb2g7(-D-Q8zn-@A0^63Y|45jRu&cx!J=3!ZS9vwWEGRqk=ABR4(xxs zi+CRQte;U%grFD*<8Y2schuxx$UxP)7v+t(Hp;tMBV@nB4f}$SdLR;@D<<+x;3L(C zK>}2zJ4GZ~4SR7e(*>@EF-OpBIWSuQfM}Oi${`qooeSqt-S#}j@#mlL6yP~?*deXQ zeFlgr6c_~|2q!T~h_;phhQQEA@Cu%6LV6}IX$xe-ieVtSi^=5ViTfbog^UG*yDJVd zBM}19t`A_95U8P8F4~Uzr)yOQ0%hu7w^ad$elbGd|^ZALkSLiLF@HL~s6-aA9J2Fx+fQLYn z0u!G7CjS7iotx^=7v`xbar*#3^GpYUFG2)S8fcH=CzBGDHG5&x;t)iFLd&X|{{TXv zh&KS0DG}SDa}qHl3evi_liCp9mJab61_ka>%tju;9_BCdVH@Q^!AyupyuJ7^;^p3m z_a#h-Lka+k#w-XB9pWPM0vO|>=se@KAK!NX9RpeAx;t%Z$W?iXX!hg6knDimkL?p`hVhgD}T4NaWxp`}znyF|q=z<%9Mn+P* zY1hS$>?)8bfaSlpUAlqAu$UuZW@c1GMq9gts&-NgXcjw7OMdLz+u zLdTgX`4Ug`L&#yw9gF}4fR&1{q6%WO2XShkAO&=l#w^sdt%A5{qKQ80{61`s3F!HGxD4$^*^nR^`11rWd!kjEql)rFBGcj$lK>DgVf-f4rj?kMSE+|K6gVU(YBtvqL z;)2F3JHRKIkTcO&(2KnYsEwlkb(hLcOYY^!7)6sSA7(buqi3n0E$K^ zmG(+h zx(B%jtdR07MV*Q4BuxHga^ThCS1m}}F*adhOyaOj)#hH{GBAl~ad9-jFG;_dfL4>( zBC{Lpmg8k!@JPcOuOz*Q9Ug8-?zVU%_;G;FdH{cWQ$yJbplDbF@9zm*y=vZJ16hXz z`>HW!=9IYoyBUAy?mdIcG++_uvwG$#iYrE9vf7j$KkviXhwV(L33xW{=($`Fz8>{Ee`08~qIK$dqQfSd9l4Y+7y7EF@g7u39ff#g(c!6=DhsQ0OA>r-e%xq)Ra zVFfxE%(^H=Mj4KTzL(Q7u}$h@H9}Q0Wkk>v9K~TG3e4Hh^$B4%FYpHe4C?26pW78O zjE-M`Dg+AZ$D@;*(s}SlMSK>Wu&5yi0Z^E>;~lS1C|JkZRA`ra8AT-!K~ayH36Hi{ z0usnI!D_S+#{#c1oecTQ6TDISRB!|Dmk}2+S(JCShi)Fo821$ot1+$>y_mJcy)$rE z7||jRF9*vF)=hhDgH3!H)@Q|()%*}r$UOulUc@$up9?RNf;sTtr@{@|<8|$G1iHY9 zVZ;={p3LW_w$0ePiAQ@U*vv_!Rj3Z>fK?5&fMGIM!ImjOUk=DMETP(m_KNRwx3%v4S21FpgjM^+Z%Nxn zV>!zf(EZ3Iq{R@^PiMI=8$jel658Np5u?l*(ORhz5xZJ9^gO`U=gs6fP^GMPD8)2} zS?$eK2PcOJ2A7V1<9Q{;dpr&kk%orgV}K=4qlJUzmPqmt^WG0tqrOhZkkAYc&B032dqXfkMP)DF3a1Zq&cxq&KO@Jl?}vjjx5USJmO z%&$)i0wEeqfKfoa1kM zub7ynv0?~}UZV6mT)9X@3c4pfu878{rkE$OC~}_>CigM*P@Lb_b1Y$p;2nU7)og8c zfu?kz;oIL(l!FeXqC}~2gp1&mmum*GQq=5x5Q|$5WTT{#i;K zjA_Y*?RpE2g<>5NGvt3!EXI(pMHBas@#4^julY+rj2s44im~dE)i1IN&hmWC92F*7bWrc%RuqrA>j06B+p@suU zmLnNacM27?sF6{c#G(kG1u}z$j;^Lj)=g|o_DWlJoU;gNvys{q)u*&y%2m&cL|1FK zbE>{p0*rU9@8P1MXG-4@rsBJ>4u%^40KjE#g7O|86B&`xa<06tICvFqzA_jyqYs$Y zX6@!}ufv8DQGe}5V^FZy3iyfA06AD3+)Gx&B}}EQo737TFmx zlsH~9ExlKQW2{yxRgjAySOZ65QDajqiYy*YnMMK>X7$7r?=_F^CnBIyR@oe@%vOa< zP1ayGF~VmWj9cw3Z3P1ah6R|Ex-~H|VQ|1$;z+g(tG-c#B*W2gn_*xudQO5@E+8)~ zF^!l<1O;Cxt?qOPLfpYxgh328%(nnR46&&c$4)1QmrD-V_6UUBG(-Ldty=|T50%N(y4cY=xWisRl z_iG=f{1OLJWdadIN;(o1fQ+4p*bh*!1BD{J)CC3YE*;Y_nVgMP5fS7)NB}fLI)o5a zQrIoBILx#zTwerMFsxzh#a@YhKmq_&90bBU!E$+Hu}-)|de#&?u{u>y6geZ7fwopd zN9}`Nm7uI1UI}roTsdST)LIC14KpoJS+q=CO%ap0{rIX=!3p&NEeB!~HW)0N$;NTF zH+Zuybpk*s0RC79q=5wvVmYyZJ6|Zq5FvIbEf>+O``}BmLyS#9f0<|=scf;pWY9sk zz&6}UQIwjXHu(OM1x=?tzbK{k+!bLUSl8{AL59`tE=qw2Rg0U+gtft;20=*c5bRVs z6?}{|L4b(Mf!SSRC=LQC0Y>Fa8l{NT2PU}PL|K5^!eH7(1~0ltIOi_)2mq&ts8QRO z%M`q?E1Fkbq%okSDLE|AM%$tbL#x`Cl0J157dwht)Lp~|^`<;7fUSvBN(G#dGRU}< z#Job+sa4=37+tut_jLeD-~bc{V4B(wv^~KnWN^IAa{vGU0f3!>70>w?noiYgIjZ1t zMAbr?clcvApUT`|D5;0bQT^sSGZ?k0S%!*Z7JCU@MJTXy-XPct6S`P{kE)k!l-0r3 z+&vTqD-AGnt=K+Mf|fgJxKM657#fE08ibl=DvzMd+9FNB?q~Jl6KLx?fbx}jgiU<5 zE!5HLadQ2+aK(Ff7UBd|fN0q%J?q9$%ecBiyJH$wqdZM{O9lZ_- znR$Z?7jQ*HGMpHVzEEwzn6|l#E@+@up~8vZWPr>Nw!UJ0{pGYX+HM zcsP!9CnL6^EX*}3Q9-OLpYlbJhBqlyh{&R>dq99|MRZgM@|*2(gbt|@WzHeXEx2q- z02CS^?cUP2u>c4&GLc$}lugoM^YY4NKp51ZL=82|16n(*Sb^@xSpED)FaR>NOAabN zS$O)xX?KKjZUA#)Yt<>vlGv}GvedGCB;29nGbON!i&fE zjWUsLC1E35%c*1N%{EfTG%X$up_f`U56doy1+H0l3zeb+8zR9~JDJ-x=Mb!}VhkX% zuE6kI2ZlfQ5C?woySaX@^KgEIlfY&VXJ?WUs1cCZoSB!fr@ojGOB;fZ3MkRt7YA#^Ld1^&atF^Qc*IAQ|nv!|`XRdvL^uP_2M zT&Q0QMq!&EyAfCz9wm6xM7tjbdjzKaKUizu3?<7q1DwEiiLBjxpNzQtYCqgk<_Uv0R~lw!h{gPrddV6THpvUp?rx+ z2Qe%OXHy%OW-jFsj+QbGpqV8*PEa_&O;wqRBxkOCcdv+UH$;vK=$kE~ed*svI zMdNJsZrzC0xpv@+t6Nw?(43G)M`x3Hu6(Bt9CaACh&}5m{4Sst`Q_Sh0NdIOIuI!` z=Y6XMh{;UXkC?>8Ub%|lUl@i1ZLmyG0o`CtDE5qlZ+n%b6)MFy9tl-J6!tY0;yhAf zBzh@JscLf3d*PU@u3}Uae0lOf!znnB+ufL_VlBhJ=$s`*;HN{o!7aR%ea7#T8Np>| zfDzMoR5@l@q>qth+CBOx5vL&#fKk;(2PN$ zP^7*G@A11{gVo@OQlkD5nrKT$VHXb~klHSi!htyj2MElul~;&(uf0k##6FXQIc@$3 zr+8$fE-VVuPTVtYh)U3d-7ZpujttgORD6`$I~OuRuA^fZGR*xgMd29e#UFrd2vjE( ze#iwnZI;Uz*O)%WWy>IKqug8S-om$-Af=It{w*S8%uTxk0Axt_k`ikZN*)| z^l=$$G%TuC*cJ+r%r*&863c-wpsX2EhlgZz;PS&SU8Z4x<{T132Oecg;->|cP=vdw zKvE-woS7`bR7Du#jhHTsBvz|Nr4h%BOw_czs<~sf`03`#pqKvu5L1lgW*&!=RHGBg zg3}7zQe_y&tI*Ci20~khFkLy}hIpll3tS6rGK!)+lQEGMWc(^uOX{|YaK0GDfz9F? z6vT6UBixRohirC*GIY%sh^BA~s)9@GDl=&NVhN!40u!_i>QdI=D_$y8BfoehR={k; zA-53f=h@HYH|U9dBoAT4P~D=z_&j-(dxfn@OLEl`70N)f`Ml;d8hxZ>psh z0vWYtW9+f_EK5@xZX0G_6@lfR(|p9Q1SD#5yv_&|D-cDbd_`Msc5G^lE4;==*5*6U z=$4dfGIwZzJP?S&?E+9YQQ+mjT1D5p!5nmhSDN>MphYy&6EJ*fAd%&h)@;Z3%?LK(v+m8FHop1@^MulQRwKdI&JYp$?0oSC*GI$S&J<-?*>q ze8YX{Gi!?&;roPRQ~)QDj~g?2r_AQ|9Ve`C0NL3-xOq3n_NBlhW2y`vD*%%zelhF(i?dFv(8T8@;VBppv zg}HJJt86jrQ;w6-_&*}oAh&0{W?-tTtQY-zP z%!g%So*{mrV{R$9nP}8QN7cYV00cd-LLD<4^yc*fUc_lQB#2QGVXKbiNzSX z6k3%Nn61JQ;oKtCyv34xY7OlUdKML<+eEN!@@(?vSnB1_duAmWDVxE}CpTm=WVu?0bSym6T z2~p@yhiedMuA6gaEPxLCV6zE!mY^$M(TT?2|KdQt`fIc!{P?hiIB+)J=t?X=6_=J5F zYE#Vgmt}we0)l0s-&{(u!xs$@Zc->_2L>T`1t7*!vC@*}1w|N<7y~IB4iLhT!{QUy zBT&kSpu#XXNXijz#v&6fR|fmxj=jjXM1l!jB#}fCj)gi96fs#~T?NbHoXT9};So6? zCgN`#9#B+~j)k;M_k9Hff~0V!81Q}KzYB%~Y#vB`!+b{L(6OT|dqj#Dn2o}&<;HU6 ziJDa!FbM9VZaRM`FUY7=b@qn!>{Y?U<%9#@^G~I)Zt2&gY7WTtA8VU>Hw8 zL^9vtb$@QsFybdX;?8SMB0s>)zW!Ty5-XBS(U`T#W;%`p_@h{6vUV^%0NZm zJ}?H0Ktv-FZV(o-hK*-;b^*W7VH{O+h$x(o^OYqR{AJK&zb+y|EX1N`(h)PA^~4!H zCQkR%On(6E4UDFf16>_sc^Rwyu-jLmP71_+!qx@2Uu{(b$IN zyDnct8E)sGl-Ud3ud@SIj4Tt4vgqcx-8f$a%{`(6<}e+X62DnM2gGs(k>4IVU=p3; zw%8Em+0x7sgj`qDb#IKq`Wnoa44Nn%$^=(rmOOb}%w{+p{37<+K9aw3AyIMhC6cze zii*>><@j>~pc2608AB*Q_ytv<2-0m$R(3lR1NlAoWo#>F5P}PP8jCV22HAHac5v0N z#Q7lU42+wUf^Owr4x{RCFuXh7RRKOa`E5{#7jsg$ugs=f7snA=6zJ9wQ7rXC)3>-s zR{sExF~J(GC+!)}Vq*UQ<{BD5^VxUlnhNm~NQk#v^}GO84#GEAE3g2 zN)9U)NX5OpOwGe7-t06ojA{76(ZDMjs$Q)NJ*Gzy=#oNF6y?rNnkURr7aCam;`dRe zLeA$fpaAHgA`smeDt<}AJk>Xvk$t?8xB2g{Ot^cS5g8yklfY8g5Tj-hjz%Xy!2~Qw zF;KuJrUnpEL5F1IcL`s0Wo3Ad$LlQc)&4-hk2vD=deDGd{{UQBPyUxK*+@sBqw%Pa zmC}lqlh|*?N3{TjB1=XUCzG_Ja9Grf!c3xWHbfo`CNPO)RAG1{krabxJfIrlX$(k~ zENv1Va+x?pX}iW{K`Vk~+}Yls-9gk3o9rOLdO0tbnR*~P0)h&_71T-0IPUr(;6c|u z(M+?5RDv#N^Fu3dLeDN1WmlfKmv8}G2Ig{F$B0k>V20PTly~X%ECIGs`GL-j34aU( zpe#nj>9X0qsYCGud_pFp?1O>`sc-~3C$u*Z8o&Sy0CWLdRqny=cf3#cB7>5dR}}AC zU}zvm9V4GCHB{WdCRN+ASfH~+J+Mndx~Y>x%c459Z%B+Jaha+A06Q{K<(=*CCt1cH zpfCY|m(@Z&y+98tR{a(*#c$jB()`_1(3u3{Ji;&vq!4Mt*Akg+4M#k17>*6HtPu-h zYM=t3N5rDISP)!BVw@Z7eq<(eq@bOfPcN$X4>t3bqMoo7(6x9bC4FPL@dDp0GEqjbp_nUa zt`ikfzHt{fU=F3NsS0=mAc(?npYn+DUyzW#wHx`o#RKB38oi?dqlt}I_!3YoU=wn| zYvut9if!PON?=D2pkWQz{{Ry8zWw7}+vZVZ3ZZr#;BpktD}?z>vXWDI8(Nm=r%48d zVr3ygFH+i#fT>Ou?7)8m3l_={{`@s!-|ANMr1{$v0*W9|3!DEt_>v0&yMjA3w6=030~YANRGg zfKUcs38e7CxgCV80079B$d;VyKQLpWs&YFI9%nqz+62F)1S`H+NQ8w}>^nheuHA<> zsw>cHfUwh>fz%zy@Ho`EX|4kVDPLfgY<@5P^q^d-f#8ny zr*f@m7`unNpd*1ADRt2zuwbmWl~4jQBTp}hLhi$Nv4$cn3?|P~$eT_WQBWXvsEUsY zX_%=ZN}(n5>QQkwgo@1)ai%|BKCnOn{aZaoEh(=%sYk#u7LtuHQ?OzY&EO4og;*h( zv{-|hy^r!UL|zsiQCxlig)vItq`)~qg0rNAdX*GFPL>4%0^yYcrPIW-^bO#Z5ri6D zp?lE_jI&b20Rf)tKtwtKxBH&$O07~A`*VT~F6S7j312D?fNaRSRYikjx zV1+xt1nF}<4T}q;3yq37`U1pPH}`(HB9S9sxv3_NLB4qdmf)xUadd3o_h&$~A2Uo| zl-M`4#Wt)o1(!8hidBzdBD^jxZ|mZM5~9P z5Y7TR$ax7;7zKa0ngtupP2)y)iUDGlK+@66S&ZPh{>YRn)L&i3H3C&g@nHLH0UI#PNJ!+Z0S*MXFm*X%3N60(8Hz?5MMoK;0s zqx9GkaXpAEkLi;OU_hAssm8FdJ; zWE1#?sC`O0Y~CI}nHQ5@fUy--&oX~5DXs>+s}F>55mZ@Y0a!OEOAtp)1fYbA!t@f2 z{D@&2A!EJx)(HKdX_WE8hBk-pDme0BAN0eF8UuSkxrmEq_SABrQFbx)ry!`!DH0l{ zaKx*~`G?p1UQ7NZ;E)s{E~KR^m+T>Z5Q{KI!$>a`1JMHtpytOpi5qMHtLR1xJxIJdl_D5uI_B+)4qss1-)71Wi*!Z!A7rOsA#3wg#$sj zAeMm0(1&>7ID5u)vxW)I%rFJqFvWtI-2VV?u>z&9lzWA$4coh!198-T`F zM}erilE4F!1DM2MazUU7Bj@u>6EhfBp%fIWnDyRbT~{y&KTq=|{!}}=9`FqCcN-Tm z_7sF>L7PS~7*PaDz);aNM8^lAHmez|9@o~UWyQPCBL}^nc6r%nEWC6<<(C5OAY8LI z0~>Q$EQ49Ls2Bk;(mAY$AyxCjO0sah>YWX=A`F#9RCd+k8g=$()y%7}Fptz`1WOo7 zl@d^dg@YJVpAyh2@eyrIrIDP-B7;MQWmjX8Y($8Eu^dMLGk||NfcW(NFd|ggm;y=4 z{{TZUL5rA(MEZZ`F>>w&n1418p&NOOVMk$tQ|hXWu2GV!a*7(%fezB&3;+ljd0p8` zfkb9De8nv#pCM))8U%P3VOA?{>Mra?M{T?Y5wPS}U@%e`R!cYtVLK5vz){t#5HRvz!58FPwshUD;LC(&vB9+JD~QL55(koBNtJI()tyxd=Vlp zy#v&^?DdEFnBG8$vGs7fWKRRWvfZQk@mYJS0h)xv!{6LY7$QfLDiNp*QrSS6*r#%$ z%LrA1^IE83Xae2h0?{cUWo)7tfT`@zPa3l3C5*d;jS99xT9z6kodls4IRJkVzLOCy zKF=%)M2t1gUg;gfCb!BD?kO#p*-Sq0KU~pg-F&fOSO)~dM?LS|bf6j+yv!mYIZ%8M zsuF8!z|^p_xqDc)deM(mw9@7V7y=v@3%oEgkTBu_MplCt6+-%&B``o_h`_MI+LT%q ztvQt8p|XAGz5GkrLXmXV*jvou8|Ee)gSg*<)$l<<5GW{9nu=Zm!7Pl-DOM0F_Y`2v zToYZh4YEQMcp+jQ6;GIe*KozfS#zW$7K}Jmh^Esz%mCt8Loh`~D$A6El4bxRG_Z3u z(GW6{XGxOtGRH3+E7iojd4U*Z9+ODY4+Xf7DsGqvC=%i;8Q*bBfYn7wxIj(f8ip=r zP@F*zTxM0JCNGIWV-|pxfVK=lA25~}Olp^hlmX;ql&UeCe^iE+Hj94XRFLZG1wz;G z!m*$Ook3OU7$S#pZK=!?luQGo3UVY=H{c?8{>ZE6G(SrnpL?nM7$|pvI{yHj;RFzh zD{(ayJVZo?d(<2A>}AzuTVjC>HoJxD+%E@;A@Gd|ex@1r$bGTGFi17Lzl{K&$Vrte zEM?N@gxZBCpAbh?N+2_UhQXd?Z$Q%#mLC$a_jic39>lV_@ix`;$7o`X2=f(Y@qD60 z`Mq2XPYxA>27WU3Aq@^#a9z#w-4=&!u?}|xu=2ThJi}s@sg(f_yFjjL-bh_~F0mf< zW#9d1ik8D23CcC_LrlDnwp4wQE+Pzt32PgYujKfddiw;#A?8yG(*8&dOh6#0$SBo^ zum^td)9phdM;COok3ZoXDGjU@vMfT@toaKuHd6s^p+i#Yji}|+3uc~t%A&Uz(K%j> z9T|{Rg0{+PQ%4UkgNPUOzS2J4IYt-+b_K;d(96GNSfi&IcbKvB%i+4%AMi=&aX`ytnyfKu|YgbKO?-#IvH!49qiz?5-lqOjHmjpcs`2G#lpOXdw77 zWFQN4e=K3rQ&e5T5Cv1p`k5Pb6ohh6F=M#%q#raT#0R*CIp`&%dSMX~VH4j9(KCN+ zpc;?)2Vo+GiOelaX^?GY=qUi#fUx@UP+B|;PA~yxk;HlyL#6nMs~l?MVpnHGYT={Q zQ^ZxPG2yqjN_&$Pe9X&I*k!s#*R_+>G+n|Nzt-3YA;q;RSrfE&lc?|A;EHW^u2tp^ zw+(<@MQwX$5yw8;9^;QdE>zqTx)=ViQbG@}+#JWHaq0 zSLL`Z^)G{2Wma}Tk1}_Cdm*YrhCtI(0zi!c50)X7DzNQuV9|zI8mj*QT_QM*b>WLw z2&ZNM79Q}*tkG+~vJ8>EeZYXAH7gL-{oycBBzx&Z0%JztxYxdzp(a`)ov2z75td}z zN+OQCU(B8AZ3Eyyuf@TJqGi4nE6GG_t8rp!g=#Q`^2dJ_psXZmmgArM2^j62%7^YY zQXTP!q%q1~>`n;1#@gI0OkLwR#7IU$0Li2vN|g}6>4JjzVbORaqpaAR; z(44@IWz5Q;kMfQ4o@J+vA-l@O)F?SsN@%qTyoa^R)P%zYM45m5H7*wbYXs-Bkc-}| zmb1Y*J=987RofAnY4l76W>wYJIe^A?fA%ve-e7?V(SsJ^a{(2p>6zQ^(}K4>_81^? z5G4RK1Yw3o<3c(A0GeM7xOfl;4aX4Vqk9BoLj`GpvI)A4qGez>)@2-a7c1=yo*>6` z9nO`k?0vHV*~acv$Fx}kuna&<93Z|}Ww0#EVgad5TuO={_RL05233Q7D8^-z74d-x z#xiQu_rL8Jsy={|eGa0jU=||*Q=Fk-XofrWi)R*{{8YVRBB~x5j71FYUB(EJ=H-I! znqMS9M4g8!1*;hAL-v2#WffOq*roRwZ=F>HS)jPD5oyaZp~CO()|pg&!ru#|KqDEx z>D=3vW!Ai0j>27p*bBHMUMc{QorxmX=!5`mK$5?>c!_Du(k22d7ot0>h~P@j zf|#Y$sOSQQ*@}gb>>?4Eq;W>lm{2<0y*x&y1O~B<&x9YFLnpZv3AueY13z>XXz4tW zM~^UrCF{a<0iS=KmqLGG?g}n-n{Lp?Fwf(Pl2-h17&~3Q1a4=|=h`>Z$Tpy-M zh)wXEAG0}xQ?xbS34AR+5M82^FF^;0Hk%_5g{yhiH5~|#4f?@o;C9p5dF(D zPVmn0^vhUBj)>|(yJA!URk-gmNBK(6EIG@Gq%R(358S?Hqn$Mc;6Pq{FbGPO(&!Qy z78a8FstgIZYU5ZObkt~|5lTJx8&zxVl|vi?6;!naax_tV_#uJFONgplmzGci0jL>5 z0TzT*n0~Gjj(LX|A)+uZ@d%U70f)v}7LfQbe-QvN7BMNnuoGO1n8#P(FPL09sK@$9 z1?7COvk?OmYosHa`$`eh4X-RpSx`tNbXc2}LlbXk&vsky`&c~x0N6?u;FuY4=e;>t z^b8+hJhc)j-^9YzjxCh$6r~95*nlHMW3x@W1jTihnAWW@j2Nd4c9h{gdn$Nfx}Ya< zh40_kh{rendP`j&EJ`D#a}iB4UIGyE$8do2L|Vl}0#{x7tgwJW)WTW1Y&a$PA#$GZ zNU0MHWv>K!1~7Jjm$WYWaxlK|E|3b^Ivh#8CG03OdXBTlFAFVNwIKz$GQkyYxuGUfH^Xn{CvES}nKk zgls}lUWfw7t0^$kAlSHELZpvY+xdhx&qmeZ1WkAOsaoaR5#$&ysQSQHzj;lrSPelL znkcEkDN&8EO!GTrb*k55G^J^4nK!fPc!wZ2;#jD255{ZZj2e@n97$XZ8OhTuio6pP znCOC*e zASHsxz6DJcqlPBP1!5hEX>XMaUyQ+WjChzqq6`pK!-*|mR86x~J25q@uE63q>+oeZ zm}=kRQH-jaxKen@5}khjAfJcrh^+_-?p|PcA(3185fzol&-TLGaq|A=!q1R_R`>yq zaSF|-J)^gzxr8Q@c0&iYQ1${tmW?dSC={L8$obACrW-~$P7sS{958JmP*A<$+F@AF zh{RVVi1b))`Xxm{qY+rUy1#Pn(*)%iM{!cA?q)3T!nwX-)KJIRa5-QJ1hF9rQ6Y#4 zpu_+YqK@LX5r*PpKCDH=#|K0g5;@?NwtT!E;3Zwo4^fW%kek2%h zucYIZvNq;G^?l17B`~(*08~`hCj_r+gd@{u=gSDt1wbh6DhEZ0L^8mPj)yVYd-Bk- zz&C6DcnE$&ow@JIm7eLb?90fS7m$@1m(17kq*@+sRaa#tK#wsHfIFCL3L+)w2~UAI z?Dvec+YhLV@n`M}U*wRlS7gK$m(-@k?ihyL!9}nHp#)oO z!T~8qa53pEZeKul^9nnbtx&j88F}*;C>E>5MZdkCYo!h~EqD?12&o6+w*3NGIF{6T z=bN0#{{REOW(zXKqtnRvV0b<|cb^g_a%!A-Wl*f!HPB&}7%MT5UCpC|oBrp-bq4(v zWR+$xYlwUV&3Bk5d6sl`tBf_QC7vSD1@1c`0to;D2(SzXu5Y$bWn7in_W2A2Xv{LuTdIZlNA!vV1bn$TqN7})d>n?TDH{h z*ApbM47ZZ%>>e3h!rizrlc|&2u!B`~z9~#G_Z%_tt^u9Z^2*U)vnHAVc#Nu+Tup1J z*JzD_Nl7pHq=`_vut5vsKkc>_G0=hZM(8}O^fo_@Mc%+3Vih7xS{Yt=2nf}m>?Pm5JnbXh!_kHc-Rnu z%*~iZFY@+zA*D#VRH!E;MM1&=;+ifyF8M<5jI-V=5Zqm00^Bf!~SZDs&2O_m>bRv(qXo zkWq?>3&7n&E7LKkM^cBxS~?U)k-*%-8E&ew)?(D;5lt(*Gee1TFNnl$)qVqiB4&2{ z#2N$8RLw?I4FOp)0uYZeKr{(-T}%?@Rw*Hh?NJke3X5@|4py+L;RVPaGdZ@E?L@u<7`xY)%G9@=mAX{D#LI@!0xUd6!GUx9o#8HPbqB~7Mdctb&6tRqGmKQj_ z$uJ;wHdMGqyTFJVp3?!C76unOB}+b=JdhjDvJGxUMOlVm7})S!wW8FXP+A4-#lVMz zxO0~(vh#^dASsL&;{Yi`v6dcJ`Ee@w;~y~QwBpgDz|hnBxpH+N%$QbUbU^X`SSP!` zfNg`VOqhbZFL`r8ZM0DzP5@jUiI_NIElaV$CG@$7g6RJM5w)d5!I5w1gJ0oI!1iIZ z(b$tK2g@Dc!Oi8CAle1~WicjV)BbRk*p-TSIuKB0y@WXF5g@pZFvdh;<`-*BJOa7q zKzdZEaT;8Lz_7RFfsp`qVvlD%mt%q(g8an*AJmjh!GCL@cV!kW@dL7%^NRf_nT#I{ z1;F?$E;A+Vh4>C0s#}0=LcchBT)id zH<|L{%(x^aA;BmSY&ghme32uMXZ5qn?vZGLC=z=E9pP8Sh$*L`U=+YfT@J+T)%6;Z z4~D_0`#Kjl5>fy&4z5=DKgpGpoY|WRX6D`rq+2Z7FlHU8nZQ)>?C~nB?8V^n%sJ>A zZNDp)Fg+XCfmvtJrt7`R9XbhQtd|9dwq@hg3L~eeBL$SDuq%uxtLVoy&*hfgp{0v$ zD|sbUP#1`=$@&*HGzy5J)Ld+_G8sf}T9pQ+fsdG}76Qs4K?DUMt1`e^+Q21hYR!<& zA%U`j{uH_hZ$PfKY;MG88z9B%wU0_;GRFi96bhH#Sm?6S1aJsAMl#KnVfIBL33`W~ z%i)#LLSpe^qX$nP8)!s0;2(5BIHrRi~S&V;Ei? z$^@pn#md469W-A(Y#hf2#1v$EM+hQ86u`;xLlM~eoG}cfyB8E0f@XG!q!1HC;Q=TF zQgTW_;bpYAQtXv68PGwaf@VPI5d0k`QD$6JLKgI%W7K$n3vL6scP%1KlOG`9L(q<( zdYyh0fW^E<_YV7&&?rX>3b*Xd+YHNDR4!hnSw@=M@=7cVCzH2BjC49+St~w9!$d~4 zK(-2IpBysesZ?>oL0X_zXry~~kJgnzW-i09hX}S*eIrLXYCClpd4gMjS89*1hEQTX zwUh1+5g+ZSm%Vy8W)%L;Wqp@|;g@lDtUDu8pBa)JDFDi73`SSPuYxZ!=61EL1*p;J znssVKp4GoFlvd#j!7VX(r~~c3n}lJ~#8Avz2ynu#2kDj&IyS74ENcRjv+HxzTZZ12xVpVl*R11ydgmDLu2}S<^uEHQl1)>l_-L&}(8{!Ll zM)FpYa|P&mfbJ7|pC%sMOCR(>mjF};U^*K^Wc?)XF^4Zt2m1&^Qvd@(#Gf=1aIA7``q$;u+WEA?QBDwv>E&!-w#~h5<1_?Vh^0OfFMS2!-%jC(7QO|- zj3u^M_~D$e&8n?nLK*rf2t%wJ{sgL+F`1A?pc2G06IQbF*uo9LCq@@5Gp+)~Mdd1w zLGP4HiP@Mpj_|M(s$yNxddK}6rE_-nV z=FsJsf~c5I{lVUQFE(t==hW|Qk5Q|!^tTKxa=@76)?DcH4VZX&=sO(;WzjCq~2_WrGzEsoYpJg zOA2cwI70+tz&K-Z{u!$JW*IBSAUyn`al7K67g?1}vny*^dPokSnjyy!&SyCYg4EkW zGVeLc+~+D_#*wOeLd*_GLI>k~@ep?#ryVL_A~JAuep-$GU)g$^tx{9OOvMP|JQuK*3jG?5@(s zg4@z2Nnl_Swu){qzXAo4uGcFXv1<(_Te+cS6b<6GlF&9^tj8v0aH|Pw#w8Rj`mrw; zQpg-xbti11s(Qi@UgB}bje=e{%!vNjh3zToel?kf?>uV z?)43klBG8h#w*`%EK00;E^aN_L}I4c#o$UH zOo$S$P`p4=*Z^P=xFuQ~lJ{i@aUJcy=fZ`HksKw9=sdy_o7{~9q5-xD(OSVz3)sh) zp!?iPlvOVbsnZM1IzWRhknxgsCYfg6WOpFZ*#^fC_k6h>umn0Y%bR;?CKnO4x4+jHD4a_5^GiMO8OcCjel=61GIJ)K_^-w0t zWkarD1H7 zvaSkcAb6-zh;*STj61Or;Gw0TjiVhL2$-eRi(C#CnQWY=EQ({{Zd> z{^ckf-XYmqGGPjpf*`<{TN6KFZpo4O$qt{E%ND{BKt-ZkL|7qVxvjaFrW+TcZcJtc zAZ73yW(B$>L4sxgTEodl-xHXXU64ZKQ~(>IUhID+V(l6sVCBlhs`doc#mm790tlu; zCTiu~#f+=5W@c;G31IqN2O9`@CB@f3U|$u`%E8J107@)MB4B#2n~im&}^x;pIhprT+j3N0eRpzX+2{ z8L0Ubg*#g*?TKKgZf@|k97Rpj1TWEZmf+|v633WHAAOtEJ|ZRx&^Rho1!tO#2(m8D zNKi514Lh;HH-IKO%NUSMzbKD0K{+)KV4)Zygrpp?4Q=XQc|K}}P}v1TD)}YRz? z6^t+z zpaCgQeFPNri|CA}s43+yHL}4HH*Eg^0u@8r7GPu{iOzF5V2xdV`8`!jOV{Iva$(I!jn-PQ9V1T^^pdHnPqxc4nA{bz^Pu`%* z062Xy4|*DyV)a1d$PrDhg}lPFWFpeU*?f^mMf#>ZXz)haC55!ZhVEA_e&yR>JwlRj zG(X%Iu876#0cy?tb&U=mLr@a5V&#GyXzo2PnsS6oO76!3djx3m>XyK~e1hhl+}}i{ z@3~^k47p!!*au<~NRP858dAHFC*Nr;!aG>~n2mx@J0*~R3>pFf5ouSG5Rk6OvH~;G zd5l!b+^mj?VtQ0>%MD~`5u8M!@P|#nS%sCTEz3~TF>=c=d?HM<-Y_+<5f~+&YHARk zVH%3g!9;q}(T;;FKCm5>9%d9?7JSUp8p|^= z{4O1ip(&71?~M`2#8x$Ke6t6_tH z@Ij$H1rcJo=Ae?!1`brzvTrVDw}@kbpPZ1{@1#V$C?@hKxqLssL5+m~!}S$f%Hi(B z4R(wgKfS}nDY)RS762K9mWcTfuqbZeOcP;+QMSu012+K26fmiCGG=>aDSsjl{CQdf zd&Zz%WI&85WFZNOe+vR z18T+LT2$yhNETQ5q1|A7u**&_1Ug0{A_f&+f6j~`z|<*xbLz-MgsX*YKuFzbmA^5p zMzrl0vqs8A!rs}Z0$5zVL(Xigs+;`KV;%{7QQr&!tNb|+POyQ^(TKpIVdSz7(^^KW z>QN3BG}DuCgaU#xW;454FjRh(3}SDh8wzr!I})OXn=ghaI%&{45R6K_w@He@fNmn9 z=?oN7zZ{WY*drI}>ynPrLhT8`_uXav#9mhP~& zYA%%h!s6(Hp{N0Fx|_=?Rw1wrYRe-C;uvB*5F%Lzpk?|c#rp_?(8>K`c|vTzc$EDt zFx?;KSjLF_NnkTZiGU`Om{?27TY?g?WG~CatOXq+wnuPF5HSqP7cer`$(03&BJ<2Z z&lrGlC_dv8NxouxUfFlbE_EzWkBAwfCP3RLb1VXf14OvM+bTUW+3W|>O50G^z+mSf zM4X8+>LUy~dO1`Iy@DnLq2R;#2^8Lv0{6uiD5rsa6pQq8gySRWS9Y-yJ?iw zWMgn)SE#{HvQd~~aKNjvJdlQ%6-P0s1OVy?t(P3k)6hb6G~x;=Z;*_Po?@LeBH%%o zUvjtbmZ)IYqfx+BnEKvj5n?M*LG#e2ljAZp%tP?_vl6($=oMTMXhm-m<^4htOS*U# zj(mNL9}1>gm21Fobc}WxxPvB}C9GVpRDX_TN(8C`kFQ-uZVKFjgv_X zk#^0xA&~4320YxB4H1BjAyaUUar-E9GS_!1Xg^mg1U+Amft21z5nyI>8!xr73lIPU zfQ6Qf`63xgg~|lkMy_9TUhmz+)Linf4XRgc^Gh{GWVa&>PkxpRE z;kh9JK?Bk#{{RP;KP3Ti4t^LWhJ*9#eu4_q=}O*MEi~{kbiqWR<)9BlRK=%*yB1er zx%o2rKp>5pc^P50g;>Zq80syxW6K94(#d3al@&|Cwt_63E`7MdjXq08}_Q8uz0@!e{=BL|4rA&MMS!uNuG@cG=9IEkQ zCC08Qq@g3oFg?p_P8BV1@QJSM2>r?~{2PP|K3&7*ngE&h!A0!miCEkH1#XiOFc_MM9c#s+*X0`>@t{?$5EOi0=y8m z8zvh&vYOYRnx1DY7$ULVj0-Gw6+_dHrlf|#_J;dFRX0Yb+#yDMi%mgX#1d(>CFNvu z6@|Wdfy~vveHP2ixp5E|1xC2|{{XiUV_%jvPBuBvqBw9Y8wZ4lM+JEiL15HC1YT%Q zZZGN!rBNv-4xU^-EdKxmN7f{$I_J{b1#GGEWz@Z1@WCV=a-aafCI$+G_SQEn+>~_l zfH+Js>@U9wa$G0_D^VfZ{BxPGBw%Kxx|UQAsuA zB&M0WZZgPn&9J!5nPet#=5`@aM$6cwQsNqj3|2HqlhFy=q*$63^upcQaKNY{T1swJ zZDv&&V&Hx%yL>}1af30{A0pH-Iag0T5?4Vg;tsZAh0)7iBG?RVcI?!_q3tQ4)M4$9 ztch6~Oi_n36qoOU2LKULhR0}m2oV`_YE-$}d{r=Pj?~${!W!lg0?agO1n5FCN=%38 z;-I(EE5PX4ZGN0E%a}JtvxiTcA;(Gh5}$&*ct_~V1wbQauYnj~&UUzq3G^JY^ekf( z*9@_Q2rZ(-^vXO3DMtNpg+^s~H~{|uYdD8l3m6%KKwAp9>LBlnLBR^xKm|}l_5o9X z31{mt#}fg%TmGnKd268(l9vX`<$B};!&atNm4KsxUJ}*w3xzrEVVH|y>1D?x1&)LB zDEjWExU&xh>?n_6fd-ga99?cCNp!8I$fJj>Xll2%t@8)i%?waBvnnhE#M8Y6!NA9I zh8Q7-rV_EiJH$l=SE~0dklX!=(cKv}OfH2)$Pk*7np~_PbnwHQA`D~@%rgjM^E~4zoML+FUCgPM z1V6w$%E+?B8aX(>zRWBVNUK0C@hcMc#)OThGh%NvT>;h*BJt$(J zT`&!+hR7okD+P+LF@t=P$KZmG;ev-@E`C!X(4xdRZgFw4v4hg3bYTLk66`qh%>~MD z7D45?QE78P!V|`8M%Y{c_Aqmifo)R?mNwQ)DTwLata*Y(*7U;ToccM zPW-}Ayq^$Vp$H=hWMxkhbjQ(s&9Td|2ffy@8F2%zcUptl{{TbTJc9oK zXfZE^q~Gd9>@GX}GT#pPNIZZF^O5kfp~tvLF=y7;a(uu=AhhVL)>*cg_V5u94%v|K zemFU0)FfBE=PTYDNCztun0%cFa~9gPv1_u+2;Rj4{{RB5OB~7!G?l7GY=+_4B9w!; zIZ^{Fb6o;n>R)6P$gX8Ga|9_=5Gc9LVRk+pmgtffgiH?%K2wbzg#-D=; z1ERVBjNBHLVsT*(OF{`$z$Fu*HO?vYn0g>XORp04ip(ffs{}-2sYOwDqvXV5t$$L* zw&ov%0Qh3DCqaqAc~ar5qD>iJa5vj_T9ca|Tvix6CS}uy_TW4MR8@eytwig%k0H#a ztXOt{bPUP~PR3grBtiu)*MFiz-f|6y#4E%xVqUyKc8TMgun+~_zbDsXR01z_&Hn(g z;DVGlCk#>B2myi(mmvkrOJR2CKZl(_uAm!WxeiP0e0`t_nCA^}6SEayx(QRFjZ*>y zIw2JRyWkA84#B1k%x)MJYAc!qOlIJu3SDL3RBHMbWFb$${Jzm$5BW`xVhCTk zMQ9P^i7INe;S46GXrvEEJ|ViFLLzMTMXX#G?2^pH{AVAk8;CK^hFHW?Euc4WW1eY_ zA9A>gy|9B2Y>?dpD71nurzj;NvbIwj%ZCi9=y5^_%m&kdI5UzHNkl7Vu2L`^nj<;t zHBlM!ER{_#Ji!Ig33H-}luIk-TWBfzW-;tQ23bXm%Mv$(n6*IZ9k1wUiU_PX&qJyL zr~zu=B93#xd>0;P9zT6{0bwYdR7<%i*PXSp`6j@qg9PjDuVN@ajRgf43(LwrNQ$ab zxerJviZubC33Imdx&F5eS_DTTFo&Q=U|Dx@{26f4f^ZTgT;yLP8-wF?kJU1c<-^&w zssb9oJu1FDN+bpx08885?hFD8FI}1*So>>$mYquhli=woc!!l)={H%UDgo(o! zOE}?|a;hsU!W}1sv?ZNu4~Arjq)O;7fiW`Xn|>@;L$$*pVJwggLoiRoKXgcu$srLi zop6fx4#Q-k1G<7dg^%eC{E~?1#cdhzaFWd}VI-4Oiii&s)U;TEl(sXLRe-D}MYl-S z{39`|oTFJF5EKRiI;vq6X>u>yD5wI0BLWbp^o?r*Uuh*hNIqrgvuF_@?*9N4mp-Ax zOx$1Kl*ghY-96q2w-Mh$kG8#%CYhC3wy1guI!leA+W$8IR6h*4a?3xkNB?@4Iy%BB@UeL0RHDdcq3Y-q=l*&z_qzEykz#ZdvF2$}EX9Uq^L)`*^ASf_$ z%VClr5-Jo1Dh}4un9cA-0MW;Ig2~+*ys*eW0fuPbE7+IfaBQ$R^f!^uKwQIW((P1u zi75_lpHOMa#5B4Pf82yYIYw#x;O3ZkAcp^&OJb_+Py+)CWDpG6Wh2gV`3Cd@%QE8kZ!pX{OmxM-j%=!Y zBOi!_h^2@&HM{I*67TSc?1ENkALtC~EEywSzB98Ja~2_K4RBs6F*F~yu_$ynB^?2R zRJytU04FMPYkMr|mV&^j_(m*j@d`@aRk>Bd^0#A{st4vDaxg8V-J%u37`gzP2w6xD zmI6h}>Rt>ZqB)_00;p-0e=k^Gji%!3d?z(20H!BJ%O8|}Z2VKHzj%}(hjS!JQl%22 zLJ-0*^5J`9-9f1#2W|_F3TqtcVQit=lc10(j!7&QMmut=s7mw`g^*cXAjgsySGlew z!%>1MUBjeE304kfGTRYRg(bp!7-Fg3A*m_++CcYtw{N(V3U8w)Ru!T{ ztgT?S;4T-sR2LZrx`)S3&>$2jO{+jh1B=>E2Y&Vw6WC*fv3lGQ?=)ujhrtdYejKn0 z74&cOf*e2*fzeT+hETuYW0EAKSGn+pDeNVPI}R(c7-LW1d_=Y$J21ZbK+4ys>M^6!@LnDGcSCw;k5wsFi5kRcSpnS^390C9l23DXiXvX6(|4@;*8U~53gO~-ba@#5ueAo<#u3C6xtfD!$9TZjazk(<@e?N8w9Bd}Hnzd$ zOFd$P;5Z=XFuUL;EWuX1Lu?%hI?+*Z<>IEP3d`eV7&8I3*>;a@E(MdhGCko7Zb2-N zhYvi|Vu+-DN>r56Lg0^h0eTr>qBH^@Vy1Xd07Vx=OvEX~L~2q93;RYW$6_e4V#9G_ zD$eAy4-%UgHK{{HQ5hYi4c()Lh1k0(!WlC8Ois?DP%B~3d z(Hzj{$`T~0QK+09C!+yFx>WllIPFj>D_P44In6jmu#`10=_Hi_xt5;ju7PCJm=vht z?n)uBM8IMCL6MnRAINfOibaotI{gd)3Id5kQP!Y00~jK%7zK-DxUqE|_D~hBCI0{n zQc40W>1ym@acm1{z;}L3x!=|y=k%n>K4lXAk`_z^%c8#k_ACtJjZ8�@+!EHvrm0 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/icon_zero.png b/frontend/src/assets/icon_zero.png new file mode 100644 index 0000000000000000000000000000000000000000..8af6ea7e144fd73c1d3a26de2319e347dc475c40 GIT binary patch literal 24550 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/icon_zero_128x128.png b/frontend/src/assets/icon_zero_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..7c77823ba83032b8c6a8586543e8a56d7a7bf8c1 GIT binary patch literal 13095 zcmeHuWmsF=)^3mncUl}ma1WjacW7}hv_K%i-QA&Raf%hENCmgz)>5QEi@UWHD{jTU zw0oa@_PO`F&wb8w@AvN{Yh|r9=a}yt;~npu&zi|fw5GZe0WLKz001CRQI^+69fN=E z*g({0k0g8$b$IWqYv`^G_X0V)I$7G-BSG#y&PWi_+r|hEC5AssFL*^^d4rIHL^0>ckIzi(xtlgBP$BQB>h=w)G^cq4$d(?`=c4SAC{Yw zaHlrNz9MAhyAER|P>G2xS~hatx2oP+UVZ&4>=g+6Cb$VtJ%(3%H9)06A&!W5Z>`mf z@N5AKdze#aIF~ZtHa$tbx9@SF9)7E=bd)V&5vkw_!jd0v2@>KJ;)U=ic-wdifF*H3;;slwn6|v)pAe`k39z-hyEBZB&&$h;*GrJs$<>OF z|Ni~^d=LRX0RbMA1&^DLqdVN2$I*@H7sMYJ@<=xeR~u({8z)E5FHE?(lZU$m7>ue1 z{lh;8XEn9I;2qumWC6topEul@kDnL9=itEi_ZDvM3Z5vCKOOpSTe#_>1}dL6(#^@k z)dH#DiF9;l`a1-|;;;739)f5-=I_+-Q3}h7RX;v zC~#gI6ppBc1yUFZH|IeiL3xDWqCz}S1X7qsz*2x8i9iY zf3POL^{7MWA6%LA8_%EfR0DhOFqJhb|BH`{% zuDVW6_7dP4{Ht0GHJ}i1cep&<9f<;k2nfR<0x*6-U4DKTL2pR7OXVSQk$v*Q>0((H&{GH>w96CNpYb4yh0Kq$TFuD$!Mi2+!gv+5HNh)ViS$ES~SgIqMms;R+WD~5$ z262$BL z?PqpUw9J5V@$^Z_Q@si9UarbkSsj8ZUQ7Tn3pOP#fH~MP#5vR!xGCV2LWUXF3vdCZ z7CZofi4hfOlSw2HuXLdDK)dkiZAG2EfkADsVL>;@9Dx9!qe*A4?bttS8I=cp)C6!g z%tezwFu!$6Ya3URD-X<#3eJ?lJrnjup~M5MflMo88twM7(w6r=-As$EZagvlDTo}B z7M8>DKAHEvRKsP*QO5a@>q|w2>q-T?PWO`L$I|THDaz9;Bxn4tc#IQT7krr95fQMH$J4)YLj>2ZCkIUIN-x9^mWG4b)C8p?}6dNr7FS zyS!k7#vf%w6;yby3oikp=SbA@+0JBjyX2uq>5U;JVTm~Je|(TERZwQl%qRy!`MhKu z0gs<>h3VQ>DWb1nCI&yjV87^)V5`0rb7dRN!EqCco;VKk)STQG9Pl~<#t@4p0JxoF zcl?G1H1%u0-n6&`hE$*z-+S7_@zNaI~A-D8F=x*@IR|Y^R;X1#+zQHvf)bX1X zaTIwp_aOy~bIsWiHkrARlIYNv8TlFM<@N>9_<)5ZIk90rz-9DT;zZ+iH_zgGph6$Y z?z5W?r{I~Zu*RHOt33;Jd6)H3^;_MpPamWb;+Ki+T?x#nx(|;f%#If5q*Xe}RD%)6 zS7`b+vQp!t8g->k%=BDDnNQ0Bk2TX2bB2AC&^&k6Nm-=D5{=5DSh;m=#i6&&*vgRw zu^_LjDDmAPdXG9OBHL-GFdD^s%z4iVNu>jBbZAmz@3-rd+$lMT0Y8AWjF_EYC^ke< zxxc^ZV%!EoO5WK%MdwVEyzt(jm_KOuXyQI|_lnM?Cip$mlq1&oRrrephP}3+X8E*o zpy9Hu@mVv}oU`xW;)Rl9Xo#qv})dCNZnQCOUgWq$aU0K*6=OOCV_n zB7mh)j;B+AiCx)P+MtsD88Cq04q#KOpG`@CbFWF(X0xR z1*1yhZV;eC0|TPGPfO#ommGf&|xt12mpZlXijO53Hm_~ zGTM$^5$GA@R;E9t(B=W16qQZD=)6%*0*=9Wfc&L1U6 zY$1WrudgAPN>XQgjF6Rg413Zm*yJaR;HW!p)Ae>(sasyEYMn8B&E9L*d3X<$i|m4k9%&disQP_%g6>hAYE@yx2r8y|GmSIZW3KlK}AUgdvSCRawS@i%<;NdZNPie z^ex&>#6inFKJhb=jI*(xX8cT@RsC}r`18m=HxzIR!Pvg6Z>m&iVDLU<6 zWYutWs|dIj%qf**lCRaQIRSX40X}` zP1!4fW1`@Z+^fW-SKSAByZ7@#cgmR70&g0D0Fo-dsn;+3&!kN=#Y9igSovJ+)JV4O zigClDQWP^nIA`1x;QM7hdn#*Az!U28SBS0L<}un?$lBF0UhIdTiu^1Ba9ZsAPlA}k zLXx34l$4*F;7h^!gO^yTTW-m6B?|s!Xj-{;@0u%Cs{b$p{iLg7RoDdekHWoIM~ z#xA4nh!zu3r6w)!I%~(0LK}#T%GeM}EEn4GRvbNRna|=FjJ0E! z!tUcZ`6&;jRUOC&ix0T)>7W@_@Ke5ffOBcPLjU}nrWwsr{CbPr1`7qihcI7Wiap!GdAh%LCNW0_sHb%snWQ+3S{N}~&?7#GFxar< zaw}cdHov1&TZl7sPyMd1-pr78s9vi#v)np2m{N#T?bGC&+@|ECi((8inUA!xJ*U{2 zEIa}sEdT8_uQ@Q89V6$+L=<z1cI;sV-cx#haRyjj1f?A#+AJpC2eGB}(PT3fKceQ!$LQ5wUx)df zKE?2wni+icK@DTx#kwIGs-?ovOBHnf@ND)n^`N)QO++WK1s3r;MY#Z_7VrGiWQ>pVVusy9(|Na zdf;vmVPvz(l#?aA3+y_%$*y>&f(xhV-tyc2`Be7zn-5Pe==7Y z6+hj0n?L7eF(-a|QaZ$8(ao?tXI76+2u4>Q-}c=r*sW&7?;2~|C2BgAx^XE7Z2`1% ze9n&~mcmxpjBs`&LrK?uRGNg!D-vNLTQ?=7oS4Y~A8vL+JWR=5O@sg(v`lBX^NIx2 zdNJ4Q7^rO0PYahO1>%nkab z@k+EvpZF;bwSr&=r5eBuEBsnWbvu^K=aht44&m=zba*+w*OHKiM}0zsRPbc4GZ z)g^rUP#VF4PiQQd)4H7^Is4{x?-NbA$hkO9@L1tDu!Gn=41?3d@^?wp?O+2&>w#wF z;V~vhf$)Lh-D$t@-dg{i6MqvL!$tIG-SOHaxXCE$$nsA!d%Nv81B(4kYgoL(vuR=$DdVdQdEWf$n+&`Dj8SyoGD@bS=;rv& zAR4PD;h}?8a$B_DXD%0Vnv2mz20%}pYjJN@noGl$ zsSHCCkAOp_5b(oz{Ykg8D!oy_L>Ql;SUA9Ht*UUU$z@)ltRp@uv6<**`kPzY^zu~f zLuZv{m`wQ7H&w@wOI2yl&(T8dif>MZc@m2~X?28qt5`y^Jo&$Aek3CIgy{T0LPXyH z>UInZ0Nl&6fV(NR5Addbtr;Q%+(ivcFg*2Qs^E?%Jno3!7T`FnxF zg{3rY@l$cQ>s|Y$ISDy^NpcD4m<8p5+a>^gTA-~CxDS2aWmkQ$f<^2zezjqa;+Mi$ z81Ivt)L^#Up!c<5Hn~b_2u@0KkyC=pw;@}PtDI(2ZqfxWS2x6NFPoc8(42SJ_(G1g zoAp2)4cm8~bGp zSM|DcKp5cT+UIvFXw$bjkyCw#gnz66QbX|Jry4cL)&VXocRz$5Fov&K?ZIQSen0%1 z-+;#$@hHX_+YW+eGpycnzZjYtZw$?+b$}0?7zWNIqHm?As#-*Cy)Xo2GMt;4#;Y2n&!!@p)U)At?qPFXN-=85WJ! z*V-0&#oGtRADT+j@)@b)i(*BpLgROewOrV=WeQ~oIkJkelj}ns${f1)C4>u|a=KE9 zbg73k(r**h+rRXn0Xoh#sIgG9yLk^k=*-++YL_QV22k~KJb;DKB?NiyY%c{&m=MDd zbip!E|DOZZl>ysh9q6Mn2b`zkKR>mDns-_CX|GGkat#II4-zhtiNoo{Oy_Dx{3<1_ z35#(h4>pK&ovlM7{CaZ3l&f+vm}8XG{e9L^_sB$7eJZK)GYgGv&1}kpRK6}ILelOn zomIX18D0l@X*^-ybobD{M%QtiW-JO3@Rhv?4uSt#4=TA3Vq^=BrzdhSseEN&*QtaG z0oc;$Gm**BT=vY2lpDbxFyy;@wNEO(PFgLWSfJNw7ApHXXh#b~wXg);^OKaO`}##Z zBY$${z^}SLlywDHHA-e#~le*+afI{067<*J*r8z)}K|oP6(Nwmudu2$;X&KxY-KH_J?7u zJXa4Yz#+L~>eoRKu8scodiO@D-DNMNllWQtxe?b0r}B#7DZyHQ!LC|ax^JoX>A_mk zF-JHV3#i=evcymJyNT~b1aVGrD4&T-{0IfQ<9(0!1EYZX!!9C=SZxHyp6^^p?y%KL zl86*`Rr@C;!zNty{3gZkSI7I9PEu#g^8m_(fJX%w^f*EjXoT1EYT+j453ax^edWqOTM+XaVuElCcG>hTd6|O|%-YNbm$IGrDk+rn7d`HRK0ZjD zisWp7Ep3r=N2&(yJ6trRv#KMAUTuDtNdIt6R%&C6DAAi_B?sry3oQg%(YE4+c zc@P-Okh=GF2V7cr5&6FHC_m7oi+h|}!KySW4PjsdDOXKOr9KUt~y`k6v5MR+IT5HItgz*=!CO3ip?h2@U zrOuGZjW%pg4UBI=maOYKoDI~k9J(o7gkE(KtbLeQwGgz~luU1O?v- zNn+IJ^fEp2Qvn+%h5Sa5A3>I==`{3*N*jgN7~zDfQO`iA<~@S(?dU4(9Qbf;NMq2U zZRIOLHph+AAi?zRmRoNk0dW+OUBbt=w;wB7YT0bOEy7s?LvhG4)R z{^<X{Uy};QD)!tyZMN6 zZB7Xww|G2S5@Q4=#~YJ!MT|REn%-@phIX^*xV*cYJZEp{$Y(M~(mt@usT5zFX~8ny z&e@wi%L&Fm8KBXRA1|}^)7-g{d-cRl>4#?9V>tnNI|C0)LS-ajFdJgaKi_Dt^mAM& zUuS})pjfi34aIvWm2D%B43Y0S4umO+PpbfLvYs*B9rm;o5|I8V+tskHM(tT6LZ^bK zE)9D>^qL0LPj9Ka=)IIfpIw?LHQ{?T-riczUYv8Inu5`mQ^%uo=7cXC>u`GaPyziH&GW^9ig$^ z-XyWN05QG%&kL3@=da(2p6M>qoax^#&x&4q@44mr{bX3%5NQn+`0>sssO$&U%^@bX zATeEV)PAO4AdmWY3pRS1!O@E}2H$>v^n1+ktLJQv2_1`#m#k6?WKbez@9ifE1uwKc zkG)?w9Do1FcRXy9vTE`nF5gHv`zfy$dUetb(^&d<#-kcf?z@Ob&)R4l545SF&wKUi zk{Gwjje@s@6THR0@~J>cwOqtZ&djo$@CTJ(sW*4lLKq0;6OX%3i4D^Mm?Yyp)jntP zi@9%J)a<5+77b);$sHWyj|HgB#*jG9jb6ERUK*jlCrUut5Zy^je1zFN*Tnz$r~(t zp8D37KNIZk6+R9^_5EvozC#hTO5%s;4wfqGM0my6UxY)&@ozzvg2&t_mI9 zd1K7Yf2Y8j^)5T@RLwCU9(zp2etwhvW7eUQZ&jZvx)n&GQr0SJ5u@Q`jr9&6) zu+|lM3OHXYXDG#IjX@jk$rR3KX;fa`inSk>9WgF$&oHRUq8UwIf6FplQCeeoo%b+ zAIU5~ZlumHeTKT}zCX??{P7-8q1w=4aI!f?*YZdGQ9vw1E;qi#?u(lJFPUK@rgFkK zyn!EyZRw!_JYob-F11wGhAEu;bBykgX7X6ogp$8ed2NK&oD|bD5(da9Vp)_LVMW$4 z6CR$v;_hc;&U~(y!5CpM*T7v*hF_n8O z{C6Y;U=N}Zn%6z2W>G^oz% zAy>#!uAMD|s7ZWNznLQYS|BAj^#H?w-nolkd;2ZjlFpZpw$(n#pP49023`bg&PnNq2=Nm26h--H@+4?WQ+G9PIH8m4BNjSrs{C!{^~^Z!JhZTc=szORxZ{`8ey zWRBDmRU1z-9{JU`hvai$9rXN<0?$`Zh-97JbOF_w8N|Td{N%~val0pY(t}&V8yc6n zZdx1KGqo%|N{T>$7P=k7&$Q3Lm*uy{(}Qnkr1my8HJI;YaZruTzV`=OkbadunpI3c z5$mgsSb3^?r&ESPmr_r6Y%IKzfqKF5hegd|+k-`hsxA_8HC9)6mWKlclZiA~W|{pw zSh$&e;o}T;ky_VgS*(F{LJzbQWqr)>>u9-1Y z5aoN>e_oAafH28w9%dvreCKf9Y6xvXgc~a+I^6gdJ2lNk z-z`}u-~haGY&9a=U%&hrbUB*0L*s|(1Z`U?(;ZNJVf)TU>fL2_SB1}h_K1;knK1xc zecnMW>-GClzMS1|%oeKu`u)b;eP@(JH61icy`iKYT&vSJo5^czi`hwf9XhaUkA^kjckuF6 zo&TUF$M^w)P0U4}s=!ISmuV=UIo5SW0K&Naig&IaH_BFwMfFa8z&Yjduv{!AjGJ4| zGK8HfnE4t^s%;irB5H%6>@|KDX!w2vjCnUtkMh{;HeluG3&;{{j+Kklqs*uz;(2M2 z#fB-s1%dsrmV*T#v_Fq7N->A{B2NSJSeJ2nZj-~C)Hxd22oqWEU6NqYINCAa8NmbuA+;FMS>N87#H%&l#z&?izqk!1Ip zop+Z+;(#EYI$N~pv04I_9p6%uY%Lc>iszl%X_$0%207K^VfrG%krHW^X#>PVee4&j zc8De^Y3<6SfpE<`7Q`J4xxO{!YJlbd);y{z&0Rm1N9nv4s|3Y!ge#vD)r&=A;vc$M zv(_=qJ%7hpt2D~w+6fD(A*x~hyif3;2hS!VDraZX{jNs$b$9YG0{z!4YI~oWc!E}p zai!ta>B+NcEXM%H!sS#To=n2&Q|~=Fzn+(p$MIHjdao>VuICtHi^m#oj`ygAUrQ9s z+!pka3C+I#+S2Z1>hvXWZE_>vLDL42e89Vmh{BI_gT{Ft7arE}?Li zk~`JRJ1~My_Zv7zXIQv>gHprBD0KT$_YHPxwz5)A4NzUU5@eTv`=&`@sHJiiPaijC z67`E#dJZ`gAi?C+UU!w&jpqLAWTgnr5r4DoP}5T8CX}Eq0Y~}ZyYs#ii~S_@k^x8^ zTOjTII=7D_uBa7Y+im+O ze$X&Eb3+^HAe;7V1wWa@;7DnFKRlNmp2t_bnAYS8HjQK|8zzo{dA^Nf;@Mnnh2Jsj z3s0occrsIGtBX&rJ??_~n%RRTy_fA`hTdC%LpLk+!0#J|aaxUR=D`q_WnJ3E zHG`4i1TMy{!ztU(FYndMC+=C(DVQo3P*eh~KbH*NCpe(bL#s0C&xB(+P`oWkd!hA$ zDz>3?A2J21c*d)URuw2IR4uc<{&fCv=+s@_7J2_-AIfpG&kw_+lsvW`l*BeR#=T+s z!K=-XFEyu;?m=3&iAUZRXmD`P_`5g1EU|l4`pK71#HaKfF)wxANe#gan`(ddqW(7U z_1Cii$rS!gak!$DX@bq1#hQaFv0gof?=T-^el5jhypuJsn)bSH`l7mGNp$~!hUm0= z)RT38Z+MaX*b}(&-Hw+i>Rf5j?YW1L@%I+`TUy2V{sm2G%^^&aNUHut6`iErV~YUY zPr&XEF|YS8x0;9RFDD@Cdis0AQ#8=pjp3sHH|6c_Qyt&_^YHx`%HTm z5iEF`KG-|%Z_k!aizFOs(lKKk=k!^mzHSw~y<5&1PEt!4i({d9jNRbuQg|Sk&ruQU z!^9X;uO*9EPJK>@AxhR)BIK42lXiJy@Y%B}EVTXPhA z1X{ugT86YY&UmH*pQ|~&j4&eEoMlzbu*a=P2HC(W>jUlJz;qVCY9=2fB!5!6D;p}v z!&gOI@)EnK&NQi7@RWC)w1g6Oj0?QLZ1>e+wZVRDb%@=SF29PIw&3WZBb{%FeOFJU z$B4z{2RByx>jbXd^#|A!YFwgH!9kV_)3;#rpvI((!95uS^wv4)_eOF<1VMj W^Q1RMpHa_)08|vz<=@Jhh5i=^(3*z; literal 0 HcmV?d00001 diff --git a/frontend/src/assets/icon_zero_700x256.png b/frontend/src/assets/icon_zero_700x256.png new file mode 100644 index 0000000000000000000000000000000000000000..53c5d45262fd31e9214c79a9f5eb7148222b7817 GIT binary patch literal 27342 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 T&9~EPe7t4{gyAFPaJkM+Q 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 hKN}XVfxQ9D0|qrUsJwCa$-fLQoihLc literal 0 HcmV?d00001 diff --git a/frontend/src/assets/quasar-logo-vertical.svg b/frontend/src/assets/quasar-logo-vertical.svg new file mode 100644 index 0000000..8210831 --- /dev/null +++ b/frontend/src/assets/quasar-logo-vertical.svg @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/boot/.gitkeep b/frontend/src/boot/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/component/AsideAvatar.vue b/frontend/src/component/AsideAvatar.vue new file mode 100644 index 0000000..06ff0b9 --- /dev/null +++ b/frontend/src/component/AsideAvatar.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/frontend/src/component/TitledDialog.vue b/frontend/src/component/TitledDialog.vue new file mode 100644 index 0000000..e94a474 --- /dev/null +++ b/frontend/src/component/TitledDialog.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/frontend/src/css/app.scss b/frontend/src/css/app.scss new file mode 100644 index 0000000..7733673 --- /dev/null +++ b/frontend/src/css/app.scss @@ -0,0 +1,47 @@ +// app global css in SCSS form +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} + +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + flex-direction: column; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +.mobile-column { + +} +.mobile-row { + +} + +@media not all and (max-width: 400px) { + .mobile-column { + flex-direction: column; + } + .mobile-row { + flex-direction: row; + } +} diff --git a/frontend/src/css/quasar.variables.scss b/frontend/src/css/quasar.variables.scss new file mode 100644 index 0000000..3996ce1 --- /dev/null +++ b/frontend/src/css/quasar.variables.scss @@ -0,0 +1,25 @@ +// Quasar SCSS (& Sass) Variables +// -------------------------------------------------- +// To customize the look and feel of this app, you can override +// the Sass/SCSS variables found in Quasar's source Sass/SCSS files. + +// Check documentation for full list of Quasar variables + +// Your own variables (that are declared here) and Quasar's own +// ones will be available out of the box in your .vue/.scss/.sass files + +// It's highly recommended to change the default colors +// to match your app's branding. +// Tip: Use the "Theme Builder" on Quasar's documentation website. + +$primary : #1976D2; +$secondary : #26A69A; +$accent : #9C27B0; + +$dark : #1D1D1D; +$dark-page : #121212; + +$positive : #21BA45; +$negative : #C10015; +$info : #31CCEC; +$warning : #F2C037; diff --git a/frontend/src/css/tailwind.css b/frontend/src/css/tailwind.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/frontend/src/css/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/frontend/src/pages/ErrorNotFound.vue b/frontend/src/pages/ErrorNotFound.vue new file mode 100644 index 0000000..2813c25 --- /dev/null +++ b/frontend/src/pages/ErrorNotFound.vue @@ -0,0 +1,27 @@ + + + diff --git a/frontend/src/pages/admin/activity/AdminActivityAddPane.vue b/frontend/src/pages/admin/activity/AdminActivityAddPane.vue new file mode 100644 index 0000000..fa64d07 --- /dev/null +++ b/frontend/src/pages/admin/activity/AdminActivityAddPane.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/frontend/src/pages/admin/activity/AdminActivityEditPane.vue b/frontend/src/pages/admin/activity/AdminActivityEditPane.vue new file mode 100644 index 0000000..7a342e9 --- /dev/null +++ b/frontend/src/pages/admin/activity/AdminActivityEditPane.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/frontend/src/pages/admin/activity/AdminActivityPage.vue b/frontend/src/pages/admin/activity/AdminActivityPage.vue new file mode 100644 index 0000000..a2666e4 --- /dev/null +++ b/frontend/src/pages/admin/activity/AdminActivityPage.vue @@ -0,0 +1,300 @@ + + + + + + + diff --git a/frontend/src/pages/admin/activity/targets/AdminActivityTargetAddPane.vue b/frontend/src/pages/admin/activity/targets/AdminActivityTargetAddPane.vue new file mode 100644 index 0000000..11f7dc1 --- /dev/null +++ b/frontend/src/pages/admin/activity/targets/AdminActivityTargetAddPane.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/frontend/src/pages/admin/activity/targets/AdminActivityTargetEditPane.vue b/frontend/src/pages/admin/activity/targets/AdminActivityTargetEditPane.vue new file mode 100644 index 0000000..ae4a592 --- /dev/null +++ b/frontend/src/pages/admin/activity/targets/AdminActivityTargetEditPane.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/frontend/src/pages/admin/activity/targets/AdminActivityTargetPage.vue b/frontend/src/pages/admin/activity/targets/AdminActivityTargetPage.vue new file mode 100644 index 0000000..30ba1ef --- /dev/null +++ b/frontend/src/pages/admin/activity/targets/AdminActivityTargetPage.vue @@ -0,0 +1,348 @@ + + + + + + + diff --git a/frontend/src/pages/admin/course/AdminCourseAddPane.vue b/frontend/src/pages/admin/course/AdminCourseAddPane.vue new file mode 100644 index 0000000..78765cf --- /dev/null +++ b/frontend/src/pages/admin/course/AdminCourseAddPane.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/frontend/src/pages/admin/course/AdminCourseEditPane.vue b/frontend/src/pages/admin/course/AdminCourseEditPane.vue new file mode 100644 index 0000000..0a08685 --- /dev/null +++ b/frontend/src/pages/admin/course/AdminCourseEditPane.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/frontend/src/pages/admin/course/AdminCoursePage.vue b/frontend/src/pages/admin/course/AdminCoursePage.vue new file mode 100644 index 0000000..c6af57e --- /dev/null +++ b/frontend/src/pages/admin/course/AdminCoursePage.vue @@ -0,0 +1,291 @@ + + + + + + + diff --git a/frontend/src/pages/admin/course/AdminCourseSelectionStatusPage.vue b/frontend/src/pages/admin/course/AdminCourseSelectionStatusPage.vue new file mode 100644 index 0000000..bd4236c --- /dev/null +++ b/frontend/src/pages/admin/course/AdminCourseSelectionStatusPage.vue @@ -0,0 +1,368 @@ + + + + + + + + diff --git a/frontend/src/pages/admin/course/AdminCourseTeacherSelectingPane.vue b/frontend/src/pages/admin/course/AdminCourseTeacherSelectingPane.vue new file mode 100644 index 0000000..68f9e99 --- /dev/null +++ b/frontend/src/pages/admin/course/AdminCourseTeacherSelectingPane.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/frontend/src/pages/admin/main/AdminMain.vue b/frontend/src/pages/admin/main/AdminMain.vue new file mode 100644 index 0000000..edc866e --- /dev/null +++ b/frontend/src/pages/admin/main/AdminMain.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/frontend/src/pages/admin/main/AdminUserinfoPane.vue b/frontend/src/pages/admin/main/AdminUserinfoPane.vue new file mode 100644 index 0000000..17f6b3b --- /dev/null +++ b/frontend/src/pages/admin/main/AdminUserinfoPane.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/frontend/src/pages/admin/schedule/AdminCourseScheduleAddPane.vue b/frontend/src/pages/admin/schedule/AdminCourseScheduleAddPane.vue new file mode 100644 index 0000000..85a68d6 --- /dev/null +++ b/frontend/src/pages/admin/schedule/AdminCourseScheduleAddPane.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/frontend/src/pages/admin/schedule/AdminCourseScheduleClonePane.vue b/frontend/src/pages/admin/schedule/AdminCourseScheduleClonePane.vue new file mode 100644 index 0000000..5daaf23 --- /dev/null +++ b/frontend/src/pages/admin/schedule/AdminCourseScheduleClonePane.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/frontend/src/pages/admin/schedule/AdminCourseScheduleEditPane.vue b/frontend/src/pages/admin/schedule/AdminCourseScheduleEditPane.vue new file mode 100644 index 0000000..5b6edd3 --- /dev/null +++ b/frontend/src/pages/admin/schedule/AdminCourseScheduleEditPane.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/frontend/src/pages/admin/schedule/AdminCourseSchedulePage.vue b/frontend/src/pages/admin/schedule/AdminCourseSchedulePage.vue new file mode 100644 index 0000000..66462e1 --- /dev/null +++ b/frontend/src/pages/admin/schedule/AdminCourseSchedulePage.vue @@ -0,0 +1,388 @@ + + + + + + + diff --git a/frontend/src/pages/admin/schedule/AdminTimeSelectView.vue b/frontend/src/pages/admin/schedule/AdminTimeSelectView.vue new file mode 100644 index 0000000..9c96a16 --- /dev/null +++ b/frontend/src/pages/admin/schedule/AdminTimeSelectView.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/frontend/src/pages/admin/student/AdminStudentAddPane.vue b/frontend/src/pages/admin/student/AdminStudentAddPane.vue new file mode 100644 index 0000000..8576144 --- /dev/null +++ b/frontend/src/pages/admin/student/AdminStudentAddPane.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/frontend/src/pages/admin/student/AdminStudentImportPane.vue b/frontend/src/pages/admin/student/AdminStudentImportPane.vue new file mode 100644 index 0000000..477d8f0 --- /dev/null +++ b/frontend/src/pages/admin/student/AdminStudentImportPane.vue @@ -0,0 +1,281 @@ + + + + + + + diff --git a/frontend/src/pages/admin/student/AdminStudentPage.vue b/frontend/src/pages/admin/student/AdminStudentPage.vue new file mode 100644 index 0000000..ce9fb24 --- /dev/null +++ b/frontend/src/pages/admin/student/AdminStudentPage.vue @@ -0,0 +1,235 @@ + + + + + + + diff --git a/frontend/src/pages/admin/teacher/AdminTeacherAddPane.vue b/frontend/src/pages/admin/teacher/AdminTeacherAddPane.vue new file mode 100644 index 0000000..d0882e1 --- /dev/null +++ b/frontend/src/pages/admin/teacher/AdminTeacherAddPane.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/frontend/src/pages/admin/teacher/AdminTeacherEditPane.vue b/frontend/src/pages/admin/teacher/AdminTeacherEditPane.vue new file mode 100644 index 0000000..bf4c7fc --- /dev/null +++ b/frontend/src/pages/admin/teacher/AdminTeacherEditPane.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/frontend/src/pages/admin/teacher/AdminTeacherPage.vue b/frontend/src/pages/admin/teacher/AdminTeacherPage.vue new file mode 100644 index 0000000..f565ca9 --- /dev/null +++ b/frontend/src/pages/admin/teacher/AdminTeacherPage.vue @@ -0,0 +1,303 @@ + + + + + + + diff --git a/frontend/src/pages/index/FooterInfo.vue b/frontend/src/pages/index/FooterInfo.vue new file mode 100644 index 0000000..a602b86 --- /dev/null +++ b/frontend/src/pages/index/FooterInfo.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/frontend/src/pages/index/LoginCard.vue b/frontend/src/pages/index/LoginCard.vue new file mode 100644 index 0000000..60ce160 --- /dev/null +++ b/frontend/src/pages/index/LoginCard.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/frontend/src/pages/index/LoginIndexPage.vue b/frontend/src/pages/index/LoginIndexPage.vue new file mode 100644 index 0000000..957472c --- /dev/null +++ b/frontend/src/pages/index/LoginIndexPage.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/frontend/src/pages/student/course/StudentCandidateCourseListPage.vue b/frontend/src/pages/student/course/StudentCandidateCourseListPage.vue new file mode 100644 index 0000000..9174b47 --- /dev/null +++ b/frontend/src/pages/student/course/StudentCandidateCourseListPage.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/frontend/src/pages/student/course/StudentCourseCard.vue b/frontend/src/pages/student/course/StudentCourseCard.vue new file mode 100644 index 0000000..db73834 --- /dev/null +++ b/frontend/src/pages/student/course/StudentCourseCard.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/frontend/src/pages/student/course/StudentCourseSelectingnPage.vue b/frontend/src/pages/student/course/StudentCourseSelectingnPage.vue new file mode 100644 index 0000000..1e684a4 --- /dev/null +++ b/frontend/src/pages/student/course/StudentCourseSelectingnPage.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/frontend/src/pages/student/course/view/StudentCourseSelectingConfirmPane.vue b/frontend/src/pages/student/course/view/StudentCourseSelectingConfirmPane.vue new file mode 100644 index 0000000..13c5769 --- /dev/null +++ b/frontend/src/pages/student/course/view/StudentCourseSelectingConfirmPane.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/frontend/src/pages/student/course/view/StudentCourseSelectingView.vue b/frontend/src/pages/student/course/view/StudentCourseSelectingView.vue new file mode 100644 index 0000000..efbc3c0 --- /dev/null +++ b/frontend/src/pages/student/course/view/StudentCourseSelectingView.vue @@ -0,0 +1,376 @@ + + + + + diff --git a/frontend/src/pages/student/main/StudentMain.vue b/frontend/src/pages/student/main/StudentMain.vue new file mode 100644 index 0000000..802b18f --- /dev/null +++ b/frontend/src/pages/student/main/StudentMain.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/frontend/src/pages/student/main/StudentUserinfoPane.vue b/frontend/src/pages/student/main/StudentUserinfoPane.vue new file mode 100644 index 0000000..8e6354d --- /dev/null +++ b/frontend/src/pages/student/main/StudentUserinfoPane.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/frontend/src/pages/student/schedule/StudentCourseTablePage.vue b/frontend/src/pages/student/schedule/StudentCourseTablePage.vue new file mode 100644 index 0000000..6b4e137 --- /dev/null +++ b/frontend/src/pages/student/schedule/StudentCourseTablePage.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/frontend/src/pages/student/schedule/StudentCourseTableView.vue b/frontend/src/pages/student/schedule/StudentCourseTableView.vue new file mode 100644 index 0000000..02df27f --- /dev/null +++ b/frontend/src/pages/student/schedule/StudentCourseTableView.vue @@ -0,0 +1,327 @@ + + + + + diff --git a/frontend/src/pages/student/score/StudentScorePage.vue b/frontend/src/pages/student/score/StudentScorePage.vue new file mode 100644 index 0000000..032ccee --- /dev/null +++ b/frontend/src/pages/student/score/StudentScorePage.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/frontend/src/pages/teacher/course/TeacherCourseCard.vue b/frontend/src/pages/teacher/course/TeacherCourseCard.vue new file mode 100644 index 0000000..674499b --- /dev/null +++ b/frontend/src/pages/teacher/course/TeacherCourseCard.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/frontend/src/pages/teacher/course/TeacherCourseListPage.vue b/frontend/src/pages/teacher/course/TeacherCourseListPage.vue new file mode 100644 index 0000000..3ba1e28 --- /dev/null +++ b/frontend/src/pages/teacher/course/TeacherCourseListPage.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/frontend/src/pages/teacher/course/TeacherCourseTableView.vue b/frontend/src/pages/teacher/course/TeacherCourseTableView.vue new file mode 100644 index 0000000..8538bfe --- /dev/null +++ b/frontend/src/pages/teacher/course/TeacherCourseTableView.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/frontend/src/pages/teacher/main/TeacherMain.vue b/frontend/src/pages/teacher/main/TeacherMain.vue new file mode 100644 index 0000000..7f626ad --- /dev/null +++ b/frontend/src/pages/teacher/main/TeacherMain.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/frontend/src/pages/teacher/main/TeacherUserinfoPane.vue b/frontend/src/pages/teacher/main/TeacherUserinfoPane.vue new file mode 100644 index 0000000..b619d69 --- /dev/null +++ b/frontend/src/pages/teacher/main/TeacherUserinfoPane.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/frontend/src/pages/teacher/score/TeacherClassStudentScorePage.vue b/frontend/src/pages/teacher/score/TeacherClassStudentScorePage.vue new file mode 100644 index 0000000..064d800 --- /dev/null +++ b/frontend/src/pages/teacher/score/TeacherClassStudentScorePage.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/frontend/src/pages/teacher/score/TeacherScoreImportPane.vue b/frontend/src/pages/teacher/score/TeacherScoreImportPane.vue new file mode 100644 index 0000000..9087464 --- /dev/null +++ b/frontend/src/pages/teacher/score/TeacherScoreImportPane.vue @@ -0,0 +1,373 @@ + + + + + + + diff --git a/frontend/src/pages/teacher/score/TeacherScorePage.vue b/frontend/src/pages/teacher/score/TeacherScorePage.vue new file mode 100644 index 0000000..72be269 --- /dev/null +++ b/frontend/src/pages/teacher/score/TeacherScorePage.vue @@ -0,0 +1,127 @@ + + + + + + + diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js new file mode 100644 index 0000000..42084af --- /dev/null +++ b/frontend/src/router/index.js @@ -0,0 +1,25 @@ +import {route} from 'quasar/wrappers' +import {createMemoryHistory, createRouter, createWebHashHistory, createWebHistory} from 'vue-router' +import routes from './routes' + +/* + * If not building with SSR mode, you can + * directly export the Router instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Router instance. + */ + +export default route(function (/* { store, ssrContext } */) { + + return createRouter({ + scrollBehavior: () => ({left: 0, top: 0}), + routes, + + // Leave this as is and make changes in quasar.conf.js instead! + // quasar.conf.js -> build -> vueRouterMode + // quasar.conf.js -> build -> publicPath + history: createWebHistory(process.env.VUE_ROUTER_BASE) + }) +}) diff --git a/frontend/src/router/routes.js b/frontend/src/router/routes.js new file mode 100644 index 0000000..6747f8f --- /dev/null +++ b/frontend/src/router/routes.js @@ -0,0 +1,87 @@ +import LoginIndexPage from "pages/index/LoginIndexPage.vue"; + +import StudentMain from "pages/student/main/StudentMain.vue"; +import StudentCandidateCourseListPage from "pages/student/course/StudentCandidateCourseListPage.vue"; +import StudentCourseTablePage from "pages/student/schedule/StudentCourseTablePage.vue"; +import StudentScorePage from "pages/student/score/StudentScorePage.vue"; + +import TeacherMain from "pages/teacher/main/TeacherMain.vue"; +import TeacherCourseListPage from "pages/teacher/course/TeacherCourseListPage.vue"; +import TeacherScorePage from "pages/teacher/score/TeacherScorePage.vue"; + +import AdminMain from "pages/admin/main/AdminMain.vue"; +import AdminCoursePage from "pages/admin/course/AdminCoursePage.vue"; +import AdminCourseSchedulePage from "pages/admin/schedule/AdminCourseSchedulePage.vue"; +import AdminActivityPage from "pages/admin/activity/AdminActivityPage.vue"; +import AdminStudentPage from "pages/admin/student/AdminStudentPage.vue"; +import AdminTeacherPage from "pages/admin/teacher/AdminTeacherPage.vue"; +import StudentCourseSelectingPage from "pages/student/course/StudentCourseSelectingnPage.vue"; +import TeacherClassStudentScorePage from "pages/teacher/score/TeacherClassStudentScorePage.vue"; +import AdminActivityTargetPage from "pages/admin/activity/targets/AdminActivityTargetPage.vue"; +import AdminCourseSelectionStatusPage from "pages/admin/course/AdminCourseSelectionStatusPage.vue"; + +const studentRouter = { + path: 'student', components: { + root: StudentMain + }, children: [{ + path: 'course-selecting', component: StudentCandidateCourseListPage, + }, { + path: 'course-selecting/select/:id(\\d+)?', component: StudentCourseSelectingPage, + }/*, { + path: 'course-selecting2', component: StudentCandidateCourseListPage2, + }*/, { + path: 'course-table', component: StudentCourseTablePage + }, { + path: 'score', component: StudentScorePage + }] +} + +const teacherRouter = { + path: 'teacher', components: { + root: TeacherMain + }, children: [ + { + path: 'courses', component: TeacherCourseListPage + }, { + path: 'score', component: TeacherScorePage + }, { + path: 'score/view/:id(\\d+)?', component: TeacherClassStudentScorePage + }] +} + +const adminRouter = { + path: 'admin', components: { + root: AdminMain + }, children: [ + { + path: 'course', component: AdminCoursePage + }, { + path: 'course/:id(\\d+)/status', component: AdminCourseSelectionStatusPage + }, { + path: 'schedule/:id(\\d+)?', component: AdminCourseSchedulePage + }, { + path: 'activity', component: AdminActivityPage + }, { + path: 'activity/:id(\\d+)/targets', component: AdminActivityTargetPage + }, { + path: 'user-teacher', component: AdminTeacherPage + }, { + path: 'user-student', component: AdminStudentPage + }, + ] +} + +export default [{ + path: '/', // component: LoginIndexPage, + children: [{ + path: '/', components: { + root: LoginIndexPage + }, + }, + studentRouter, + teacherRouter, + adminRouter + ] +}, { + path: '/:catchAll(.*)*', component: () => import('pages/ErrorNotFound.vue') +}] diff --git a/frontend/src/stores/activity.js b/frontend/src/stores/activity.js new file mode 100644 index 0000000..e89dec0 --- /dev/null +++ b/frontend/src/stores/activity.js @@ -0,0 +1,20 @@ +import {defineStore} from 'pinia' +import activityApi from "app/src/api/activity/activity"; +import {ref} from "vue"; + +export const useCurrentActivityStore = + defineStore('currentActivity', () => { + let currentActivity = ref() + + async function loadCurrentActivity() { + if (currentActivity.value) { + return currentActivity + } + + currentActivity.value = await activityApi.getCurrent() + return currentActivity + } + + return {currentActivity, loadCurrentActivity} + } + ) diff --git a/frontend/src/stores/index.js b/frontend/src/stores/index.js new file mode 100644 index 0000000..0846b0c --- /dev/null +++ b/frontend/src/stores/index.js @@ -0,0 +1,21 @@ +import { store } from 'quasar/wrappers' +import { createPinia } from 'pinia' +import piniaPluginPersistedState from 'pinia-plugin-persistedstate' + +/* + * If not building with SSR mode, you can + * directly export the Store instantiation; + * + * The function below can be async too; either use + * async/await or return a Promise which resolves + * with the Store instance. + */ + +export default store((/* { ssrContext } */) => { + const pinia = createPinia() + + // You can add Pinia plugins here + // pinia.use(SomePiniaPlugin) + pinia.use(piniaPluginPersistedState) + return pinia +}) diff --git a/frontend/src/stores/majors.js b/frontend/src/stores/majors.js new file mode 100644 index 0000000..dcbb6ff --- /dev/null +++ b/frontend/src/stores/majors.js @@ -0,0 +1,52 @@ +import {defineStore} from 'pinia' +import majorManager from "app/src/api/major/major"; +import {ref} from "vue"; + +export const useMajorsStore = + defineStore('majors', () => { + + const majors = ref() + const majorNames = ref({}) + + let loadLock = undefined + + async function loadMajors() { + if (majors.value && majors.value.length) { + return majors + } + + return await refreshMajors() + } + + async function refreshMajors() { + if (!loadLock) { + loadLock = {} + const newMajors = await majorManager.list() + for (const major of newMajors) { + majorNames.value[major.id] = major.name + } + majors.value = newMajors + loadLock = undefined + } + + return majors + } + + function majorNameFromId(id) { + if (majors.value) { + for (const major of majors.value) { + if (major.id === id) { + return major.name + } + } + } + + // 没找到,刷新一下 + ;(async () => refreshMajors())() + + return '' + } + + return {majors, majorNames, loadMajors, refreshMajors, majorNameFromId} + } + ) diff --git a/frontend/src/stores/store-flag.d.ts b/frontend/src/stores/store-flag.d.ts new file mode 100644 index 0000000..7677175 --- /dev/null +++ b/frontend/src/stores/store-flag.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +// THIS FEATURE-FLAG FILE IS AUTOGENERATED, +// REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING +import "quasar/dist/types/feature-flag"; + +declare module "quasar/dist/types/feature-flag" { + interface QuasarFeatureFlags { + store: true; + } +} diff --git a/frontend/src/stores/user.js b/frontend/src/stores/user.js new file mode 100644 index 0000000..24fc665 --- /dev/null +++ b/frontend/src/stores/user.js @@ -0,0 +1,38 @@ +import {defineStore} from 'pinia' +import {ref} from "vue"; +import authApi from "app/src/api/auth/authApi"; + +export const useUserInfoStore = + defineStore('userInfo', () => { + const loginStat = ref(false) + const info = ref({}) + + async function checkLoginStat() { + try { + const stat = await authApi.checkLoginStatus() + if (!stat.status) { + clearInfo() + return false + } + } catch (e) { + console.error(e) + return false + } + + return true + } + + async function logout () { + await authApi.logout() + clearInfo() + } + + function clearInfo() { + loginStat.value = false + info.value = {} + } + + return {loginStat, info, checkLoginStat, logout, clearInfo} + }, + {persist: true} + ) diff --git a/frontend/src/utils/sleep.js b/frontend/src/utils/sleep.js new file mode 100644 index 0000000..e995e29 --- /dev/null +++ b/frontend/src/utils/sleep.js @@ -0,0 +1,12 @@ +/** + * sleep ms + * @param ms ms + * @returns {Promise} + */ +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +export default { + sleep +} diff --git a/frontend/src/utils/term.js b/frontend/src/utils/term.js new file mode 100644 index 0000000..1a504af --- /dev/null +++ b/frontend/src/utils/term.js @@ -0,0 +1,30 @@ +import dayjs from "dayjs"; + +function getCurrentTermString() { + let now = dayjs(); + + return getTermString(now); +} + +function getTermString(date) { + let month = date.month() + 1; + let year = date.year(); + + if (month >= 2 && month <= 6) { + return `${year - 1}-${year}-2`; + } + + if (month >= 7 && month <= 12) { + return `${year}-${year + 1}-1`; + } else if (month === 1) { + return `${year - 1}-${year}-1`; + } + + // 不可能到达的部分 + return `${year - 1}-${year}-1`; +} + +export default { + getCurrentTermString, + getTermString +} diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..b19dc4f --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..ba72dfd --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,10 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue({ + script: { + defineModel: true + } + })], +}) diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 0000000..cad6896 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,5253 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://mirrors.cloud.tencent.com/npm/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@adobe/css-tools@~4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@adobe/css-tools/-/css-tools-4.2.0.tgz" + integrity sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA== + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@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" + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.npmmirror.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5": + 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": + version "7.22.9" + resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.22.9.tgz" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== + +"@babel/core@^7.11.1": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/core/-/core-7.22.11.tgz" + integrity sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.11" + "@babel/parser" "^7.22.11" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.22.10": + version "7.22.10" + resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.22.10.tgz" + integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== + dependencies: + "@babel/types" "^7.22.10" + "@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.10" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz" + integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== + dependencies: + "@babel/types" "^7.22.10" + +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.10" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz" + integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== + 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.5" + "@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.9" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== + 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.2": + version "0.4.2" + resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== + 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.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@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.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.5" + +"@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.5", "@babel/helper-remap-async-to-generator@^7.22.9": + version "7.22.9" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" + +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@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.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.9": + version "7.22.10" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.10" + +"@babel/helpers@^7.22.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.22.11.tgz" + integrity sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.11" + "@babel/types" "^7.22.11" + +"@babel/highlight@^7.22.13": + version "7.22.13" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.13.tgz" + integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.22.11", "@babel/parser@^7.22.5": + version "7.22.14" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.14.tgz" + integrity sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ== + +"@babel/parser@^7.24.7": + version "7.24.7" + resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" + integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + 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.5.tgz" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + +"@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-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-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.22.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz" + integrity sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" + "@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.22.10": + version "7.22.10" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== + 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.6": + version "7.22.6" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" + "@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.5" + "@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.22.10": + version "7.22.10" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== + 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.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== + 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.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== + dependencies: + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.22.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz" + integrity sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g== + dependencies: + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.22.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + +"@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.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz" + integrity sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" + +"@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.12", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.12" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz" + integrity sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw== + 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.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + 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-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.11.0": + version "7.22.14" + resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.14.tgz" + integrity sha512-daodMIoVo+ol/g+//c/AH+szBkFj4STQUikvBijRGL72Ph+w+AMTSh55DUETe8KJlPlDT1k/mp7NBfOuiWmoig== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@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.22.11" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.10" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.6" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.10" + "@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.5" + "@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.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.11" + "@babel/plugin-transform-modules-systemjs" "^7.22.11" + "@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.11" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.22.12" + "@babel/plugin-transform-parameters" "^7.22.5" + "@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.22.11" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + 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.11.2", "@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.11.tgz" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.npmmirror.com/@babel/template/-/template-7.22.5.tgz" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.22.11": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.22.11.tgz" + integrity sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ== + dependencies: + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.11" + "@babel/types" "^7.22.11" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.22.10", "@babel/types@^7.22.11", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.11" + resolved "https://registry.npmmirror.com/@babel/types/-/types-7.22.11.tgz" + integrity sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint-community/regexpp/-/regexpp-4.6.2.tgz" + integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== + +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.48.0": + version "8.48.0" + resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.48.0.tgz" + integrity sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://mirrors.cloud.tencent.com/npm/@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.0" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/@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.14": + version "1.4.14" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://mirrors.cloud.tencent.com/npm/@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.18" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://mirrors.cloud.tencent.com/npm/@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://mirrors.cloud.tencent.com/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://mirrors.cloud.tencent.com/npm/@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" + +"@quasar/app-vite@^1.5.0": + version "1.5.0" + resolved "https://registry.npmmirror.com/@quasar/app-vite/-/app-vite-1.5.0.tgz" + integrity sha512-iopq5UFtXHXrSlPoWj3dmlpnQ79c/dc5FCspAr07V3bLbICNTOEAPzxTuxja8W/bGXGBkQp2IY7k86W3iNuOVw== + dependencies: + "@quasar/render-ssr-error" "^1.0.1" + "@quasar/vite-plugin" "^1.3.3" + "@rollup/pluginutils" "^4.1.2" + "@types/chrome" "^0.0.208" + "@types/compression" "^1.7.2" + "@types/cordova" "0.0.34" + "@types/express" "^4.17.13" + "@vitejs/plugin-vue" "^2.2.0" + archiver "^5.3.0" + chokidar "^3.5.3" + ci-info "^3.7.1" + compression "^1.7.4" + cross-spawn "^7.0.3" + dot-prop "6.0.1" + elementtree "0.1.7" + esbuild "0.14.51" + express "^4.17.3" + fast-glob "3.2.12" + fs-extra "^11.1.0" + html-minifier "^4.0.0" + inquirer "^8.2.1" + isbinaryfile "^5.0.0" + kolorist "^1.5.1" + lodash "^4.17.21" + minimist "^1.2.6" + open "^8.4.0" + register-service-worker "^1.7.2" + rollup-plugin-visualizer "^5.5.4" + sass "1.32.12" + semver "^7.3.5" + serialize-javascript "^6.0.0" + table "^6.8.0" + vite "^2.9.13" + webpack-merge "^5.8.0" + +"@quasar/extras@^1.16.6": + version "1.16.6" + resolved "https://registry.npmmirror.com/@quasar/extras/-/extras-1.16.6.tgz" + integrity sha512-yHvp2Z73LuS29fhjE+dSzUvEKGCuTTy+WGIsAYxbnhBVW2rTYlYmFQfGdOPdzNreHZh+G/1D56n0Q6ClZxJHKg== + +"@quasar/quasar-app-extension-qcalendar@^4.0.0-beta.16": + version "4.0.0-beta.16" + resolved "https://registry.npmmirror.com/@quasar/quasar-app-extension-qcalendar/-/quasar-app-extension-qcalendar-4.0.0-beta.16.tgz" + integrity sha512-Rj3KKjPFrE13cswlZAPcqdqi1YH9CeHMpWIw8xsNqdLhCoaRhMGbRas9fvHFLJOXpnsDaVwWINNgN/bBUyn99w== + dependencies: + "@quasar/quasar-ui-qcalendar" "^4.0.0-beta.16" + +"@quasar/quasar-ui-qcalendar@^4.0.0-beta.16": + version "4.0.0-beta.16" + resolved "https://mirrors.cloud.tencent.com/npm/@quasar/quasar-ui-qcalendar/-/quasar-ui-qcalendar-4.0.0-beta.16.tgz" + integrity sha512-KVbFJD1HQp91tiklv+6XsG7bq8FKK6mhhnoVzmjgoyhUAEb9csfbDPbpegy1/FzXy3o0wITe6mmRZ8nbaiMEZg== + +"@quasar/render-ssr-error@^1.0.1": + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/@quasar/render-ssr-error/-/render-ssr-error-1.0.2.tgz" + integrity sha512-Y0wyqYHVxc1IOBH6pRiKMSWDqO1mwQu11Zo8rw4cBdclPOQqFb7f65UuRbk5LfbqlXV2hYvklNcy0SBAOiAQnw== + dependencies: + stack-trace "^1.0.0-pre2" + +"@quasar/vite-plugin@^1.3.3", "@quasar/vite-plugin@^1.4.1": + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/@quasar/vite-plugin/-/vite-plugin-1.4.1.tgz" + integrity sha512-lLw7j1A7viLQ6++p29NuYUdfjpaWctRi6tRhMYm8VPumXs8enGeV59JEJ+1tJR2FcQUMYsGOoyHHcQrsakXIkA== + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.npmmirror.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.npmmirror.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.npmmirror.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/@rollup/pluginutils/-/pluginutils-4.2.1.tgz" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.npmmirror.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@types/body-parser@*": + version "1.19.2" + resolved "https://mirrors.cloud.tencent.com/npm/@types/body-parser/-/body-parser-1.19.2.tgz" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/chrome@^0.0.208": + version "0.0.208" + resolved "https://mirrors.cloud.tencent.com/npm/@types/chrome/-/chrome-0.0.208.tgz" + integrity sha512-VDU/JnXkF5qaI7WBz14Azpa2VseZTgML0ia/g/B1sr9OfdOnHiH/zZ7P7qCDqxSlkqJh76/bPc8jLFcx8rHJmw== + dependencies: + "@types/filesystem" "*" + "@types/har-format" "*" + +"@types/compression@^1.7.2": + version "1.7.2" + resolved "https://mirrors.cloud.tencent.com/npm/@types/compression/-/compression-1.7.2.tgz" + integrity sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg== + dependencies: + "@types/express" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://mirrors.cloud.tencent.com/npm/@types/connect/-/connect-3.4.35.tgz" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/cordova@0.0.34": + version "0.0.34" + resolved "https://mirrors.cloud.tencent.com/npm/@types/cordova/-/cordova-0.0.34.tgz" + integrity sha1-6nrd907Ow9dimCegw54smt3HPQQ= + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/express-serve-static-core@^4.17.33": + version "4.17.35" + resolved "https://mirrors.cloud.tencent.com/npm/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://mirrors.cloud.tencent.com/npm/@types/express/-/express-4.17.17.tgz" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/filesystem@*": + version "0.0.32" + resolved "https://mirrors.cloud.tencent.com/npm/@types/filesystem/-/filesystem-0.0.32.tgz" + integrity sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ== + dependencies: + "@types/filewriter" "*" + +"@types/filewriter@*": + version "0.0.29" + resolved "https://mirrors.cloud.tencent.com/npm/@types/filewriter/-/filewriter-0.0.29.tgz" + integrity sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ== + +"@types/har-format@*": + version "1.2.11" + resolved "https://mirrors.cloud.tencent.com/npm/@types/har-format/-/har-format-1.2.11.tgz" + integrity sha512-T232/TneofqK30AD1LRrrf8KnjLvzrjWDp7eWST5KoiSzrBfRsLrWDPk4STQPW4NZG6v2MltnduBVmakbZOBIQ== + +"@types/http-errors@*": + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@types/http-errors/-/http-errors-2.0.1.tgz" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + +"@types/mime@*": + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@types/mime/-/mime-3.0.1.tgz" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/@types/mime/-/mime-1.3.2.tgz" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/node@*": + version "20.4.5" + resolved "https://mirrors.cloud.tencent.com/npm/@types/node/-/node-20.4.5.tgz" + integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== + +"@types/qs@*": + version "6.9.7" + resolved "https://mirrors.cloud.tencent.com/npm/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/@types/range-parser/-/range-parser-1.2.4.tgz" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.npmmirror.com/@types/resolve/-/resolve-1.17.1.tgz" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/send@*": + version "0.17.1" + resolved "https://mirrors.cloud.tencent.com/npm/@types/send/-/send-0.17.1.tgz" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.2" + resolved "https://mirrors.cloud.tencent.com/npm/@types/serve-static/-/serve-static-1.15.2.tgz" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/trusted-types@^2.0.2": + version "2.0.3" + resolved "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.3.tgz" + integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== + +"@vitejs/plugin-vue@^2.2.0": + version "2.3.4" + resolved "https://mirrors.cloud.tencent.com/npm/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz" + integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== + +"@vue/compiler-core@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.30.tgz#a554978f68199a0f254ad5159e9665370c8c1250" + integrity sha512-ZL8y4Xxdh8O6PSwfdZ1IpQ24PjTAieOz3jXb/MDTfDtANcKBMxg1KLm6OX2jofsaQGYfIVzd3BAG22i56/cF1w== + dependencies: + "@babel/parser" "^7.24.7" + "@vue/shared" "3.4.30" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.30.tgz#5af9a5f6f0752f7882d4eba0795e4d00525006dc" + integrity sha512-+16Sd8lYr5j/owCbr9dowcNfrHd+pz+w2/b5Lt26Oz/kB90C9yNbxQ3bYOvt7rI2bxk0nqda39hVcwDFw85c2Q== + dependencies: + "@vue/compiler-core" "3.4.30" + "@vue/shared" "3.4.30" + +"@vue/compiler-sfc@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.30.tgz#6a3cc86c20349f8c1976c968a8c80dd7cfef2430" + integrity sha512-8vElKklHn/UY8+FgUFlQrYAPbtiSB2zcgeRKW7HkpSRn/JjMRmZvuOtwDx036D1aqKNSTtXkWRfqx53Qb+HmMg== + dependencies: + "@babel/parser" "^7.24.7" + "@vue/compiler-core" "3.4.30" + "@vue/compiler-dom" "3.4.30" + "@vue/compiler-ssr" "3.4.30" + "@vue/shared" "3.4.30" + estree-walker "^2.0.2" + magic-string "^0.30.10" + postcss "^8.4.38" + source-map-js "^1.2.0" + +"@vue/compiler-ssr@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.30.tgz#7938b51f17d62b883d2a61ae42ec4f8398115b1d" + integrity sha512-ZJ56YZGXJDd6jky4mmM0rNaNP6kIbQu9LTKZDhcpddGe/3QIalB1WHHmZ6iZfFNyj5mSypTa4+qDJa5VIuxMSg== + dependencies: + "@vue/compiler-dom" "3.4.30" + "@vue/shared" "3.4.30" + +"@vue/devtools-api@^6.5.0": + version "6.5.0" + resolved "https://mirrors.cloud.tencent.com/npm/@vue/devtools-api/-/devtools-api-6.5.0.tgz" + integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + +"@vue/reactivity@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.4.30.tgz#6849e293eab7feed7d307446feaf1e3d759d5c45" + integrity sha512-bVJurnCe3LS0JII8PPoAA63Zd2MBzcKrEzwdQl92eHCcxtIbxD2fhNwJpa+KkM3Y/A4T5FUnmdhgKwOf6BfbcA== + dependencies: + "@vue/shared" "3.4.30" + +"@vue/runtime-core@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.4.30.tgz#6db949b273af0b988b4f13fecb034f9c9439c41e" + integrity sha512-qaFEbnNpGz+tlnkaualomogzN8vBLkgzK55uuWjYXbYn039eOBZrWxyXWq/7qh9Bz2FPifZqGjVDl/FXiq9L2g== + dependencies: + "@vue/reactivity" "3.4.30" + "@vue/shared" "3.4.30" + +"@vue/runtime-dom@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.4.30.tgz#49f399adc300a000419cb57a20b4481c98f523a4" + integrity sha512-tV6B4YiZRj5QsaJgw2THCy5C1H+2UeywO9tqgWEc21tn85qHEERndHN/CxlyXvSBFrpmlexCIdnqPuR9RM9thw== + dependencies: + "@vue/reactivity" "3.4.30" + "@vue/runtime-core" "3.4.30" + "@vue/shared" "3.4.30" + csstype "^3.1.3" + +"@vue/server-renderer@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.4.30.tgz#41f117cec12b5fbb9d7c741f59e7a0b515e9b607" + integrity sha512-TBD3eqR1DeDc0cMrXS/vEs/PWzq1uXxnvjoqQuDGFIEHFIwuDTX/KWAQKIBjyMWLFHEeTDGYVsYci85z2UbTDg== + dependencies: + "@vue/compiler-ssr" "3.4.30" + "@vue/shared" "3.4.30" + +"@vue/shared@3.4.30": + version "3.4.30" + resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.30.tgz#72acfe8df65139dcf298e965fb2ab1cff419e400" + integrity sha512-CLg+f8RQCHQnKvuHY9adMsMaQOcqclh6Z5V9TaoMgy0ut0tz848joZ7/CYFFyF/yZ5i2yaw7Fn498C+CNZVHIg== + +accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://mirrors.cloud.tencent.com/npm/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-jsx@^5.3.2: + version "5.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://mirrors.cloud.tencent.com/npm/acorn/-/acorn-8.10.0.tgz" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + +ajv@^6.12.4: + 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.1, ajv@^8.6.0: + version "8.12.0" + resolved "https://mirrors.cloud.tencent.com/npm/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@^4.2.1: + version "4.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/any-promise/-/any-promise-1.3.0.tgz" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/archiver-utils/-/archiver-utils-2.1.0.tgz" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^5.3.0: + version "5.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/archiver/-/archiver-5.3.1.tgz" + integrity sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.3" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.0.0" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + +arg@^5.0.2: + version "5.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +arraybuffer.prototype.slice@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz" + integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/astral-regex/-/astral-regex-2.0.0.tgz" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.3: + version "3.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/asynckit/-/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +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.4.15: + version "10.4.15" + resolved "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.15.tgz" + integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== + dependencies: + browserslist "^4.21.10" + caniuse-lite "^1.0.30001520" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios-retry@^3.7.0: + version "3.7.0" + resolved "https://registry.npmmirror.com/axios-retry/-/axios-retry-3.7.0.tgz" + integrity sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ== + dependencies: + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" + +axios@^1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/axios/-/axios-1.5.0.tgz" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" + +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.4.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://mirrors.cloud.tencent.com/npm/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +body-parser@1.20.1: + version "1.20.1" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/boolbase/-/boolbase-1.0.0.tgz" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.10, browserslist@^4.21.9: + version "4.21.10" + resolved "https://mirrors.cloud.tencent.com/npm/browserslist/-/browserslist-4.21.10.tgz" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== + dependencies: + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" + +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: + version "0.2.13" + resolved "https://mirrors.cloud.tencent.com/npm/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +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://mirrors.cloud.tencent.com/npm/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/builtin-modules/-/builtin-modules-3.3.0.tgz" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/bytes/-/bytes-3.0.0.tgz" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.2: + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +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@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/camel-case/-/camel-case-3.0.0.tgz" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: + version "1.0.30001525" + resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz" + integrity sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q== + +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@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://mirrors.cloud.tencent.com/npm/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: + version "3.5.3" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +ci-info@^3.7.1: + version "3.8.0" + resolved "https://mirrors.cloud.tencent.com/npm/ci-info/-/ci-info-3.8.0.tgz" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +clean-css@^4.2.1: + version "4.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/clean-css/-/clean-css-4.2.4.tgz" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://mirrors.cloud.tencent.com/npm/cli-spinners/-/cli-spinners-2.9.0.tgz" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/cliui/-/cliui-8.0.1.tgz" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/clone/-/clone-1.0.4.tgz" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +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://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://mirrors.cloud.tencent.com/npm/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0, commander@^2.20.0: + version "2.20.3" + resolved "https://mirrors.cloud.tencent.com/npm/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.npmmirror.com/common-tags/-/common-tags-1.8.2.tgz" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/compress-commons/-/compress-commons-4.1.1.tgz" + integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.5.0: + version "0.5.0" + resolved "https://mirrors.cloud.tencent.com/npm/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.31.0: + version "3.32.1" + resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.32.1.tgz" + integrity sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA== + dependencies: + browserslist "^4.21.10" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/crc32-stream/-/crc32-stream-4.0.2.tgz" + integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +dayjs@^1.11.9: + version "1.11.9" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.9.tgz" + integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== + +debug@2.6.9: + version "2.6.9" + resolved "https://mirrors.cloud.tencent.com/npm/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-prop@6.0.1: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/dot-prop/-/dot-prop-6.0.1.tgz" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/ee-first/-/ee-first-1.1.1.tgz" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.npmmirror.com/ejs/-/ejs-3.1.9.tgz" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.477: + version "1.4.480" + resolved "https://mirrors.cloud.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.4.480.tgz" + integrity sha512-IXTgg+bITkQv/FLP9FjX6f9KFCs5hQWeh5uNSKxB9mqYj/JXhHDbu+ekS43LVvbkL3eW6/oZy4+r9Om6lan1Uw== + +elementtree@0.1.7: + version "0.1.7" + resolved "https://mirrors.cloud.tencent.com/npm/elementtree/-/elementtree-0.1.7.tgz" + integrity sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA= + dependencies: + sax "1.1.4" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://mirrors.cloud.tencent.com/npm/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +es-abstract@^1.20.4, es-abstract@^1.22.1: + version "1.22.1" + resolved "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.1.tgz" + integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.1" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.0" + safe-array-concat "^1.0.0" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.10" + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild-android-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" + integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" + integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" + integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" + integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" + integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" + integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" + integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" + integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" + integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" + integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" + integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" + integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" + integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" + integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" + integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" + integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" + integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" + integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.51: + version "0.14.51" + resolved "https://mirrors.cloud.tencent.com/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz" + integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://mirrors.cloud.tencent.com/npm/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" + integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@0.14.51: + version "0.14.51" + resolved "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.14.51.tgz" + integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== + optionalDependencies: + esbuild-android-64 "0.14.51" + esbuild-android-arm64 "0.14.51" + esbuild-darwin-64 "0.14.51" + esbuild-darwin-arm64 "0.14.51" + esbuild-freebsd-64 "0.14.51" + esbuild-freebsd-arm64 "0.14.51" + esbuild-linux-32 "0.14.51" + esbuild-linux-64 "0.14.51" + esbuild-linux-arm "0.14.51" + esbuild-linux-arm64 "0.14.51" + esbuild-linux-mips64le "0.14.51" + esbuild-linux-ppc64le "0.14.51" + esbuild-linux-riscv64 "0.14.51" + esbuild-linux-s390x "0.14.51" + esbuild-netbsd-64 "0.14.51" + esbuild-openbsd-64 "0.14.51" + esbuild-sunos-64 "0.14.51" + esbuild-windows-32 "0.14.51" + esbuild-windows-64 "0.14.51" + esbuild-windows-arm64 "0.14.51" + +esbuild@^0.14.27: + version "0.14.54" + resolved "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.14.54.tgz" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/escape-html/-/escape-html-1.0.3.tgz" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +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://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + +eslint-plugin-vue@^9.17.0: + version "9.17.0" + resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz" + integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^6.0.13" + semver "^7.5.4" + vue-eslint-parser "^9.3.1" + xml-name-validator "^4.0.0" + +eslint-scope@^7.1.1, eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.48.0: + version "8.48.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.48.0.tgz" + integrity sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.48.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.3.1, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://mirrors.cloud.tencent.com/npm/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-1.0.1.tgz" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://mirrors.cloud.tencent.com/npm/etag/-/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +express@^4.17.3: + version "4.18.2" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@3.2.12: + version "3.2.12" + resolved "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + 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-glob@^3.2.12: + version "3.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/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, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.15.0" + resolved "https://mirrors.cloud.tencent.com/npm/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +figures@^3.0.0: + version "3.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/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-up@^5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://mirrors.cloud.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/fraction.js/-/fraction.js-4.2.0.tgz" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://mirrors.cloud.tencent.com/npm/fresh/-/fresh-0.5.2.tgz" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^11.1.0: + version "11.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/fs-extra/-/fs-extra-11.1.1.tgz" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.1: + 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.realpath@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.6" + resolved "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +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://mirrors.cloud.tencent.com/npm/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/get-intrinsic/-/get-intrinsic-1.2.1.tgz" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-proto "^1.0.1" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://mirrors.cloud.tencent.com/npm/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/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== + +globals@^13.19.0: + version "13.21.0" + resolved "https://registry.npmmirror.com/globals/-/globals-13.21.0.tgz" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +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.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://mirrors.cloud.tencent.com/npm/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +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://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/html-minifier/-/html-minifier-4.0.0.tgz" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://mirrors.cloud.tencent.com/npm/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.npmmirror.com/idb/-/idb-7.1.1.tgz" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/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== + +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" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inquirer@^8.2.1: + version "8.2.5" + resolved "https://mirrors.cloud.tencent.com/npm/inquirer/-/inquirer-8.2.5.tgz" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://mirrors.cloud.tencent.com/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.12.0: + version "2.12.1" + resolved "https://mirrors.cloud.tencent.com/npm/is-core-module/-/is-core-module-2.12.1.tgz" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-module/-/is-module-1.0.0.tgz" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +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-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/isbinaryfile/-/isbinaryfile-5.0.0.tgz" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isnumber@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isnumber/-/isnumber-1.0.0.tgz#0e3f9759b581d99dd85086f0ec2a74909cfadd01" + integrity sha512-JLiSz/zsZcGFXPrB4I/AGBvtStkt+8QmksyZBZnVXnnK9XdTEyz0tX8CRYljtwYDuIuZzih6DpHQdi+3Q6zHPw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/isobject/-/isobject-3.0.1.tgz" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +jake@^10.8.5: + version "10.8.7" + resolved "https://registry.npmmirror.com/jake/-/jake-10.8.7.tgz" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jiti@^1.18.2: + version "1.19.1" + resolved "https://mirrors.cloud.tencent.com/npm/jiti/-/jiti-1.19.1.tgz" + integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg== + +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== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +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-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== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^2.2.0, 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://mirrors.cloud.tencent.com/npm/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kolorist@^1.5.1: + version "1.8.0" + resolved "https://mirrors.cloud.tencent.com/npm/kolorist/-/kolorist-1.8.0.tgz" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + +lazystream@^1.0.0: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/lazystream/-/lazystream-1.0.1.tgz" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.5, lilconfig@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-2.1.0.tgz" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.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.defaults@^4.2.0: + version "4.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.difference/-/lodash.difference-4.5.0.tgz" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.flatten/-/lodash.flatten-4.4.0.tgz" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmmirror.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.union/-/lodash.union-4.6.0.tgz" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://mirrors.cloud.tencent.com/npm/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/lower-case/-/lower-case-1.1.4.tgz" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +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://mirrors.cloud.tencent.com/npm/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.30.10: + version "0.30.10" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/media-typer/-/media-typer-0.3.0.tgz" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +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: + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/methods/-/methods-1.1.2.tgz" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://mirrors.cloud.tencent.com/npm/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://mirrors.cloud.tencent.com/npm/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/nanoid/-/nanoid-3.3.6.tgz" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.3: + version "0.6.3" + resolved "https://mirrors.cloud.tencent.com/npm/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/no-case/-/no-case-2.3.2.tgz" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://mirrors.cloud.tencent.com/npm/node-releases/-/node-releases-2.0.13.tgz" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +nth-check@^2.1.1: + version "2.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://mirrors.cloud.tencent.com/npm/object-inspect/-/object-inspect-1.12.3.tgz" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +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.4: + 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" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://mirrors.cloud.tencent.com/npm/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +ora@^5.4.1: + version "5.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +param-case@^2.1.1: + version "2.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/param-case/-/param-case-2.1.1.tgz" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +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" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://mirrors.cloud.tencent.com/npm/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinia-plugin-persistedstate@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.1.tgz#66780602aecd6c7b152dd7e3ddc249a1f7a13fe5" + integrity sha512-MK++8LRUsGF7r45PjBFES82ISnPzyO6IZx3CH5vyPseFLZCk1g2kgx6l/nW8pEBKxxd4do0P6bJw+mUSZIEZUQ== + +pinia@^2.1.6: + version "2.1.6" + resolved "https://registry.npmmirror.com/pinia/-/pinia-2.1.6.tgz" + integrity sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ== + dependencies: + "@vue/devtools-api" "^6.5.0" + vue-demi ">=0.14.5" + +pirates@^4.0.1: + version "4.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-import/-/postcss-import-15.1.0.tgz" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-js/-/postcss-js-4.0.1.tgz" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-4.0.1.tgz" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-nested/-/postcss-nested-6.0.1.tgz" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13: + version "6.0.13" + resolved "https://mirrors.cloud.tencent.com/npm/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-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.13, postcss@^8.4.23, postcss@^8.4.29: + version "8.4.29" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.29.tgz" + integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/prettier/-/prettier-3.0.3.tgz" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qs@6.11.0: + version "6.11.0" + resolved "https://mirrors.cloud.tencent.com/npm/qs/-/qs-6.11.0.tgz" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@^6.11.2: + version "6.11.2" + resolved "https://mirrors.cloud.tencent.com/npm/qs/-/qs-6.11.2.tgz" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +quasar@^2.12.6: + version "2.12.6" + resolved "https://registry.npmmirror.com/quasar/-/quasar-2.12.6.tgz" + integrity sha512-C4rDMzRu+onIP+4f8WrXUJYqMZ7KsZZewU5zjxCPHQqDVKAWNbfqePN/4ME42PZ3u5C26J9eLLW32rc/vEXXfg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/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-cache@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/read-cache/-/read-cache-1.0.0.tgz" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.0, readable-stream@^2.0.5: + version "2.3.8" + resolved "https://mirrors.cloud.tencent.com/npm/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.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +readdir-glob@^1.0.0: + version "1.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/readdir-glob/-/readdir-glob-1.1.3.tgz" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + 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.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" + +regexp.prototype.flags@^1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +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" + +register-service-worker@^1.7.2: + version "1.7.2" + resolved "https://mirrors.cloud.tencent.com/npm/register-service-worker/-/register-service-worker-1.7.2.tgz" + integrity sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A== + +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://mirrors.cloud.tencent.com/npm/relateurl/-/relateurl-0.2.7.tgz" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +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.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.2: + version "1.22.3" + resolved "https://mirrors.cloud.tencent.com/npm/resolve/-/resolve-1.22.3.tgz" + integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== + dependencies: + is-core-module "^2.12.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.npmmirror.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-plugin-visualizer@^5.5.4: + version "5.9.2" + resolved "https://mirrors.cloud.tencent.com/npm/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.2.tgz" + integrity sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A== + dependencies: + open "^8.4.0" + picomatch "^2.3.1" + source-map "^0.7.4" + yargs "^17.5.1" + +"rollup@>=2.59.0 <2.78.0", rollup@^2.43.1: + version "2.77.3" + resolved "https://mirrors.cloud.tencent.com/npm/rollup/-/rollup-2.77.3.tgz" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== + optionalDependencies: + fsevents "~2.3.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.5: + version "7.8.1" + resolved "https://mirrors.cloud.tencent.com/npm/rxjs/-/rxjs-7.8.1.tgz" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +safe-array-concat@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz" + integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/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.2.0: + version "5.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass@1.32.12: + version "1.32.12" + resolved "https://mirrors.cloud.tencent.com/npm/sass/-/sass-1.32.12.tgz" + integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@1.1.4: + version "1.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/sax/-/sax-1.1.4.tgz" + integrity sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk= + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +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.5, semver@^7.3.6, semver@^7.5.4: + version "7.5.4" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/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@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://mirrors.cloud.tencent.com/npm/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" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/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.2: + version "3.0.7" + resolved "https://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/slice-ansi/-/slice-ansi-4.0.0.tgz" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +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.0: + version "0.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3, source-map@^0.7.4: + version "0.7.4" + resolved "https://mirrors.cloud.tencent.com/npm/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.8.0-beta.0.tgz" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +stack-trace@^1.0.0-pre2: + version "1.0.0-pre2" + resolved "https://mirrors.cloud.tencent.com/npm/stack-trace/-/stack-trace-1.0.0-pre2.tgz" + integrity sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A== + +statuses@2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/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.prototype.matchall@^4.0.6: + version "4.0.9" + resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz" + integrity sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/strip-comments/-/strip-comments-2.0.1.tgz" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +stylus@^0.60.0: + version "0.60.0" + resolved "https://registry.npmmirror.com/stylus/-/stylus-0.60.0.tgz" + integrity sha512-j2pBgEwzCu05yCuY4cmyp0FtPQQFBBAGB7TY7QaNl7eztiHwkxzwvIp5vjZJND/a1JNOka+ZW9ewVPFZpI3pcA== + dependencies: + "@adobe/css-tools" "~4.2.0" + debug "^4.3.2" + glob "^7.1.6" + sax "~1.2.4" + source-map "^0.7.3" + +sucrase@^3.32.0: + version "3.34.0" + resolved "https://mirrors.cloud.tencent.com/npm/sucrase/-/sucrase-3.34.0.tgz" + integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +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.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +table@^6.8.0: + version "6.8.1" + resolved "https://mirrors.cloud.tencent.com/npm/table/-/table-6.8.1.tgz" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tailwindcss@^3.3.3: + version "3.3.3" + resolved "https://mirrors.cloud.tencent.com/npm/tailwindcss/-/tailwindcss-3.3.3.tgz" + integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.12" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.18.2" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/temp-dir/-/temp-dir-2.0.0.tgz" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tempy/-/tempy-0.6.0.tgz" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terser@^5.0.0: + version "5.19.3" + resolved "https://registry.npmmirror.com/terser/-/terser-5.19.3.tgz" + integrity sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/text-table/-/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through@^2.3.6: + version "2.3.8" + resolved "https://mirrors.cloud.tencent.com/npm/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://mirrors.cloud.tencent.com/npm/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +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://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/tr46/-/tr46-1.0.1.tgz" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://mirrors.cloud.tencent.com/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.1.0: + version "2.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/tslib/-/tslib-2.6.1.tgz" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.16.0.tgz" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://mirrors.cloud.tencent.com/npm/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://mirrors.cloud.tencent.com/npm/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +uglify-js@^3.5.1: + version "3.17.4" + resolved "https://mirrors.cloud.tencent.com/npm/uglify-js/-/uglify-js-3.17.4.tgz" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +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== + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unique-string/-/unique-string-2.0.0.tgz" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/unpipe/-/unpipe-1.0.0.tgz" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://mirrors.cloud.tencent.com/npm/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/upper-case/-/upper-case-1.1.3.tgz" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +vary@~1.1.2: + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/vary/-/vary-1.1.2.tgz" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vite@^2.9.13: + version "2.9.16" + resolved "https://mirrors.cloud.tencent.com/npm/vite/-/vite-2.9.16.tgz" + integrity sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +vue-demi@>=0.14.5: + version "0.14.6" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz" + integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== + +vue-eslint-parser@^9.3.1: + version "9.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz" + integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +vue-router@^4.2.4: + version "4.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/vue-router/-/vue-router-4.2.4.tgz" + integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ== + dependencies: + "@vue/devtools-api" "^6.5.0" + +vue@^3.4.30: + version "3.4.30" + resolved "https://registry.npmmirror.com/vue/-/vue-3.4.30.tgz#02c75c63a21e305c38a937866d8ee2269b62bbb4" + integrity sha512-NcxtKCwkdf1zPsr7Y8+QlDBCGqxvjLXF2EX+yi76rV5rrz90Y6gK1cq0olIhdWGgrlhs9ElHuhi9t3+W5sG5Xw== + dependencies: + "@vue/compiler-dom" "3.4.30" + "@vue/compiler-sfc" "3.4.30" + "@vue/runtime-dom" "3.4.30" + "@vue/server-renderer" "3.4.30" + "@vue/shared" "3.4.30" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-merge@^5.8.0: + version "5.9.0" + resolved "https://mirrors.cloud.tencent.com/npm/webpack-merge/-/webpack-merge-5.9.0.tgz" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-7.1.0.tgz" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.10, which-typed-array@^1.1.11: + version "1.1.11" + resolved "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.11.tgz" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/wildcard/-/wildcard-2.0.1.tgz" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +workbox-background-sync@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz" + integrity sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA== + dependencies: + idb "^7.0.1" + workbox-core "7.0.0" + +workbox-broadcast-update@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz" + integrity sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ== + dependencies: + workbox-core "7.0.0" + +workbox-build@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-build/-/workbox-build-7.0.0.tgz" + integrity sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "7.0.0" + workbox-broadcast-update "7.0.0" + workbox-cacheable-response "7.0.0" + workbox-core "7.0.0" + workbox-expiration "7.0.0" + workbox-google-analytics "7.0.0" + workbox-navigation-preload "7.0.0" + workbox-precaching "7.0.0" + workbox-range-requests "7.0.0" + workbox-recipes "7.0.0" + workbox-routing "7.0.0" + workbox-strategies "7.0.0" + workbox-streams "7.0.0" + workbox-sw "7.0.0" + workbox-window "7.0.0" + +workbox-cacheable-response@7.0.0, workbox-cacheable-response@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz" + integrity sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g== + dependencies: + workbox-core "7.0.0" + +workbox-core@7.0.0, workbox-core@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-core/-/workbox-core-7.0.0.tgz" + integrity sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ== + +workbox-expiration@7.0.0, workbox-expiration@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-expiration/-/workbox-expiration-7.0.0.tgz" + integrity sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ== + dependencies: + idb "^7.0.1" + workbox-core "7.0.0" + +workbox-google-analytics@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz" + integrity sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg== + dependencies: + workbox-background-sync "7.0.0" + workbox-core "7.0.0" + workbox-routing "7.0.0" + workbox-strategies "7.0.0" + +workbox-navigation-preload@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz" + integrity sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA== + dependencies: + workbox-core "7.0.0" + +workbox-precaching@7.0.0, workbox-precaching@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-precaching/-/workbox-precaching-7.0.0.tgz" + integrity sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA== + dependencies: + workbox-core "7.0.0" + workbox-routing "7.0.0" + workbox-strategies "7.0.0" + +workbox-range-requests@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz" + integrity sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ== + dependencies: + workbox-core "7.0.0" + +workbox-recipes@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-recipes/-/workbox-recipes-7.0.0.tgz" + integrity sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww== + dependencies: + workbox-cacheable-response "7.0.0" + workbox-core "7.0.0" + workbox-expiration "7.0.0" + workbox-precaching "7.0.0" + workbox-routing "7.0.0" + workbox-strategies "7.0.0" + +workbox-routing@7.0.0, workbox-routing@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-routing/-/workbox-routing-7.0.0.tgz" + integrity sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA== + dependencies: + workbox-core "7.0.0" + +workbox-strategies@7.0.0, workbox-strategies@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-strategies/-/workbox-strategies-7.0.0.tgz" + integrity sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA== + dependencies: + workbox-core "7.0.0" + +workbox-streams@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-streams/-/workbox-streams-7.0.0.tgz" + integrity sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ== + dependencies: + workbox-core "7.0.0" + workbox-routing "7.0.0" + +workbox-sw@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-sw/-/workbox-sw-7.0.0.tgz" + integrity sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA== + +workbox-window@7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/workbox-window/-/workbox-window-7.0.0.tgz" + integrity sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "7.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/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://mirrors.cloud.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +"xlsx@https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz": + version "0.20.0" + resolved "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz" + integrity sha512-adg5edVTkXXGTnb0iWrc3Z47ViGgwmD47yx6VfSCZhfdKPtHcElYGs48OtcO4nwOu90Pjz5mmyl0HLcvbSRYTQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/xml-name-validator/-/xml-name-validator-4.0.0.tgz" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://mirrors.cloud.tencent.com/npm/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +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://mirrors.cloud.tencent.com/npm/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^2.1.1: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-2.3.1.tgz" + integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.5.1: + version "17.7.2" + resolved "https://mirrors.cloud.tencent.com/npm/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/zip-stream/-/zip-stream-4.1.0.tgz" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0"