diff --git a/.gitignore b/.gitignore index 675fb688..0a684e6a 100644 --- a/.gitignore +++ b/.gitignore @@ -75,6 +75,7 @@ docs/_build/ # PyBuilder .pybuilder/ target/ +*.pid # Jupyter Notebook .ipynb_checkpoints @@ -106,7 +107,6 @@ celerybeat.pid *.sage.py # Environments -.env .venv env/ venv/ @@ -150,9 +150,12 @@ main/manager-web/node_modules .config.yaml .secrets.yaml .private_config.yaml -.env.development # model files main/xiaozhi-server/models/SenseVoiceSmall/model.pt main/xiaozhi-server/models/sherpa-onnx* my_wakeup_words.mp3 +main/manager-api/.vscode + +# Ignore webpack cache directory +main/manager-web/.webpack_cache/ \ No newline at end of file diff --git a/docs/Deployment.md b/docs/Deployment.md index 8765d26f..cb64e604 100644 --- a/docs/Deployment.md +++ b/docs/Deployment.md @@ -241,7 +241,7 @@ pip install -r requirements.txt ## 4.配置项目文件 -接下里,程序还不能直接运行,你需要配置一下,你到底使用的是什么模型。你可以看这个教程: +接下来,程序还不能直接运行,你需要配置一下,你到底使用的是什么模型。你可以看这个教程: [跳转到配置项目文件](#配置项目) ## 5.运行项目 @@ -338,4 +338,4 @@ LLM: [5、我说话很慢,停顿时小智老是抢话](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) -[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) \ No newline at end of file +[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E8%AF%B4%E7%9A%84%E8%AF%9D%E5%B0%8F%E6%99%BA%E8%AF%86%E5%88%AB%E5%87%BA%E6%9D%A5%E5%BE%88%E5%A4%9A%E9%9F%A9%E6%96%87%E6%97%A5%E6%96%87%E8%8B%B1%E6%96%87) diff --git a/main/README.md b/main/README.md index df4e57a4..741a626b 100644 --- a/main/README.md +++ b/main/README.md @@ -18,6 +18,4 @@ xiaozhi-esp32-server # manager-web 、manager-api接口协议 -[manager前后端接口协议](https://app.apifox.com/invite/project?token=eXg2_tUv85q-gc3ZRowmn) - -[前端页面设计图](https://codesign.qq.com/app/s/526108506410828) +https://2662r3426b.vicp.fun/xiaozhi-esp32-api/api/v1/doc.html diff --git a/main/manager-api/README.md b/main/manager-api/README.md index 0435956e..98010c62 100644 --- a/main/manager-api/README.md +++ b/main/manager-api/README.md @@ -5,12 +5,11 @@ manager-api 该项目基于SpringBoot框架开发。 开发使用代码编辑器,导入项目时,选择`manager-api`文件夹作为项目目录 -参照[manager前后端接口协议](https://app.apifox.com/invite/project?token=H_8qhgfjUeaAL0wybghgU)开发 - # 开发环境 JDK 21 Maven 3.8+ MySQL 8.0+ +Redis 5.0+ Vue 3.x # 创建数据库 @@ -43,6 +42,30 @@ spring: password: 123456 ``` + +# 连接Redis + +如果还没有Redis,你可以通过docker安装redis + +``` +docker run --name xiaozhi-esp32-server-redis -d -p 6379:6379 redis +``` + +# 确认项目Redis连接信息 + +在`src/main/resources/application-dev.yml`中配置Redis连接信息 + +``` +spring: + data: + redis: + host: localhost + port: 6379 + password: + database: 0 +``` + + # 测试启动 本项目为SpringBoot项目,启动方式为: @@ -58,15 +81,16 @@ src/main/java/xiaozhi/AdminApplication.java 执行以下命令生产jar包 ``` -mvn install +mvn clean install ``` 把jar包放在服务器上,执行 ``` -nohup java -jar xiaozhi-esp32-api.jar --spring.profiles.active=dev >/dev/null & +nohup java -jar xiaozhi-esp32-api.jar --spring.profiles.activate=dev ``` + # 接口文档 启动后打开:http://localhost:8002/xiaozhi-esp32-api/doc.html diff --git a/main/manager-api/pom.xml b/main/manager-api/pom.xml index eacbdff9..9ad38043 100644 --- a/main/manager-api/pom.xml +++ b/main/manager-api/pom.xml @@ -18,7 +18,7 @@ UTF-8 UTF-8 21 - 5.12.0 + 5.10.1 1.2.20 3.5.5 5.8.24 @@ -27,7 +27,6 @@ 2.0.2 1.6.2 33.0.0-jre - 3.3.2 4.20.0 @@ -88,6 +87,36 @@ ${junit.version} test + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-params + ${junit.version} + test + + + org.junit.platform + junit-platform-launcher + 1.10.1 + test + + + org.junit.platform + junit-platform-commons + 1.10.1 + test + + + org.junit.platform + junit-platform-engine + 1.10.1 + test + org.springframework.boot spring-boot-starter-test diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java index b25c6fb4..9bd6cb9d 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java @@ -1,6 +1,10 @@ package xiaozhi.common.annotation; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 数据过滤注解 diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java index b2514ef5..6f6f778d 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java @@ -1,6 +1,10 @@ package xiaozhi.common.annotation; -import java.lang.annotation.*; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; /** * 操作日志注解 diff --git a/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java b/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java index 69248613..d4233e72 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java +++ b/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java @@ -1,14 +1,15 @@ package xiaozhi.common.aspect; -import xiaozhi.common.exception.ErrorCode; -import xiaozhi.common.exception.RenException; -import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import lombok.extern.slf4j.Slf4j; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; + /** * Redis切面处理类 * Copyright (c) 人人开源 All rights reserved. @@ -19,7 +20,7 @@ import org.springframework.stereotype.Component; @Component public class RedisAspect { /** - * 是否开启redis缓存 true开启 false关闭 + * 是否开启redis缓存 true开启 false关闭 */ @Value("${renren.redis.open}") private boolean open; diff --git a/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java b/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java index 2890a61c..250e0d07 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java @@ -1,12 +1,14 @@ package xiaozhi.common.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; + import xiaozhi.common.interceptor.DataFilterInterceptor; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; /** * mybatis-plus配置 diff --git a/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java b/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java index c9e38ab1..da23a233 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java @@ -1,11 +1,12 @@ package xiaozhi.common.config; -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Info; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; + /** * Swagger配置 * Copyright (c) 人人开源 All rights reserved. @@ -14,11 +15,60 @@ import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { + @Bean + public GroupedOpenApi deviceApi() { + return GroupedOpenApi.builder() + .group("device") + .pathsToMatch("/device/**") + .build(); + } + + @Bean + public GroupedOpenApi agentApi() { + return GroupedOpenApi.builder() + .group("agent") + .pathsToMatch("/agent/**") + .build(); + } + + @Bean + public GroupedOpenApi modelApi() { + return GroupedOpenApi.builder() + .group("models") + .pathsToMatch("/models/**") + .build(); + } + + @Bean + public GroupedOpenApi oatApi() { + return GroupedOpenApi.builder() + .group("ota") + .pathsToMatch("/ota/**") + .build(); + } + + @Bean + public GroupedOpenApi timbreApi() { + return GroupedOpenApi.builder() + .group("timbre") + .pathsToMatch("/timbre/**") + .build(); + } + + @Bean + public GroupedOpenApi sysApi() { + return GroupedOpenApi.builder() + .group("admin") + .pathsToMatch("/admin/**") + .build(); + } + @Bean public GroupedOpenApi userApi() { - String[] paths = {"/**"}; - return GroupedOpenApi.builder().group("xiaozhi") - .pathsToMatch(paths).build(); + return GroupedOpenApi.builder() + .group("user") + .pathsToMatch("/user/**") + .build(); } @Bean diff --git a/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java index a8439180..fd0f74c2 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java +++ b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java @@ -1,17 +1,17 @@ package xiaozhi.common.convert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.convert.converter.Converter; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + /** * 日期转换 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java b/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java index e7e2f345..ce267bab 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java @@ -1,12 +1,13 @@ package xiaozhi.common.entity; +import java.io.Serializable; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import java.io.Serializable; -import java.util.Date; +import lombok.Data; /** * 基础实体类,所有实体都需要继承 diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java index cf295dcf..9b928d5c 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java @@ -1,6 +1,5 @@ package xiaozhi.common.exception; - import xiaozhi.common.utils.MessageUtils; /** @@ -10,7 +9,6 @@ import xiaozhi.common.utils.MessageUtils; */ public class RenException extends RuntimeException { - private int code; private String msg; diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java index 06665ee2..0f83772e 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java @@ -1,13 +1,13 @@ package xiaozhi.common.exception; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.UnauthorizedException; import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; -import xiaozhi.common.utils.Result; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import xiaozhi.common.utils.Result; /** * 异常处理器 @@ -23,35 +23,34 @@ public class RenExceptionHandler { * 处理自定义异常 */ @ExceptionHandler(RenException.class) - public Result handleRenException(RenException ex) { - Result result = new Result(); + public Result handleRenException(RenException ex) { + Result result = new Result<>(); result.error(ex.getCode(), ex.getMsg()); return result; } @ExceptionHandler(DuplicateKeyException.class) - public Result handleDuplicateKeyException(DuplicateKeyException ex) { - Result result = new Result(); + public Result handleDuplicateKeyException(DuplicateKeyException ex) { + Result result = new Result<>(); result.error(ErrorCode.DB_RECORD_EXISTS); return result; } @ExceptionHandler(UnauthorizedException.class) - public Result handleUnauthorizedException(UnauthorizedException ex) { - Result result = new Result(); + public Result handleUnauthorizedException(UnauthorizedException ex) { + Result result = new Result<>(); result.error(ErrorCode.FORBIDDEN); return result; } - @ExceptionHandler(Exception.class) - public Result handleException(Exception ex) { + public Result handleException(Exception ex) { log.error(ex.getMessage(), ex); - return new Result().error(); + return new Result().error(); } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java b/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java index 20371fd6..a6b33b62 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java +++ b/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java @@ -1,13 +1,15 @@ package xiaozhi.common.handler; -import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; -import xiaozhi.common.constant.Constant; -import xiaozhi.common.user.UserDetail; -import xiaozhi.modules.security.user.SecurityUser; +import java.util.Date; + import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; -import java.util.Date; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; + +import xiaozhi.common.constant.Constant; +import xiaozhi.common.user.UserDetail; +import xiaozhi.modules.security.user.SecurityUser; /** * 公共字段,自动填充值 @@ -22,35 +24,34 @@ public class FieldMetaObjectHandler implements MetaObjectHandler { private final static String UPDATER = "updater"; private final static String DATA_OPERATION = "dataOperation"; - private final static String DEPT_ID = "deptId"; @Override public void insertFill(MetaObject metaObject) { UserDetail user = SecurityUser.getUser(); Date date = new Date(); - //创建者 + // 创建者 strictInsertFill(metaObject, CREATOR, Long.class, user.getId()); - //创建时间 + // 创建时间 strictInsertFill(metaObject, CREATE_DATE, Date.class, date); - //更新者 + // 更新者 strictInsertFill(metaObject, UPDATER, Long.class, user.getId()); - //更新时间 + // 更新时间 strictInsertFill(metaObject, UPDATE_DATE, Date.class, date); - //数据标识 + // 数据标识 strictInsertFill(metaObject, DATA_OPERATION, String.class, Constant.DataOperation.INSERT.getValue()); } @Override public void updateFill(MetaObject metaObject) { - //更新者 + // 更新者 strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId()); - //更新时间 + // 更新时间 strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date()); - //数据标识 + // 数据标识 strictInsertFill(metaObject, DATA_OPERATION, String.class, Constant.DataOperation.UPDATE.getValue()); } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java index 160e7ff3..0457686b 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java +++ b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java @@ -1,8 +1,17 @@ package xiaozhi.common.interceptor; -import cn.hutool.core.util.StrUtil; +import java.util.Map; + +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + import com.baomidou.mybatisplus.core.toolkit.PluginUtils; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; + +import cn.hutool.core.util.StrUtil; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.StringValue; @@ -10,13 +19,6 @@ import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; -import org.apache.ibatis.executor.Executor; -import org.apache.ibatis.mapping.BoundSql; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.session.ResultHandler; -import org.apache.ibatis.session.RowBounds; - -import java.util.Map; /** * 数据过滤 @@ -25,8 +27,10 @@ import java.util.Map; */ public class DataFilterInterceptor implements InnerInterceptor { + @SuppressWarnings("rawtypes") @Override - public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, + ResultHandler resultHandler, BoundSql boundSql) { DataScope scope = getDataScope(parameter); // 不进行数据过滤 if (scope == null || StrUtil.isBlank(scope.getSqlFilter())) { @@ -48,7 +52,7 @@ public class DataFilterInterceptor implements InnerInterceptor { // 判断参数里是否有DataScope对象 if (parameter instanceof Map) { Map parameterMap = (Map) parameter; - for (Map.Entry entry : parameterMap.entrySet()) { + for (Map.Entry entry : parameterMap.entrySet()) { if (entry.getValue() != null && entry.getValue() instanceof DataScope) { return (DataScope) entry.getValue(); } diff --git a/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java b/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java index b7e943d2..83e93c11 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java +++ b/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java @@ -1,11 +1,11 @@ package xiaozhi.common.page; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import java.io.Serializable; import java.util.List; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + /** * 分页工具类 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java b/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java index 48d26f3a..cce1a6df 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java @@ -1,10 +1,10 @@ package xiaozhi.common.page; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.io.Serializable; - /** * 令牌信息 * @@ -14,7 +14,6 @@ import java.io.Serializable; @Schema(description = "令牌信息") public class TokenDTO implements Serializable { - @Schema(description = "密码") private String token; diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java index a4316b63..703a8492 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java @@ -1,6 +1,5 @@ package xiaozhi.common.redis; -import jakarta.annotation.Resource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -8,6 +7,8 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import jakarta.annotation.Resource; + /** * Redis配置 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java index 4626b14d..240e1339 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java @@ -1,14 +1,15 @@ package xiaozhi.common.redis; -import jakarta.annotation.Resource; -import org.springframework.data.redis.core.HashOperations; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.stereotype.Component; - import java.util.Collection; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; + /** * Redis工具类 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java b/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java index 01bd48ca..2feaefd1 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java +++ b/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java @@ -1,10 +1,10 @@ package xiaozhi.common.service; -import com.baomidou.mybatisplus.core.conditions.Wrapper; - import java.io.Serializable; import java.util.Collection; +import com.baomidou.mybatisplus.core.conditions.Wrapper; + /** * 基础服务接口,所有Service接口都要继承 * Copyright (c) 人人开源 All rights reserved. @@ -56,7 +56,8 @@ public interface BaseService { *

* * @param entity 实体对象 - * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} + * @param updateWrapper 实体对象封装操作类 + * {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} */ boolean update(T entity, Wrapper updateWrapper); diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java b/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java index bc1094e4..51f16bcb 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java +++ b/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java @@ -1,11 +1,11 @@ package xiaozhi.common.service; -import xiaozhi.common.page.PageData; - import java.io.Serializable; import java.util.List; import java.util.Map; +import xiaozhi.common.page.PageData; + /** * CRUD基础服务接口 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java index 16fd6feb..8ebb4cd1 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java @@ -1,5 +1,18 @@ package xiaozhi.common.service.impl; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + +import org.apache.ibatis.binding.MapperMethod; +import org.apache.ibatis.logging.Log; +import org.apache.ibatis.logging.LogFactory; +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.enums.SqlMethod; import com.baomidou.mybatisplus.core.mapper.BaseMapper; @@ -10,22 +23,11 @@ import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; + import xiaozhi.common.constant.Constant; import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.common.utils.ConvertUtils; -import org.apache.ibatis.binding.MapperMethod; -import org.apache.ibatis.logging.Log; -import org.apache.ibatis.logging.LogFactory; -import org.apache.ibatis.session.SqlSession; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.annotation.Transactional; - -import java.io.Serializable; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; /** * 基础服务类,所有Service都要继承 @@ -45,7 +47,7 @@ public abstract class BaseServiceImpl, T> implements Bas * @param isAsc 排序方式 */ protected IPage getPage(Map params, String defaultOrderField, boolean isAsc) { - //分页参数 + // 分页参数 long curPage = 1; long limit = 10; @@ -56,17 +58,17 @@ public abstract class BaseServiceImpl, T> implements Bas limit = Long.parseLong((String) params.get(Constant.LIMIT)); } - //分页对象 + // 分页对象 Page page = new Page<>(curPage, limit); - //分页参数 + // 分页参数 params.put(Constant.PAGE, page); - //排序字段 + // 排序字段 String orderField = (String) params.get(Constant.ORDER_FIELD); String order = (String) params.get(Constant.ORDER); - //前端字段排序 + // 前端字段排序 if (StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)) { if (Constant.ASC.equalsIgnoreCase(order)) { return page.addOrder(OrderItem.asc(orderField)); @@ -75,12 +77,12 @@ public abstract class BaseServiceImpl, T> implements Bas } } - //没有排序字段,则不排序 + // 没有排序字段,则不排序 if (StringUtils.isBlank(defaultOrderField)) { return page; } - //默认排序 + // 默认排序 if (isAsc) { page.addOrder(OrderItem.asc(defaultOrderField)); } else { @@ -90,13 +92,13 @@ public abstract class BaseServiceImpl, T> implements Bas return page; } - protected PageData getPageData(List list, long total, Class target) { - List targetList = ConvertUtils.sourceToTarget(list, target); + protected PageData getPageData(List list, long total, Class target) { + List targetList = ConvertUtils.sourceToTarget(list, target); return new PageData<>(targetList, total); } - protected PageData getPageData(IPage page, Class target) { + protected PageData getPageData(IPage page, Class target) { return getPageData(page.getRecords(), page.getTotal(), target); } @@ -126,10 +128,12 @@ public abstract class BaseServiceImpl, T> implements Bas return SqlHelper.retBool(result); } + @SuppressWarnings("unchecked") protected Class currentMapperClass() { return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 0); } + @SuppressWarnings("unchecked") @Override public Class currentModelClass() { return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1); @@ -164,11 +168,11 @@ public abstract class BaseServiceImpl, T> implements Bas /** * 执行批量操作 */ + @SuppressWarnings("deprecation") protected boolean executeBatch(Collection list, int batchSize, BiConsumer consumer) { return SqlHelper.executeBatch(this.currentModelClass(), this.log, list, batchSize, consumer); } - @Override @Transactional(rollbackFor = Exception.class) public boolean updateById(T entity) { diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java index 6608e7c3..524a8cb2 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java @@ -1,26 +1,30 @@ package xiaozhi.common.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; -import xiaozhi.common.page.PageData; -import xiaozhi.common.service.CrudService; -import xiaozhi.common.utils.ConvertUtils; -import org.springframework.beans.BeanUtils; - import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Map; +import org.springframework.beans.BeanUtils; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.CrudService; +import xiaozhi.common.utils.ConvertUtils; + /** * CRUD基础服务类 * Copyright (c) 人人开源 All rights reserved. * Website: https://www.renren.io */ -public abstract class CrudServiceImpl, T, D> extends BaseServiceImpl implements CrudService { +public abstract class CrudServiceImpl, T, D> extends BaseServiceImpl + implements CrudService { + @SuppressWarnings("unchecked") protected Class currentDtoClass() { return (Class) ReflectionKit.getSuperClassGenericType(getClass(), CrudServiceImpl.class, 2); } @@ -29,8 +33,7 @@ public abstract class CrudServiceImpl, T, D> extends Bas public PageData page(Map params) { IPage page = baseDao.selectPage( getPage(params, null, false), - getWrapper(params) - ); + getWrapper(params)); return getPageData(page, currentDtoClass()); } @@ -56,7 +59,7 @@ public abstract class CrudServiceImpl, T, D> extends Bas T entity = ConvertUtils.sourceToTarget(dto, currentModelClass()); insert(entity); - //copy主键值到dto + // copy主键值到dto BeanUtils.copyProperties(entity, dto); } diff --git a/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java b/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java index 2ad023d7..0aa9210b 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java +++ b/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java @@ -1,9 +1,9 @@ package xiaozhi.common.user; -import lombok.Data; - import java.io.Serializable; +import lombok.Data; + /** * 登录用户信息 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java index 7a5bc0ed..07ade50f 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java @@ -1,12 +1,13 @@ package xiaozhi.common.utils; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; - import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.springframework.beans.BeanUtils; + +import lombok.extern.slf4j.Slf4j; + /** * 转换工具类 * Copyright (c) 人人开源 All rights reserved. @@ -20,7 +21,7 @@ public class ConvertUtils { } T targetObject = null; try { - targetObject = target.newInstance(); + targetObject = target.getDeclaredConstructor().newInstance(); BeanUtils.copyProperties(source, targetObject); } catch (Exception e) { log.error("convert error ", e); @@ -34,10 +35,10 @@ public class ConvertUtils { return null; } - List targetList = new ArrayList<>(sourceList.size()); + List targetList = new ArrayList<>(sourceList.size()); try { for (Object source : sourceList) { - T targetObject = target.newInstance(); + T targetObject = target.getDeclaredConstructor().newInstance(); BeanUtils.copyProperties(source, targetObject); targetList.add(targetObject); } diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java index 8d76434c..0e46acf1 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java @@ -1,20 +1,21 @@ package xiaozhi.common.utils; -import jakarta.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpHeaders; import org.springframework.util.DigestUtils; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; + +import jakarta.servlet.http.HttpServletRequest; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; - /** * Http * Copyright (c) 人人开源 All rights reserved. @@ -70,15 +71,15 @@ public class HttpContextUtils { } public static String getLanguage() { - //默认语言 + // 默认语言 String defaultLanguage = "zh-CN"; - //request + // request HttpServletRequest request = getHttpServletRequest(); if (request == null) { return defaultLanguage; } - //请求语言 + // 请求语言 defaultLanguage = request.getHeader(HttpHeaders.ACCEPT_LANGUAGE); return defaultLanguage; diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java index 307ad3b5..fef7972f 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java @@ -1,8 +1,9 @@ package xiaozhi.common.utils; +import org.apache.commons.lang3.StringUtils; + import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; /** * IP地址 diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java index 4a908245..288dae9a 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java @@ -1,13 +1,14 @@ package xiaozhi.common.utils; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.StrUtil; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; + /** * JSON 工具类 * Copyright (c) 人人开源 All rights reserved. @@ -59,7 +60,8 @@ public class JsonUtils { return new ArrayList<>(); } try { - return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + return objectMapper.readValue(text, + objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java b/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java index 65841b7d..9c326af7 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java @@ -1,11 +1,11 @@ package xiaozhi.common.utils; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import xiaozhi.common.exception.ErrorCode; -import java.io.Serializable; - /** * 响应数据 * Copyright (c) 人人开源 All rights reserved. @@ -36,7 +36,6 @@ public class Result implements Serializable { return this; } - public Result error() { this.code = ErrorCode.INTERNAL_SERVER_ERROR; this.msg = MessageUtils.getMessage(this.code); diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java index b60bc9cf..5fdb5985 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java @@ -1,11 +1,11 @@ package xiaozhi.common.utils; -import lombok.Data; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import lombok.Data; + /** * 树节点,所有需要实现树节点的,都需要继承该类 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java index 766cb029..e76190eb 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java @@ -1,12 +1,12 @@ package xiaozhi.common.utils; -import xiaozhi.common.validator.AssertUtils; - import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import xiaozhi.common.validator.AssertUtils; + /** * 树形结构工具类,如:菜单、部门等 * Copyright (c) 人人开源 All rights reserved. @@ -17,8 +17,8 @@ public class TreeUtils { /** * 根据pid,构建树节点 */ - public static List build(List treeNodes, Long pid) { - //pid不能为空 + public static > List build(List treeNodes, Long pid) { + // pid不能为空 AssertUtils.isNull(pid, "pid"); List treeList = new ArrayList<>(); @@ -34,7 +34,7 @@ public class TreeUtils { /** * 查找子节点 */ - private static T findChildren(List treeNodes, T rootNode) { + private static > T findChildren(List treeNodes, T rootNode) { for (T treeNode : treeNodes) { if (rootNode.getId().equals(treeNode.getPid())) { rootNode.getChildren().add(findChildren(treeNodes, treeNode)); @@ -46,10 +46,10 @@ public class TreeUtils { /** * 构建树节点 */ - public static List build(List treeNodes) { + public static > List build(List treeNodes) { List result = new ArrayList<>(); - //list转map + // list转map Map nodeMap = new LinkedHashMap<>(treeNodes.size()); for (T treeNode : treeNodes) { nodeMap.put(treeNode.getId(), treeNode); diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java b/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java index 6a6b43e1..c86aa517 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java @@ -1,14 +1,15 @@ package xiaozhi.common.validator; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; + import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ArrayUtil; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; -import org.apache.commons.lang3.StringUtils; - -import java.util.List; -import java.util.Map; /** * 校验工具类 @@ -73,11 +74,11 @@ public class AssertUtils { } } - public static void isMapEmpty(Map map, String... params) { + public static void isMapEmpty(Map map, String... params) { isMapEmpty(map, ErrorCode.NOT_NULL, params); } - public static void isMapEmpty(Map map, Integer code, String... params) { + public static void isMapEmpty(Map map, Integer code, String... params) { if (code == null) { throw new RenException(ErrorCode.NOT_NULL, "code"); } diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java b/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java index 80acb097..9e31c964 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java @@ -1,16 +1,17 @@ package xiaozhi.common.validator; -import xiaozhi.common.exception.RenException; -import jakarta.validation.ConstraintViolation; -import jakarta.validation.Validation; -import jakarta.validation.Validator; +import java.util.Locale; +import java.util.Set; + import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator; -import java.util.Locale; -import java.util.Set; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import xiaozhi.common.exception.RenException; /** * hibernate-validator校验工具类 @@ -35,7 +36,7 @@ public class ValidatorUtils { throws RenException { Locale.setDefault(LocaleContextHolder.getLocale()); Validator validator = Validation.byDefaultProvider().configure().messageInterpolator( - new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))) + new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))) .buildValidatorFactory().getValidator(); Set> constraintViolations = validator.validate(object, groups); diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java b/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java index 20291da1..2bf4ab92 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java @@ -1,8 +1,9 @@ package xiaozhi.common.xss; +import org.apache.commons.lang3.StringUtils; + import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; -import org.apache.commons.lang3.StringUtils; /** * SQL过滤 @@ -20,19 +21,20 @@ public class SqlFilter { if (StringUtils.isBlank(str)) { return null; } - //去掉'|"|;|\字符 + // 去掉'|"|;|\字符 str = StringUtils.replace(str, "'", ""); str = StringUtils.replace(str, "\"", ""); str = StringUtils.replace(str, ";", ""); str = StringUtils.replace(str, "\\", ""); - //转换成小写 + // 转换成小写 str = str.toLowerCase(); - //非法字符 - String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"}; + // 非法字符 + String[] keywords = { "master", "truncate", "insert", "select", "delete", "update", "declare", "alter", + "drop" }; - //判断是否包含非法字符 + // 判断是否包含非法字符 for (String keyword : keywords) { if (str.contains(keyword)) { throw new RenException(ErrorCode.INVALID_SYMBOL); diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java index f62786fd..e4b65465 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java @@ -1,6 +1,5 @@ package xiaozhi.common.xss; -import jakarta.servlet.DispatcherType; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; @@ -8,6 +7,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.PathMatcher; +import jakarta.servlet.DispatcherType; + /** * XSS 配置文件 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java index 9a24d7eb..db769989 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java @@ -1,11 +1,17 @@ package xiaozhi.common.xss; -import jakarta.servlet.*; -import jakarta.servlet.http.HttpServletRequest; -import lombok.AllArgsConstructor; +import java.io.IOException; + import org.springframework.util.PathMatcher; -import java.io.IOException; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; /** * XSS过滤 @@ -38,7 +44,8 @@ public class XssFilter implements Filter { private boolean shouldNotFilter(HttpServletRequest request) { // 放行不过滤的URL - return properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, request.getServletPath())); + return properties.getExcludeUrls().stream() + .anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, request.getServletPath())); } @Override diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java index 1306c2dd..ecb36406 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java @@ -1,20 +1,20 @@ package xiaozhi.common.xss; -import cn.hutool.core.io.IoUtil; -import jakarta.servlet.ReadListener; -import jakarta.servlet.ServletInputStream; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletRequestWrapper; -import org.apache.commons.lang3.StringUtils; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import cn.hutool.core.io.IoUtil; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; /** * XSS过滤处理 @@ -29,18 +29,18 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { @Override public ServletInputStream getInputStream() throws IOException { - //非json类型,直接返回 + // 非json类型,直接返回 if (!MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(super.getHeader(HttpHeaders.CONTENT_TYPE))) { return super.getInputStream(); } - //为空,直接返回 + // 为空,直接返回 String json = IoUtil.readUtf8(super.getInputStream()); if (StringUtils.isBlank(json)) { return super.getInputStream(); } - //xss过滤 + // xss过滤 json = xssEncode(json); final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); return new ServletInputStream() { diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java index bf36ddbe..5d9b8b01 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java @@ -1,11 +1,12 @@ package xiaozhi.common.xss; -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - import java.util.Collections; import java.util.List; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import lombok.Data; + /** * XSS 配置项 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java index 5d4ac6b3..16588392 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java @@ -22,13 +22,15 @@ public class XssUtils extends Safelist { */ private static Safelist xssWhitelist() { return new Safelist() - //支持的标签 + // 支持的标签 .addTags("a", "b", "blockquote", "br", "caption", "cite", "code", "col", "colgroup", "dd", "div", "dl", - "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "q", "small", - "strike", "strong", "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", "ul", + "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "q", + "small", + "strike", "strong", "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", + "ul", "embed", "object", "param", "span") - //支持的标签属性 + // 支持的标签属性 .addAttributes("a", "href", "class", "style", "target", "rel", "nofollow") .addAttributes("blockquote", "cite") .addAttributes("code", "class", "style") @@ -44,13 +46,16 @@ public class XssUtils extends Safelist { .addAttributes("ul", "type", "style") .addAttributes("pre", "class", "style") .addAttributes("div", "class", "id", "style") - .addAttributes("embed", "src", "wmode", "flashvars", "pluginspage", "allowFullScreen", "allowfullscreen", - "quality", "width", "height", "align", "allowScriptAccess", "allowscriptaccess", "allownetworking", "type") - .addAttributes("object", "type", "id", "name", "data", "width", "height", "style", "classid", "codebase") + .addAttributes("embed", "src", "wmode", "flashvars", "pluginspage", "allowFullScreen", + "allowfullscreen", + "quality", "width", "height", "align", "allowScriptAccess", "allowscriptaccess", + "allownetworking", "type") + .addAttributes("object", "type", "id", "name", "data", "width", "height", "style", "classid", + "codebase") .addAttributes("param", "name", "value") .addAttributes("span", "class", "style") - //标签属性对应的协议 + // 标签属性对应的协议 .addProtocols("a", "href", "ftp", "http", "https", "mailto") .addProtocols("img", "src", "http", "https") .addProtocols("blockquote", "cite", "http", "https") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java index 9f2cb10d..93a741df 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentController.java @@ -1,13 +1,28 @@ package xiaozhi.modules.agent.controller; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +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; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.AllArgsConstructor; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.web.bind.annotation.*; import xiaozhi.common.constant.Constant; import xiaozhi.common.page.PageData; import xiaozhi.common.user.UserDetail; @@ -16,20 +31,19 @@ import xiaozhi.common.utils.Result; import xiaozhi.modules.agent.dto.AgentCreateDTO; import xiaozhi.modules.agent.dto.AgentUpdateDTO; import xiaozhi.modules.agent.entity.AgentEntity; +import xiaozhi.modules.agent.entity.AgentTemplateEntity; import xiaozhi.modules.agent.service.AgentService; +import xiaozhi.modules.agent.service.AgentTemplateService; import xiaozhi.modules.security.user.SecurityUser; -import java.util.Date; -import java.util.List; -import java.util.Map; - @Tag(name = "智能体管理") @AllArgsConstructor @RestController @RequestMapping("/agent") public class AgentController { private final AgentService agentService; - + private final AgentTemplateService agentTemplateService; + @GetMapping("/list") @Operation(summary = "获取用户智能体列表") @RequiresPermissions("sys:role:normal") @@ -38,7 +52,7 @@ public class AgentController { List agents = agentService.getUserAgents(user.getId()); return new Result>().ok(agents); } - + @GetMapping("/all") @Operation(summary = "智能体列表(管理员)") @RequiresPermissions("sys:role:superAdmin") @@ -51,7 +65,7 @@ public class AgentController { PageData page = agentService.adminAgentList(params); return new Result>().ok(page); } - + @GetMapping("/{id}") @Operation(summary = "获取智能体详情") @RequiresPermissions("sys:role:normal") @@ -59,35 +73,35 @@ public class AgentController { AgentEntity agent = agentService.getAgentById(id); return new Result().ok(agent); } - + @PostMapping @Operation(summary = "创建智能体") @RequiresPermissions("sys:role:normal") public Result save(@RequestBody @Valid AgentCreateDTO dto) { AgentEntity entity = ConvertUtils.sourceToTarget(dto, AgentEntity.class); - + // 设置用户ID和创建者信息 UserDetail user = SecurityUser.getUser(); entity.setUserId(user.getId()); entity.setCreator(user.getId()); entity.setCreatedAt(new Date()); - + // ID、智能体编码和排序会在Service层自动生成 agentService.insert(entity); - + return new Result<>(); } - - @PutMapping + + @PutMapping("/{id}") @Operation(summary = "更新智能体") @RequiresPermissions("sys:role:normal") - public Result update(@RequestBody @Valid AgentUpdateDTO dto) { + public Result update(@PathVariable String id, @RequestBody @Valid AgentUpdateDTO dto) { // 先查询现有实体 - AgentEntity existingEntity = agentService.getAgentById(dto.getId()); + AgentEntity existingEntity = agentService.getAgentById(id); if (existingEntity == null) { return new Result().error("智能体不存在"); } - + // 只更新提供的非空字段 if (dto.getAgentName() != null) { existingEntity.setAgentName(dto.getAgentName()); @@ -128,17 +142,17 @@ public class AgentController { if (dto.getSort() != null) { existingEntity.setSort(dto.getSort()); } - + // 设置更新者信息 UserDetail user = SecurityUser.getUser(); existingEntity.setUpdater(user.getId()); existingEntity.setUpdatedAt(new Date()); - + agentService.updateById(existingEntity); - + return new Result<>(); } - + @DeleteMapping("/{id}") @Operation(summary = "删除智能体") @RequiresPermissions("sys:role:normal") @@ -146,4 +160,13 @@ public class AgentController { agentService.deleteById(id); return new Result<>(); } -} \ No newline at end of file + + @GetMapping("/template") + @Operation(summary = "智能体模板模板列表") + @RequiresPermissions("sys:role:normal") + public Result> templateList() { + List list = agentTemplateService + .list(new QueryWrapper().orderByAsc("sort")); + return new Result>().ok(list); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java index 169346bf..d9aec7d7 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentDao.java @@ -1,10 +1,11 @@ package xiaozhi.modules.agent.dao; import org.apache.ibatis.annotations.Mapper; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.agent.entity.AgentEntity; @Mapper public interface AgentDao extends BaseDao { - -} \ No newline at end of file + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java new file mode 100644 index 00000000..48d95bef --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dao/AgentTemplateDao.java @@ -0,0 +1,17 @@ +package xiaozhi.modules.agent.dao; + +import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import xiaozhi.modules.agent.entity.AgentTemplateEntity; + +/** + * @author chenerlei + * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Mapper + * @createDate 2025-03-22 11:48:18 + */ +@Mapper +public interface AgentTemplateDao extends BaseMapper { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java index 302a55fb..59e77007 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentCreateDTO.java @@ -1,11 +1,11 @@ package xiaozhi.modules.agent.dto; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.io.Serializable; - /** * 智能体创建DTO * 专用于新增智能体,不包含id、agentCode和sort字段,这些字段由系统自动生成/设置默认值 @@ -14,38 +14,8 @@ import java.io.Serializable; @Schema(description = "智能体创建对象") public class AgentCreateDTO implements Serializable { private static final long serialVersionUID = 1L; - + @Schema(description = "智能体名称", example = "客服助手") @NotBlank(message = "智能体名称不能为空") private String agentName; - - @Schema(description = "语音识别模型标识", example = "asr_model_01") - private String asrModelId; - - @Schema(description = "语音活动检测标识", example = "vad_model_01") - private String vadModelId; - - @Schema(description = "大语言模型标识", example = "llm_model_01") - private String llmModelId; - - @Schema(description = "语音合成模型标识", example = "tts_model_01") - private String ttsModelId; - - @Schema(description = "音色标识", example = "voice_01") - private String ttsVoiceId; - - @Schema(description = "记忆模型标识", example = "mem_model_01") - private String memModelId; - - @Schema(description = "意图模型标识", example = "intent_model_01") - private String intentModelId; - - @Schema(description = "角色设定参数", example = "你是一个专业的客服助手,负责回答用户问题") - private String systemPrompt; - - @Schema(description = "语言编码", example = "zh_CN") - private String langCode; - - @Schema(description = "交互语种", example = "中文") - private String language; -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java index 6445bdda..d54685d8 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/dto/AgentUpdateDTO.java @@ -1,11 +1,10 @@ package xiaozhi.modules.agent.dto; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -import lombok.Data; - import java.io.Serializable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + /** * 智能体更新DTO * 专用于更新智能体,id字段是必需的,用于标识要更新的智能体 @@ -16,46 +15,42 @@ import java.io.Serializable; public class AgentUpdateDTO implements Serializable { private static final long serialVersionUID = 1L; - @Schema(description = "智能体唯一标识", example = "a1b2c3d4e5f6", required = true) - @NotBlank(message = "智能体ID不能为空") - private String id; - @Schema(description = "智能体编码", example = "AGT_1234567890", required = false) private String agentCode; - + @Schema(description = "智能体名称", example = "客服助手", required = false) private String agentName; - + @Schema(description = "语音识别模型标识", example = "asr_model_02", required = false) private String asrModelId; - + @Schema(description = "语音活动检测标识", example = "vad_model_02", required = false) private String vadModelId; - + @Schema(description = "大语言模型标识", example = "llm_model_02", required = false) private String llmModelId; - + @Schema(description = "语音合成模型标识", example = "tts_model_02", required = false) private String ttsModelId; - + @Schema(description = "音色标识", example = "voice_02", required = false) private String ttsVoiceId; - + @Schema(description = "记忆模型标识", example = "mem_model_02", required = false) private String memModelId; - + @Schema(description = "意图模型标识", example = "intent_model_02", required = false) private String intentModelId; - + @Schema(description = "角色设定参数", example = "你是一个专业的客服助手,负责回答用户问题并提供帮助", required = false) private String systemPrompt; - + @Schema(description = "语言编码", example = "zh_CN", required = false) private String langCode; - + @Schema(description = "交互语种", example = "中文", required = false) private String language; - + @Schema(description = "排序", example = "1", required = false) private Integer sort; -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java index 6800aefb..917fe6d2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentEntity.java @@ -1,69 +1,74 @@ package xiaozhi.modules.agent.entity; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.util.Date; - @Data @TableName("ai_agent") @Schema(description = "智能体信息") public class AgentEntity { + + @TableId(type = IdType.ASSIGN_UUID) @Schema(description = "智能体唯一标识") private String id; - + @Schema(description = "所属用户ID") private Long userId; - + @Schema(description = "智能体编码") private String agentCode; - + @Schema(description = "智能体名称") private String agentName; - + @Schema(description = "语音识别模型标识") private String asrModelId; - + @Schema(description = "语音活动检测标识") private String vadModelId; - + @Schema(description = "大语言模型标识") private String llmModelId; - + @Schema(description = "语音合成模型标识") private String ttsModelId; - + @Schema(description = "音色标识") private String ttsVoiceId; - + @Schema(description = "记忆模型标识") private String memModelId; - + @Schema(description = "意图模型标识") private String intentModelId; - + @Schema(description = "角色设定参数") private String systemPrompt; - + @Schema(description = "语言编码") private String langCode; - + @Schema(description = "交互语种") private String language; - + @Schema(description = "排序") private Integer sort; - + @Schema(description = "创建者") private Long creator; - + @Schema(description = "创建时间") private Date createdAt; - + @Schema(description = "更新者") private Long updater; - + @Schema(description = "更新时间") private Date updatedAt; -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java new file mode 100644 index 00000000..6d83e4fe --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/entity/AgentTemplateEntity.java @@ -0,0 +1,114 @@ +package xiaozhi.modules.agent.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; + +/** + * 智能体配置模板表 + * + * @TableName ai_agent_template + */ +@TableName(value = "ai_agent_template") +@Data +public class AgentTemplateEntity implements Serializable { + /** + * 智能体唯一标识 + */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + + /** + * 智能体编码 + */ + private String agentCode; + + /** + * 智能体名称 + */ + private String agentName; + + /** + * 语音识别模型标识 + */ + private String asrModelId; + + /** + * 语音活动检测标识 + */ + private String vadModelId; + + /** + * 大语言模型标识 + */ + private String llmModelId; + + /** + * 语音合成模型标识 + */ + private String ttsModelId; + + /** + * 音色标识 + */ + private String ttsVoiceId; + + /** + * 记忆模型标识 + */ + private String memModelId; + + /** + * 意图模型标识 + */ + private String intentModelId; + + /** + * 角色设定参数 + */ + private String systemPrompt; + + /** + * 语言编码 + */ + private String langCode; + + /** + * 交互语种 + */ + private String language; + + /** + * 排序权重 + */ + private Integer sort; + + /** + * 创建者 ID + */ + private Long creator; + + /** + * 创建时间 + */ + private Date createdAt; + + /** + * 更新者 ID + */ + private Long updater; + + /** + * 更新时间 + */ + private Date updatedAt; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java index 76439ede..da958e4c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentService.java @@ -1,25 +1,25 @@ package xiaozhi.modules.agent.service; +import java.util.List; +import java.util.Map; + import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.agent.entity.AgentEntity; -import java.util.List; -import java.util.Map; - public interface AgentService extends BaseService { /** * 根据用户ID获取智能体列表 */ List getUserAgents(Long userId); - + /** * 管理员获取所有智能体列表(分页) */ PageData adminAgentList(Map params); - + /** * 获取智能体详情 */ AgentEntity getAgentById(String id); -} \ No newline at end of file +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java new file mode 100644 index 00000000..9c27bdb5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/AgentTemplateService.java @@ -0,0 +1,14 @@ +package xiaozhi.modules.agent.service; + +import com.baomidou.mybatisplus.extension.service.IService; + +import xiaozhi.modules.agent.entity.AgentTemplateEntity; + +/** + * @author chenerlei + * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service + * @createDate 2025-03-22 11:48:18 + */ +public interface AgentTemplateService extends IService { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java index b41310ab..8e73c003 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentServiceImpl.java @@ -1,64 +1,65 @@ -package xiaozhi.modules.agent.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springframework.stereotype.Service; -import xiaozhi.common.page.PageData; -import xiaozhi.common.service.impl.BaseServiceImpl; -import xiaozhi.modules.agent.dao.AgentDao; -import xiaozhi.modules.agent.entity.AgentEntity; -import xiaozhi.modules.agent.service.AgentService; - -import java.util.List; -import java.util.Map; -import java.util.UUID; - -@Service -public class AgentServiceImpl extends BaseServiceImpl implements AgentService { - private final AgentDao agentDao; - - public AgentServiceImpl(AgentDao agentDao) { - this.agentDao = agentDao; - } - - @Override - public List getUserAgents(Long userId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("user_id", userId); - return agentDao.selectList(wrapper); - } - - @Override - public PageData adminAgentList(Map params) { - IPage page = agentDao.selectPage( - getPage(params, "sort", true), - new QueryWrapper<>() - ); - return new PageData<>(page.getRecords(), page.getTotal()); - } - - @Override - public AgentEntity getAgentById(String id) { - return agentDao.selectById(id); - } - - @Override - public boolean insert(AgentEntity entity) { - // 如果ID为空,自动生成一个UUID作为ID - if (entity.getId() == null || entity.getId().trim().isEmpty()) { - entity.setId(UUID.randomUUID().toString().replace("-", "")); - } - - // 如果智能体编码为空,自动生成一个带前缀的编码 - if (entity.getAgentCode() == null || entity.getAgentCode().trim().isEmpty()) { - entity.setAgentCode("AGT_" + System.currentTimeMillis()); - } - - // 如果排序字段为空,设置默认值0 - if (entity.getSort() == null) { - entity.setSort(0); - } - - return super.insert(entity); - } -} \ No newline at end of file +package xiaozhi.modules.agent.service.impl; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.modules.agent.dao.AgentDao; +import xiaozhi.modules.agent.entity.AgentEntity; +import xiaozhi.modules.agent.service.AgentService; + +@Service +public class AgentServiceImpl extends BaseServiceImpl implements AgentService { + private final AgentDao agentDao; + + public AgentServiceImpl(AgentDao agentDao) { + this.agentDao = agentDao; + } + + @Override + public List getUserAgents(Long userId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("user_id", userId); + return agentDao.selectList(wrapper); + } + + @Override + public PageData adminAgentList(Map params) { + IPage page = agentDao.selectPage( + getPage(params, "sort", true), + new QueryWrapper<>()); + return new PageData<>(page.getRecords(), page.getTotal()); + } + + @Override + public AgentEntity getAgentById(String id) { + return agentDao.selectById(id); + } + + @Override + public boolean insert(AgentEntity entity) { + // 如果ID为空,自动生成一个UUID作为ID + if (entity.getId() == null || entity.getId().trim().isEmpty()) { + entity.setId(UUID.randomUUID().toString().replace("-", "")); + } + + // 如果智能体编码为空,自动生成一个带前缀的编码 + if (entity.getAgentCode() == null || entity.getAgentCode().trim().isEmpty()) { + entity.setAgentCode("AGT_" + System.currentTimeMillis()); + } + + // 如果排序字段为空,设置默认值0 + if (entity.getSort() == null) { + entity.setSort(0); + } + + return super.insert(entity); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java new file mode 100644 index 00000000..62338fad --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/service/impl/AgentTemplateServiceImpl.java @@ -0,0 +1,20 @@ +package xiaozhi.modules.agent.service.impl; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import xiaozhi.modules.agent.dao.AgentTemplateDao; +import xiaozhi.modules.agent.entity.AgentTemplateEntity; +import xiaozhi.modules.agent.service.AgentTemplateService; + +/** + * @author chenerlei + * @description 针对表【ai_agent_template(智能体配置模板表)】的数据库操作Service实现 + * @createDate 2025-03-22 11:48:18 + */ +@Service +public class AgentTemplateServiceImpl extends ServiceImpl + implements AgentTemplateService { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java new file mode 100644 index 00000000..a5302e5b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/vo/AgentTemplateVO.java @@ -0,0 +1,15 @@ +package xiaozhi.modules.agent.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import xiaozhi.modules.agent.entity.AgentTemplateEntity; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AgentTemplateVO extends AgentTemplateEntity { + // 角色音色 + private String ttsModelName; + + // 角色模型 + private String llmModelName; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java index d458e9f9..2ae9e023 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/DeviceController.java @@ -1,82 +1,69 @@ package xiaozhi.modules.device.controller; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Parameters; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; +import java.util.List; + import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.web.bind.annotation.*; -import xiaozhi.common.constant.Constant; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; import xiaozhi.common.exception.ErrorCode; -import xiaozhi.common.page.PageData; import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; import xiaozhi.common.user.UserDetail; -import xiaozhi.common.utils.JsonUtils; import xiaozhi.common.utils.Result; -import xiaozhi.modules.device.dto.DeviceHeaderDTO; +import xiaozhi.modules.device.dto.DeviceBindDTO; import xiaozhi.modules.device.dto.DeviceUnBindDTO; import xiaozhi.modules.device.entity.DeviceEntity; import xiaozhi.modules.device.service.DeviceService; import xiaozhi.modules.security.user.SecurityUser; -import java.util.List; -import java.util.Map; - @Tag(name = "设备管理") @AllArgsConstructor @RestController @RequestMapping("/device") public class DeviceController { private final DeviceService deviceService; + private final RedisUtils redisUtils; - - @PostMapping("/bind/{deviceCode}") + @PostMapping("/bind/{agentId}/{deviceCode}") @Operation(summary = "绑定设备") @RequiresPermissions("sys:role:normal") - public Result bindDevice(@PathVariable String deviceCode) { - UserDetail user = SecurityUser.getUser(); - - String deviceHeaders = (String) redisUtils.get(RedisKeys.getDeviceCaptchaKey(deviceCode)); - if (StringUtils.isBlank(deviceHeaders)) { - return new Result().error(ErrorCode.DEVICE_CAPTCHA_ERROR); + public Result bindDevice(@PathVariable String agentId, @PathVariable String deviceCode) { + String macAddress = (String) redisUtils.get(RedisKeys.getDeviceCaptchaKey(deviceCode)); + if (StringUtils.isBlank(macAddress)) { + return new Result().error(ErrorCode.DEVICE_CAPTCHA_ERROR); } - DeviceHeaderDTO deviceHeader = JsonUtils.parseObject(deviceHeaders.getBytes(), DeviceHeaderDTO.class); - DeviceEntity device = deviceService.bindDevice(user.getId(), deviceHeader); - return new Result().ok(device); + Long user = SecurityUser.getUser().getId(); + DeviceBindDTO deviceBindDTO = new DeviceBindDTO(macAddress, user, agentId); + deviceService.bindDevice(deviceBindDTO); + return new Result<>(); } - @GetMapping("/bind") + @GetMapping("/bind/{agentId}") @Operation(summary = "获取已绑定设备") @RequiresPermissions("sys:role:normal") - public Result> getUserDevices() { + public Result> getUserDevices(@PathVariable String agentId) { UserDetail user = SecurityUser.getUser(); - List devices = deviceService.getUserDevices(user.getId()); + List devices = deviceService.getUserDevices(user.getId(), agentId); return new Result>().ok(devices); } @PostMapping("/unbind") @Operation(summary = "解绑设备") @RequiresPermissions("sys:role:normal") - public Result unbindDevice(@RequestBody DeviceUnBindDTO unDeviveBind) { + public Result unbindDevice(@RequestBody DeviceUnBindDTO unDeviveBind) { UserDetail user = SecurityUser.getUser(); deviceService.unbindDevice(user.getId(), unDeviveBind.getDeviceId()); - return new Result(); + return new Result(); } - @GetMapping("/all") - @Operation(summary = "设备列表(管理员)") - @RequiresPermissions("sys:role:superAdmin") - @Parameters({ - @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), - @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), - }) - public Result> adminDeviceList( - @Parameter(hidden = true) @RequestParam Map params) { - PageData page = deviceService.adminDeviceList(params); - return new Result>().ok(page); - } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/controller/OTAController.java b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/OTAController.java new file mode 100644 index 00000000..16f53256 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/controller/OTAController.java @@ -0,0 +1,76 @@ +package xiaozhi.modules.device.controller; + +import java.nio.charset.StandardCharsets; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import xiaozhi.common.utils.Result; +import xiaozhi.modules.device.dto.DeviceReportReqDTO; +import xiaozhi.modules.device.dto.DeviceReportRespDTO; +import xiaozhi.modules.device.service.DeviceService; +import xiaozhi.modules.device.utils.NetworkUtil; + +@Tag(name = "设备管理", description = "OTA 相关接口") +@RestController +@RequiredArgsConstructor +@RequestMapping("/ota") +public class OTAController { + private final DeviceService deviceService; + + @Operation(summary = "检查 OTA 版本和设备激活状态") + @PostMapping + public ResponseEntity checkOTAVersion( + @RequestBody DeviceReportReqDTO deviceReportReqDTO, + + @Parameter(name = "Device-Id", description = "设备唯一标识", required = true, in = ParameterIn.HEADER) @RequestHeader("Device-Id") String deviceId, + + @Parameter(name = "Client-Id", description = "客户端标识", required = true, in = ParameterIn.HEADER) @RequestHeader("Client-Id") String clientId) { + if (StringUtils.isAnyBlank(deviceId, clientId)) { + return createResponse(DeviceReportRespDTO.createError("Device ID is required")); + } + String macAddress = deviceReportReqDTO.getMacAddress(); + boolean macAddressValid = NetworkUtil.isMacAddressValid(macAddress); + // 设备Id和Mac地址应是一致的, 并且必须需要application字段 + if (!deviceId.equals(macAddress) || !macAddressValid || deviceReportReqDTO.getApplication() == null) { + return createResponse(DeviceReportRespDTO.createError("Invalid OTA request")); + } + return createResponse(deviceService.checkDeviceActive(macAddress, deviceId, clientId, deviceReportReqDTO)); + } + + @Operation(summary = "设备激活") + @GetMapping("/activation") + public Result deviceActivation(@RequestParam String code) { + return new Result().ok(deviceService.deviceActivation(code)); + } + + @SneakyThrows + private ResponseEntity createResponse(DeviceReportRespDTO deviceReportRespDTO) { + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + String json = objectMapper.writeValueAsString(deviceReportRespDTO); + byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8); + return ResponseEntity + .ok() + .contentType(MediaType.APPLICATION_JSON) + .contentLength(jsonBytes.length) + .body(json); + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java index 9e4a8cd4..5ede3d6e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dao/DeviceDao.java @@ -1,7 +1,9 @@ package xiaozhi.modules.device.dao; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + import xiaozhi.modules.device.entity.DeviceEntity; @Mapper diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceBindDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceBindDTO.java new file mode 100644 index 00000000..3413c31b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceBindDTO.java @@ -0,0 +1,27 @@ +package xiaozhi.modules.device.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; + +/** + * 设备绑定的DTO + * + * @author zjy + * @since 2025-3-28 + */ +@Data +@AllArgsConstructor +@Schema(description = "设备连接头信息") +public class DeviceBindDTO { + + @Schema(description = "mac地址") + private String macAddress; + + @Schema(description = "所属用户id") + private Long userId; + + @Schema(description = "智能体id") + private String agentId; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java deleted file mode 100644 index 83327fef..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceHeaderDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package xiaozhi.modules.device.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -@Data -@Schema(description = "设备连接头信息") -public class DeviceHeaderDTO { - - @Schema(description = "设备ID") - private String deviceId; - - @Schema(description = "协议版本号") - private Long protocolVersion; - - @Schema(description = "认证信息") - private String authorization; - -} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportReqDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportReqDTO.java new file mode 100644 index 00000000..fec5a297 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportReqDTO.java @@ -0,0 +1,148 @@ +package xiaozhi.modules.device.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +@Setter +@Getter +@Schema(description = "设备固件信息上报求请求体") +public class DeviceReportReqDTO implements Serializable { + private static final long serialVersionUID = 1L; + // region 实体属性 + @Schema(description = "板子固件版本号") + private Integer version; + + @Schema(description = "闪存大小(单位:字节)") + @JsonProperty("flash_size") + private Integer flashSize; + + @Schema(description = "最小空闲堆内存(字节)") + @JsonProperty("minimum_free_heap_size") + private Integer minimumFreeHeapSize; + + @Schema(description = "设备 MAC 地址") + @JsonProperty("mac_address") + private String macAddress; + + @Schema(description = "设备唯一标识 UUID") + private String uuid; + + @Schema(description = "芯片型号名称") + @JsonProperty("chip_model_name") + private String chipModelName; + + @Schema(description = "芯片详细信息") + @JsonProperty("chip_info") + private ChipInfo chipInfo; + + @Schema(description = "应用程序信息") + private Application application; + + @Schema(description = "分区表列表") + @JsonProperty("partition_table") + private List partitionTable; + + @Schema(description = "当前运行的 OTA 分区信息") + private OtaInfo ota; + + @Schema(description = "板子配置信息") + private BoardInfo board; + + // endregion + + @Getter + @Setter + @Schema(description = "芯片信息") + public static class ChipInfo { + @Schema(description = "芯片模型代码") + private Integer model; + + @Schema(description = "核心数") + private Integer cores; + + @Schema(description = "硬件修订版本") + private Integer revision; + + @Schema(description = "芯片功能标志位") + private Integer features; + } + + @Getter + @Setter + @Schema(description = "板子编译信息") + public static class Application { + @Schema(description = "名称") + private String name; + + @Schema(description = "应用版本号") + private String version; + + @Schema(description = "编译时间(UTC ISO格式)") + @JsonProperty("compile_time") + private String compileTime; + + @Schema(description = "ESP-IDF 版本号") + @JsonProperty("idf_version") + private String idfVersion; + + @Schema(description = "ELF 文件 SHA256 校验") + @JsonProperty("elf_sha256") + private String elfSha256; + } + + @Getter + @Setter + @Schema(description = "分区信息") + public static class Partition { + @Schema(description = "分区标签名") + private String label; + + @Schema(description = "分区类型") + private Integer type; + + @Schema(description = "子类型") + private Integer subtype; + + @Schema(description = "起始地址") + private Integer address; + + @Schema(description = "分区大小") + private Integer size; + } + + @Getter + @Setter + @Schema(description = "OTA信息") + public static class OtaInfo { + @Schema(description = "当前OTA标签") + private String label; + } + + @Getter + @Setter + @Schema(description = "板子连接和网络信息") + public static class BoardInfo { + @Schema(description = "板子类型") + private String type; + + @Schema(description = "连接的 Wi-Fi SSID") + private String ssid; + + @Schema(description = "Wi-Fi 信号强度(RSSI)") + private Integer rssi; + + @Schema(description = "Wi-Fi 信道") + private Integer channel; + + @Schema(description = "IP 地址") + private String ip; + + @Schema(description = "MAC 地址") + private String mac; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportRespDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportRespDTO.java new file mode 100644 index 00000000..6226378d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceReportRespDTO.java @@ -0,0 +1,61 @@ +package xiaozhi.modules.device.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +@Data +@Schema(description = "设备OTA检测版本返回体,包含激活码要求") +public class DeviceReportRespDTO { + @Schema(description = "服务器时间") + private ServerTime serverTime; + + @Schema(description = "激活码") + private Activation activation; + + @Schema(description = "错误信息") + private String error; + + @Schema(description = "固件版本信息") + private Firmware firmware; + + @Getter + @Setter + public static class Firmware { + @Schema(description = "版本号") + private String version; + @Schema(description = "下载地址") + private String url; + } + + public static DeviceReportRespDTO createError(String message) { + DeviceReportRespDTO resp = new DeviceReportRespDTO(); + resp.setError(message); + return resp; + } + + @Setter + @Getter + public static class Activation { + @Schema(description = "激活码") + private String code; + + @Schema(description = "激活码信息: 激活地址") + private String message; + + } + + @Getter + @Setter + public static class ServerTime { + @Schema(description = "时间戳") + private Long timestamp; + + @Schema(description = "时区") + private String timeZone; + + @Schema(description = "时区偏移量,单位为分钟") + private Integer timezoneOffset; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java index 830a51ae..f18df5d4 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/dto/DeviceUnBindDTO.java @@ -1,10 +1,11 @@ package xiaozhi.modules.device.dto; + +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.io.Serializable; - /** * 设备解绑表单 */ @@ -14,6 +15,6 @@ public class DeviceUnBindDTO implements Serializable { @Schema(description = "设备ID") @NotBlank(message = "设备ID不能为空") - private Long deviceId; + private String deviceId; } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java index ccbe4683..8ebdf934 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/entity/DeviceEntity.java @@ -1,17 +1,26 @@ package xiaozhi.modules.device.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import java.util.Date; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + @Data +@EqualsAndHashCode(callSuper = false) @TableName("ai_device") @Schema(description = "设备信息") public class DeviceEntity { - @Schema(description = "设备ID") - private Long id; + + @TableId(type = IdType.ASSIGN_UUID) + @Schema(description = "ID") + private String id; @Schema(description = "关联用户ID") private Long userId; @@ -40,15 +49,19 @@ public class DeviceEntity { @Schema(description = "排序") private Integer sort; - @Schema(description = "创建者") - private Long creator; - - @Schema(description = "创建时间") - private Date createDate; - @Schema(description = "更新者") + @TableField(fill = FieldFill.UPDATE) private Long updater; @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) private Date updateDate; + + @Schema(description = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long creator; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private Date createDate; } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java index 16ad44fe..bc26f649 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/DeviceService.java @@ -1,18 +1,42 @@ package xiaozhi.modules.device.service; -import xiaozhi.common.page.PageData; -import xiaozhi.modules.device.dto.DeviceHeaderDTO; +import java.util.List; + +import xiaozhi.modules.device.dto.DeviceBindDTO; +import xiaozhi.modules.device.dto.DeviceReportReqDTO; +import xiaozhi.modules.device.dto.DeviceReportRespDTO; import xiaozhi.modules.device.entity.DeviceEntity; -import java.util.List; -import java.util.Map; - public interface DeviceService { - DeviceEntity bindDevice(Long userId, DeviceHeaderDTO deviceHeader); - - List getUserDevices(Long userId); - - void unbindDevice(Long userId, Long deviceId); - - PageData adminDeviceList(Map params); + + /** + * 根据Mac地址获取设备信息 + */ + DeviceEntity getDeviceById(String macAddress); + + /** + * 检查设备是否激活 + */ + DeviceReportRespDTO checkDeviceActive(String macAddress, String deviceId, String clientId, + DeviceReportReqDTO deviceReport); + + /** + * 绑定设备 + */ + DeviceEntity bindDevice(DeviceBindDTO deviceHeader); + + /** + * 获取用户设备列表 + */ + List getUserDevices(Long userId, String agentId); + + /** + * 解绑设备 + */ + void unbindDevice(Long userId, String deviceId); + + /** + * 设备激活 + */ + Boolean deviceActivation(String activationCode); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java index 279a9f2e..4fd63826 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/service/impl/DeviceServiceImpl.java @@ -1,57 +1,208 @@ package xiaozhi.modules.device.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import org.springframework.stereotype.Service; -import xiaozhi.common.page.PageData; -import xiaozhi.common.service.impl.BaseServiceImpl; -import xiaozhi.modules.device.dao.DeviceDao; -import xiaozhi.modules.device.dto.DeviceHeaderDTO; -import xiaozhi.modules.device.entity.DeviceEntity; -import xiaozhi.modules.device.service.DeviceService; - +import java.time.Instant; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TimeZone; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; + +import cn.hutool.core.util.RandomUtil; +import xiaozhi.common.exception.RenException; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.user.UserDetail; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.device.dao.DeviceDao; +import xiaozhi.modules.device.dto.DeviceBindDTO; +import xiaozhi.modules.device.dto.DeviceReportReqDTO; +import xiaozhi.modules.device.dto.DeviceReportRespDTO; +import xiaozhi.modules.device.entity.DeviceEntity; +import xiaozhi.modules.device.service.DeviceService; +import xiaozhi.modules.security.user.SecurityUser; @Service public class DeviceServiceImpl extends BaseServiceImpl implements DeviceService { + private final DeviceDao deviceDao; + private final String frontedUrl; + + private final RedisTemplate redisTemplate; + // 添加构造函数来初始化 deviceMapper - public DeviceServiceImpl(DeviceDao deviceDao) { + public DeviceServiceImpl(DeviceDao deviceDao, + @Value("${app.fronted-url:http://localhost:8001}") String frontedUrl, + RedisTemplate redisTemplate) { this.deviceDao = deviceDao; + this.frontedUrl = frontedUrl; + this.redisTemplate = redisTemplate; } @Override - public DeviceEntity bindDevice(Long userId, DeviceHeaderDTO deviceHeader) { - DeviceEntity device = new DeviceEntity(); - device.setUserId(userId); - device.setMacAddress(deviceHeader.getDeviceId()); - device.setCreateDate(new Date()); - deviceDao.insert(device); - return device; + public DeviceEntity getDeviceById(String deviceId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DeviceEntity::getId, deviceId); + return deviceDao.selectOne(queryWrapper); } @Override - public List getUserDevices(Long userId) { + public Boolean deviceActivation(String activationCode) { + if (StringUtils.isBlank(activationCode)) { + throw new RenException("激活码不能为空"); + } + String deviceKey = "ota:activation:code:" + activationCode; + Object cacheDeviceId = redisTemplate.opsForValue().get(deviceKey); + if (cacheDeviceId == null) { + throw new RenException("激活码错误"); + } + String deviceId = (String) cacheDeviceId; + String safeDeviceId = deviceId.replace(":", "_").toLowerCase(); + String cacheDeviceKey = String.format("ota:activation:data:%s", safeDeviceId); + Map cacheMap = redisTemplate.opsForHash().entries(cacheDeviceKey); + if (cacheMap == null) { + throw new RenException("激活码错误"); + } + String cachedCode = (String) cacheMap.get("activation_code"); + if (!activationCode.equals(cachedCode)) { + throw new RenException("激活码错误"); + } + // 检查设备有没有被激活 + if (selectById(deviceId) != null) { + throw new RenException("设备已激活"); + } + + String macAddress = (String) cacheMap.get("mac_address"); + String board = (String) cacheMap.get("board"); + String appVersion = (String) cacheMap.get("app_version"); + UserDetail user = SecurityUser.getUser(); + if (user.getId() == null) { + throw new RenException("用户未登录"); + } + + Date currentTime = new Date(); + DeviceEntity deviceEntity = new DeviceEntity(); + deviceEntity.setId(deviceId); + deviceEntity.setBoard(board); + deviceEntity.setAppVersion(appVersion); + deviceEntity.setMacAddress(macAddress); + deviceEntity.setUserId(user.getId()); + deviceEntity.setCreator(user.getId()); + deviceEntity.setCreateDate(currentTime); + deviceEntity.setUpdater(user.getId()); + deviceEntity.setUpdateDate(currentTime); + deviceEntity.setLastConnectedAt(currentTime); + deviceDao.insert(deviceEntity); + + // 清理redis缓存 + redisTemplate.delete(cacheDeviceKey); + redisTemplate.delete(deviceKey); + return true; + } + + @Override + public DeviceReportRespDTO checkDeviceActive(String macAddress, String deviceId, String clientId, + DeviceReportReqDTO deviceReport) { + DeviceReportRespDTO response = new DeviceReportRespDTO(); + response.setServerTime(buildServerTime()); + // todo: 此处是固件信息,目前是针对固件上传上来的版本号再返回回去 + // 在未来开发了固件更新功能,需要更换此处代码, + // 或写定时任务定期请求虾哥的OTA,获取最新的版本讯息保存到服务内 + DeviceReportRespDTO.Firmware firmware = new DeviceReportRespDTO.Firmware(); + firmware.setVersion(deviceReport.getApplication().getVersion()); + firmware.setUrl("http://localhost:8002/xiaozhi-esp32-api/api/v1/ota/download"); + response.setFirmware(firmware); + + DeviceEntity deviceById = getDeviceById(deviceId); + if (deviceById != null) { // 如果设备存在,则更新上次连接时间 + deviceById.setLastConnectedAt(new Date()); + deviceDao.updateById(deviceById); + } else { // 如果设备不存在,则生成激活码 + String safeDeviceId = deviceId.replace(":", "_").toLowerCase(); + String dataKey = String.format("ota:activation:data:%s", safeDeviceId); + + Map cacheMap = redisTemplate.opsForHash().entries(dataKey); + DeviceReportRespDTO.Activation code = new DeviceReportRespDTO.Activation(); + + if (cacheMap != null && cacheMap.containsKey("activation_code")) { + String cachedCode = (String) cacheMap.get("activation_code"); + code.setCode(cachedCode); + code.setMessage(frontedUrl + "\n" + cachedCode); + } else { + String newCode = RandomUtil.randomNumbers(6); + code.setCode(newCode); + code.setMessage(frontedUrl + "\n" + newCode); + + Map dataMap = new HashMap<>(); + dataMap.put("id", deviceId); + dataMap.put("mac_address", macAddress); + dataMap.put("board", (deviceReport.getChipModelName() != null) ? deviceReport.getChipModelName() + : (deviceReport.getBoard() != null ? deviceReport.getBoard().getType() : "unknown")); + dataMap.put("app_version", (deviceReport.getApplication() != null) + ? deviceReport.getApplication().getVersion() + : null); + dataMap.put("deviceId", deviceId); + dataMap.put("activation_code", newCode); + + // 写入主数据 key + redisTemplate.opsForHash().putAll(dataKey, dataMap); + redisTemplate.expire(dataKey, 24, TimeUnit.HOURS); + + // 写入反查激活码 key + String codeKey = "ota:activation:code:" + newCode; + redisTemplate.opsForValue().set(codeKey, deviceId, 24, TimeUnit.HOURS); + } + + response.setActivation(code); + } + + return response; + } + + @Override + public DeviceEntity bindDevice(DeviceBindDTO dto) { + // 查看是否已经被绑定 + DeviceEntity deviceEntity = baseDao + .selectOne(new LambdaQueryWrapper().eq(DeviceEntity::getMacAddress, dto.getMacAddress())); + if (deviceEntity != null) { + throw new RenException("设备已绑定"); + } + deviceEntity = ConvertUtils.sourceToTarget(dto, DeviceEntity.class); + baseDao.insert(deviceEntity); + return deviceEntity; + } + + @Override + public List getUserDevices(Long userId, String agentId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("user_id", userId); - return deviceDao.selectList(wrapper); + wrapper.eq("agent_id", agentId); + return baseDao.selectList(wrapper); } @Override - public void unbindDevice(Long userId, Long deviceId) { - deviceDao.deleteById(deviceId); + public void unbindDevice(Long userId, String deviceId) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("user_id", userId); + wrapper.eq("id", deviceId); + baseDao.delete(wrapper); } - @Override - public PageData adminDeviceList(Map params) { - IPage page = deviceDao.selectPage( - getPage(params, "sort", true), - new QueryWrapper<>() - ); - return new PageData<>(page.getRecords(), page.getTotal()); + private DeviceReportRespDTO.ServerTime buildServerTime() { + DeviceReportRespDTO.ServerTime serverTime = new DeviceReportRespDTO.ServerTime(); + TimeZone tz = TimeZone.getDefault(); + serverTime.setTimestamp(Instant.now().toEpochMilli()); + serverTime.setTimeZone(tz.getID()); + serverTime.setTimezoneOffset(tz.getOffset(System.currentTimeMillis()) / (60 * 1000)); + return serverTime; } - } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/utils/NetworkUtil.java b/main/manager-api/src/main/java/xiaozhi/modules/device/utils/NetworkUtil.java new file mode 100644 index 00000000..ab269f7b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/utils/NetworkUtil.java @@ -0,0 +1,34 @@ +package xiaozhi.modules.device.utils; + +import java.util.regex.Pattern; + +import org.apache.commons.lang3.StringUtils; + +/** + * 网络工具类 + */ +public class NetworkUtil { + /** + * MAC地址正则表达式 + */ + private static final Pattern macPattern = Pattern.compile("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"); + + /** + * 判断MAC地址是否合法 + */ + public static boolean isMacAddressValid(String mac) { + if (StringUtils.isBlank(mac)) { + return false; + } + // 正则校验格式 + if (!macPattern.matcher(mac).matches()) { + return false; + } + // 校验MAC地址是否为单播地址 + String normalized = mac.toLowerCase(); + String[] parts = normalized.split("[:-]"); + int firstByte = Integer.parseInt(parts[0], 16); + return (firstByte & 1) == 0; // 最低位为0表示单播地址,合法 + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceOtaVO.java b/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceOtaVO.java new file mode 100644 index 00000000..ec8e405e --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/device/vo/DeviceOtaVO.java @@ -0,0 +1,59 @@ +package xiaozhi.modules.device.vo; + +import lombok.Data; + +@Data +public class DeviceOtaVO { + private Activation activation; + private Mqtt mqtt; + private ServerTime server_time; + private Firmware firmware; + private String error; + + @Data + public static class Activation { + private String code; + private String message; + + public Activation() { + } + + public Activation(String code, String message) { + this.code = code; + this.message = message; + } + } + + @Data + public class Mqtt { + + } + + @Data + public static class ServerTime { + private Long timestamp; + private Integer timezone_offset; + + public ServerTime() { + } + + public ServerTime(Long timestamp, Integer timezone_offset) { + this.timestamp = timestamp; + this.timezone_offset = timezone_offset; + } + } + + @Data + public static class Firmware { + private String version; + private String url; + + public Firmware() { + } + + public Firmware(String version, String url) { + this.version = version; + this.url = url; + } + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelConfigController.java~ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelConfigController.java~ deleted file mode 100644 index d1693839..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelConfigController.java~ +++ /dev/null @@ -1,2 +0,0 @@ -package xiaozhi.modules.model.controller;public class ModelConfigController { -} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java index f743a795..af1e772f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/controller/ModelController.java @@ -1,20 +1,30 @@ package xiaozhi.modules.model.controller; +import java.util.List; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +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; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.web.bind.annotation.*; import xiaozhi.common.page.PageData; import xiaozhi.common.utils.Result; import xiaozhi.modules.model.dto.ModelConfigBodyDTO; import xiaozhi.modules.model.dto.ModelConfigDTO; import xiaozhi.modules.model.dto.ModelProviderDTO; +import xiaozhi.modules.model.dto.ModelProviderFieldDTO; import xiaozhi.modules.model.service.ModelConfigService; import xiaozhi.modules.model.service.ModelProviderService; -import java.util.List; - @AllArgsConstructor @RestController @RequestMapping("/models") @@ -29,7 +39,7 @@ public class ModelController { @Operation(summary = "获取所有模型名称") @RequiresPermissions("sys:role:superAdmin") public Result> getModelNames(@RequestParam String modelType, - @RequestParam(required = false) String modelName) { + @RequestParam(required = false) String modelName) { List modelNameList = modelConfigService.getModelCodeList(modelType, modelName); return new Result>().ok(modelNameList); } @@ -45,62 +55,61 @@ public class ModelController { @GetMapping("/{modelType}/{provideCode}/fields") @Operation(summary = "获取模型供应器字段") @RequiresPermissions("sys:role:superAdmin") - public Result> getModelProviderFields(@PathVariable String modelType, @PathVariable String provideCode) { - List fieldList = modelProviderService.getFieldList(modelType, provideCode); - return new Result>().ok(fieldList); + public Result> getModelProviderFields(@PathVariable String modelType, + @PathVariable String provideCode) { + List fieldList = modelProviderService.getFieldList(modelType, provideCode); + return new Result>().ok(fieldList); } - @GetMapping("/models/list") @Operation(summary = "获取模型配置列表") @RequiresPermissions("sys:role:superAdmin") - public Result> getModelConfigList(@RequestParam String modelType, - @RequestParam(required = false) String modelName, - @RequestParam(required = false, defaultValue = "0") Integer page, - @RequestParam(required = false,defaultValue = "10") Integer limit) { + public Result> getModelConfigList( + @RequestParam(required = true) String modelType, + @RequestParam(required = false) String modelName, + @RequestParam(required = true, defaultValue = "0") String page, + @RequestParam(required = true, defaultValue = "10") String limit) { PageData pageList = modelConfigService.getPageList(modelType, modelName, page, limit); return new Result>().ok(pageList); } - @PostMapping("/models/{modelType}/{provideCode}") @Operation(summary = "新增模型配置") @RequiresPermissions("sys:role:superAdmin") public Result addModelConfig(@PathVariable String modelType, - @PathVariable String provideCode, - @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) { + @PathVariable String provideCode, + @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) { ModelConfigDTO modelConfigDTO = modelConfigService.add(modelType, provideCode, modelConfigBodyDTO); return new Result().ok(modelConfigDTO); } - @PutMapping("/models/{modelType}/{provideCode}/{id}") @Operation(summary = "编辑模型配置") @RequiresPermissions("sys:role:superAdmin") public Result editModelConfig(@PathVariable String modelType, - @PathVariable String provideCode, - @PathVariable String id, - @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) { + @PathVariable String provideCode, + @PathVariable String id, + @RequestBody ModelConfigBodyDTO modelConfigBodyDTO) { ModelConfigDTO modelConfigDTO = modelConfigService.edit(modelType, provideCode, id, modelConfigBodyDTO); return new Result().ok(modelConfigDTO); } - @DeleteMapping("/models/{modelType}/{provideCode}/{id}") @Operation(summary = "删除模型配置") @RequiresPermissions("sys:role:superAdmin") - public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, @PathVariable String id) { + public Result deleteModelConfig(@PathVariable String modelType, @PathVariable String provideCode, + @PathVariable String id) { modelConfigService.delete(modelType, provideCode, id); return new Result<>(); } - @GetMapping("/models/{modelName}/voices") + @GetMapping("/models/{modelId}/voices") @Operation(summary = "获取模型音色") @RequiresPermissions("sys:role:normal") - public Result> getVoiceList(@PathVariable String modelName, - @RequestParam(required = false) String voiceName) { + public Result> getVoiceList(@PathVariable String modelId, + @RequestParam(required = false) String voiceName) { - List voiceList = modelConfigService.getVoiceList(modelName, voiceName); + List voiceList = modelConfigService.getVoiceList(modelId, voiceName); return new Result>().ok(voiceList); } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelConfigDao.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelConfigDao.java index a35967e4..79c526f0 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelConfigDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelConfigDao.java @@ -1,12 +1,13 @@ package xiaozhi.modules.model.dao; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.model.entity.ModelConfigEntity; -import java.util.List; - @Mapper public interface ModelConfigDao extends BaseDao { diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelProviderDao.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelProviderDao.java index 51042e8d..68e41858 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelProviderDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dao/ModelProviderDao.java @@ -1,14 +1,15 @@ package xiaozhi.modules.model.dao; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.model.entity.ModelProviderEntity; -import java.util.List; - @Mapper public interface ModelProviderDao extends BaseDao { - List getFieldList(@Param("modelType") String modelType, @Param("provideCode") String provideCode); + List getFieldList(@Param("modelType") String modelType, @Param("providerCode") String providerCode); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java index 639e19a2..3e335bf0 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigBodyDTO.java @@ -1,10 +1,10 @@ package xiaozhi.modules.model.dto; +import java.io.Serial; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.io.Serial; - @Data @Schema(description = "模型供应器/商") public class ModelConfigBodyDTO { @@ -12,9 +12,9 @@ public class ModelConfigBodyDTO { @Serial private static final long serialVersionUID = 1L; -// @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") -// private String modelType; -// + // @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") + // private String modelType; + // @Schema(description = "模型编码(如AliLLM、DoubaoTTS)") private String modelCode; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java index 95a44921..a7b1b436 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelConfigDTO.java @@ -1,11 +1,11 @@ package xiaozhi.modules.model.dto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import java.io.Serial; import java.io.Serializable; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + @Data @Schema(description = "模型供应器/商") public class ModelConfigDTO implements Serializable { @@ -14,7 +14,7 @@ public class ModelConfigDTO implements Serializable { private static final long serialVersionUID = 1L; @Schema(description = "主键") - private Long id; + private String id; @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") private String modelType; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java index acce3036..605ed13a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderDTO.java @@ -1,19 +1,21 @@ package xiaozhi.modules.model.dto; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - import java.io.Serializable; import java.util.Date; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + @Data @Schema(description = "模型供应器/商") public class ModelProviderDTO implements Serializable { -// -// @Schema(description = "主键") -// private Long id; + // + // @Schema(description = "主键") + // private Long id; @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") private String modelType; @@ -31,15 +33,19 @@ public class ModelProviderDTO implements Serializable { @Schema(description = "排序") private Integer sort; - @Schema(description = "创建者") - private Long creator; - - @Schema(description = "创建时间") - private Date createDate; - @Schema(description = "更新者") + @TableField(fill = FieldFill.UPDATE) private Long updater; @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) private Date updateDate; + + @Schema(description = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long creator; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private Date createDate; } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java new file mode 100644 index 00000000..8186b363 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/dto/ModelProviderFieldDTO.java @@ -0,0 +1,19 @@ +package xiaozhi.modules.model.dto; + +import java.io.Serializable; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "模型供应器字段") +public class ModelProviderFieldDTO implements Serializable { + @Schema(description = "字段名") + private String key; + + @Schema(description = "字段标签") + private String label; + + @Schema(description = "字段类型") + private String type; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java index c98705f3..0111ea96 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelConfigEntity.java @@ -1,16 +1,17 @@ package xiaozhi.modules.model.entity; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.util.Date; - - @Data @TableName("ai_model_config") @Schema(description = "模型配置表") @@ -48,15 +49,19 @@ public class ModelConfigEntity { @Schema(description = "排序") private Integer sort; - @Schema(description = "创建者") - private Long creator; - - @Schema(description = "创建时间") - private Date createDate; - @Schema(description = "更新者") + @TableField(fill = FieldFill.UPDATE) private Long updater; @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) private Date updateDate; + + @Schema(description = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long creator; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private Date createDate; } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java index 0c526b88..62e84f67 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/entity/ModelProviderEntity.java @@ -1,15 +1,16 @@ package xiaozhi.modules.model.entity; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.util.Date; - @Data @TableName("ai_model_provider") @Schema(description = "模型供应器表") diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java index 1911be78..78e9d0ce 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelConfigService.java @@ -1,16 +1,16 @@ package xiaozhi.modules.model.service; +import java.util.List; + import xiaozhi.common.page.PageData; import xiaozhi.modules.model.dto.ModelConfigBodyDTO; import xiaozhi.modules.model.dto.ModelConfigDTO; -import java.util.List; - public interface ModelConfigService { List getModelCodeList(String modelType, String modelName); - PageData getPageList(String modelType, String modelName, Integer page, Integer limit); + PageData getPageList(String modelType, String modelName, String page, String limit); ModelConfigDTO add(String modelType, String provideCode, ModelConfigBodyDTO modelConfigBodyDTO); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java index d0d221cf..cb92c953 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/ModelProviderService.java @@ -1,13 +1,14 @@ package xiaozhi.modules.model.service; -import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.entity.ModelProviderEntity; - import java.util.List; +import xiaozhi.modules.model.dto.ModelProviderDTO; +import xiaozhi.modules.model.dto.ModelProviderFieldDTO; +import xiaozhi.modules.model.entity.ModelProviderEntity; + public interface ModelProviderService { -// List getModelNames(String modelType, String modelName); + // List getModelNames(String modelType, String modelName); List getListByModelType(String modelType); @@ -19,5 +20,5 @@ public interface ModelProviderService { List getList(String modelType, String provideCode); - List getFieldList(String modelType, String provideCode); + List getFieldList(String modelType, String provideCode); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java index a7ba9b10..6372dc0c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelConfigServiceImpl.java @@ -1,13 +1,19 @@ package xiaozhi.modules.model.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.AllArgsConstructor; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import cn.hutool.core.collection.CollectionUtil; +import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.RenException; import xiaozhi.common.page.PageData; @@ -22,13 +28,10 @@ import xiaozhi.modules.model.service.ModelConfigService; import xiaozhi.modules.model.service.ModelProviderService; import xiaozhi.modules.timbre.service.TimbreService; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Service @AllArgsConstructor -public class ModelConfigServiceImpl extends BaseServiceImpl implements ModelConfigService { +public class ModelConfigServiceImpl extends BaseServiceImpl + implements ModelConfigService { private final ModelConfigDao modelConfigDao; private final ModelProviderService modelProviderService; @@ -42,7 +45,7 @@ public class ModelConfigServiceImpl extends BaseServiceImpl getPageList(String modelType, String modelName, Integer page, Integer limit) { + public PageData getPageList(String modelType, String modelName, String page, String limit) { Map params = new HashMap(); params.put(Constant.PAGE, page); params.put(Constant.LIMIT, limit); @@ -50,8 +53,7 @@ public class ModelConfigServiceImpl extends BaseServiceImpl() .eq("model_type", modelType) - .like(StringUtils.isNotBlank(modelName), "model_name", modelName) - ); + .like(StringUtils.isNotBlank(modelName), "model_name", "%" + modelName + "%")); return getPageData(modelConfigEntityIPage, ModelConfigDTO.class); } @@ -103,22 +105,11 @@ public class ModelConfigServiceImpl extends BaseServiceImpl getVoiceList(String modelName, String voiceName) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("model_name", StringUtils.isBlank(modelName) ? "" : modelName); - queryWrapper.eq("model_type", "TTS"); - List modelConfigEntities = modelConfigDao.selectList(queryWrapper); - if (CollectionUtil.isEmpty(modelConfigEntities)) { - logger.warn("没有找到模型配置信息"); - return null; - } - ModelConfigEntity modelConfigEntity = modelConfigEntities.get(0); - String id = modelConfigEntity.getId(); - - return timbreService.getVoiceNames(id, voiceName); + public List getVoiceList(String modelId, String voiceName) { + return timbreService.getVoiceNames(modelId, voiceName); } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java index 042749d9..7580d479 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/model/service/impl/ModelProviderServiceImpl.java @@ -1,21 +1,26 @@ package xiaozhi.modules.model.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import lombok.AllArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import xiaozhi.common.service.impl.BaseServiceImpl; -import xiaozhi.common.utils.ConvertUtils; -import xiaozhi.modules.model.dao.ModelProviderDao; -import xiaozhi.modules.model.dto.ModelProviderDTO; -import xiaozhi.modules.model.entity.ModelProviderEntity; -import xiaozhi.modules.model.service.ModelProviderService; - import java.util.List; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import lombok.AllArgsConstructor; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.common.utils.JsonUtils; +import xiaozhi.modules.model.dao.ModelProviderDao; +import xiaozhi.modules.model.dto.ModelProviderDTO; +import xiaozhi.modules.model.dto.ModelProviderFieldDTO; +import xiaozhi.modules.model.entity.ModelProviderEntity; +import xiaozhi.modules.model.service.ModelProviderService; + @Service @AllArgsConstructor -public class ModelProviderServiceImpl extends BaseServiceImpl implements ModelProviderService { +public class ModelProviderServiceImpl extends BaseServiceImpl + implements ModelProviderService { private final ModelProviderDao modelProviderDao; @@ -44,16 +49,22 @@ public class ModelProviderServiceImpl extends BaseServiceImpl getList(String modelType, String provideCode) { + public List getList(String modelType, String providerCode) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("model_type", StringUtils.isBlank(modelType) ? "" : modelType); - queryWrapper.eq("provide_code", StringUtils.isBlank(provideCode) ? "" : provideCode); + queryWrapper.eq("provider_code", StringUtils.isBlank(providerCode) ? "" : providerCode); List providerEntities = modelProviderDao.selectList(queryWrapper); return ConvertUtils.sourceToTarget(providerEntities, ModelProviderDTO.class); } @Override - public List getFieldList(String modelType, String provideCode) { - return modelProviderDao.getFieldList(modelType, provideCode); + public List getFieldList(String modelType, String providerCode) { + List modelProviderEntities = modelProviderDao.getFieldList(modelType, providerCode); + if (modelProviderEntities == null || modelProviderEntities.isEmpty()) { + return null; + } + String fields = modelProviderEntities.getFirst(); + List fieldList = JsonUtils.parseArray(fields, ModelProviderFieldDTO.class); + return fieldList; } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java index 607cb68b..d74ed08b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java @@ -5,7 +5,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.DelegatingFilterProxy; - /** * Filter配置 * Copyright (c) 人人开源 All rights reserved. @@ -18,7 +17,7 @@ public class FilterConfig { public FilterRegistrationBean shiroFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean<>(); registration.setFilter(new DelegatingFilterProxy("shiroFilter")); - //该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 + // 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 registration.addInitParameter("targetFilterLifecycle", "true"); registration.setEnabled(true); registration.setOrder(Integer.MAX_VALUE - 1); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java index de25d80e..fc5db705 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java @@ -1,8 +1,9 @@ package xiaozhi.modules.security.config; -import xiaozhi.modules.security.oauth2.Oauth2Filter; -import xiaozhi.modules.security.oauth2.Oauth2Realm; -import jakarta.servlet.Filter; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.session.mgt.SessionManager; import org.apache.shiro.spring.LifecycleBeanPostProcessor; @@ -14,9 +15,9 @@ import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; +import jakarta.servlet.Filter; +import xiaozhi.modules.security.oauth2.Oauth2Filter; +import xiaozhi.modules.security.oauth2.Oauth2Realm; /** * Shiro的配置文件 @@ -53,18 +54,21 @@ public class ShiroConfig { shiroFilter.setSecurityManager(securityManager); shiroFilter.setShiroFilterConfiguration(config); - //oauth过滤 + // oauth过滤 Map filters = new HashMap<>(); filters.put("oauth2", new Oauth2Filter()); shiroFilter.setFilters(filters); - //添加Shiro的内置过滤器 - /*anon:无需认证就可以访问 - authc:必须认证了才能让问 - user:必须拥有,记住我功能,才能访问 - perms:拥有对某个资源的权限才能访问 - role:拥有某个角色权限才能访问*/ + // 添加Shiro的内置过滤器 + /* + * anon:无需认证就可以访问 + * authc:必须认证了才能让问 + * user:必须拥有,记住我功能,才能访问 + * perms:拥有对某个资源的权限才能访问 + * role:拥有某个角色权限才能访问 + */ Map filterMap = new LinkedHashMap<>(); + filterMap.put("/ota/**", "anon"); filterMap.put("/webjars/**", "anon"); filterMap.put("/druid/**", "anon"); filterMap.put("/v3/api-docs/**", "anon"); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java index a086e953..7cfb03d9 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java @@ -1,9 +1,8 @@ package xiaozhi.modules.security.config; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import java.util.List; +import java.util.TimeZone; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.ByteArrayHttpMessageConverter; @@ -15,8 +14,10 @@ import org.springframework.http.converter.support.AllEncompassingFormHttpMessage import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import java.util.List; -import java.util.TimeZone; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @@ -45,14 +46,14 @@ public class WebMvcConfig implements WebMvcConfigurer { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); - //忽略未知属性 + // 忽略未知属性 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - //日期格式转换 - //mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); + // 日期格式转换 + // mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); - //Long类型转String类型 + // Long类型转String类型 SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java index 6ab9d1b9..7db612b5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java @@ -1,18 +1,25 @@ package xiaozhi.modules.security.controller; +import java.io.IOException; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.*; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; import xiaozhi.common.page.TokenDTO; import xiaozhi.common.user.UserDetail; import xiaozhi.common.utils.Result; import xiaozhi.common.validator.AssertUtils; +import xiaozhi.common.validator.ValidatorUtils; import xiaozhi.modules.security.dto.LoginDTO; import xiaozhi.modules.security.password.PasswordUtils; import xiaozhi.modules.security.service.CaptchaService; @@ -22,8 +29,6 @@ import xiaozhi.modules.sys.dto.PasswordDTO; import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.service.SysUserService; -import java.io.IOException; - /** * 登录控制层 */ @@ -36,14 +41,13 @@ public class LoginController { private final SysUserTokenService sysUserTokenService; private final CaptchaService captchaService; - @GetMapping("/captcha") @Operation(summary = "验证码") public void captcha(HttpServletResponse response, String uuid) throws IOException { - //uuid不能为空 + // uuid不能为空 AssertUtils.isBlank(uuid, ErrorCode.IDENTIFIER_NOT_NULL); - //生成验证码 + // 生成验证码 captchaService.create(response, uuid); } @@ -101,6 +105,8 @@ public class LoginController { @PutMapping("/change-password") @Operation(summary = "修改用户密码") public Result changePassword(@RequestBody PasswordDTO passwordDTO) { + // 判断非空 + ValidatorUtils.validateEntity(passwordDTO); Long userId = SecurityUser.getUserId(); sysUserTokenService.changePassword(userId, passwordDTO); return new Result<>(); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java b/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java index 044568e5..05f946d3 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java @@ -1,12 +1,13 @@ package xiaozhi.modules.security.dao; +import java.util.Date; + import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.security.entity.SysUserTokenEntity; -import java.util.Date; - /** * 系统用户Token * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java index 2fc0d3b2..cab143be 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java @@ -1,11 +1,11 @@ package xiaozhi.modules.security.dto; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.io.Serializable; - /** * 登录表单 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java index fb96f88c..2346b5e4 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java @@ -1,13 +1,14 @@ package xiaozhi.modules.security.entity; +import java.io.Serializable; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import java.io.Serializable; -import java.util.Date; +import lombok.Data; /** * 系统用户Token diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java index 55e3fa03..e66327f5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java @@ -1,9 +1,7 @@ package xiaozhi.modules.security.oauth2; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; @@ -11,14 +9,17 @@ import org.apache.shiro.web.filter.authc.AuthenticatingFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMethod; + +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.utils.HttpContextUtils; import xiaozhi.common.utils.JsonUtils; import xiaozhi.common.utils.Result; -import java.io.IOException; - /** * oauth2过滤器 * Copyright (c) 人人开源 All rights reserved. @@ -30,7 +31,7 @@ public class Oauth2Filter extends AuthenticatingFilter { @Override protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { - //获取请求token + // 获取请求token String token = getRequestToken((HttpServletRequest) request); if (StringUtils.isBlank(token)) { @@ -52,14 +53,9 @@ public class Oauth2Filter extends AuthenticatingFilter { @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { - //获取请求token,如果token不存在,直接返回401 + // 获取请求token,如果token不存在,直接返回401 String token = getRequestToken((HttpServletRequest) request); - // TODO 调试接口,临时取消登录限制,需要 token 参数的除外 - if (true) { - return true; - } - if (StringUtils.isBlank(token)) { logger.warn("onAccessDenied:token is empty"); @@ -68,7 +64,7 @@ public class Oauth2Filter extends AuthenticatingFilter { httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); - String json = JsonUtils.toJsonString(new Result().error(ErrorCode.UNAUTHORIZED)); + String json = JsonUtils.toJsonString(new Result().error(ErrorCode.UNAUTHORIZED)); httpResponse.getWriter().print(json); @@ -79,21 +75,21 @@ public class Oauth2Filter extends AuthenticatingFilter { } @Override - protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, + ServletResponse response) { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setContentType("application/json;charset=utf-8"); httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); try { - //处理登录失败的异常 + // 处理登录失败的异常 logger.error("onLoginFailure:登录失败!", e); Throwable throwable = e.getCause() == null ? e : e.getCause(); - Result r = new Result().error(ErrorCode.UNAUTHORIZED, throwable.getMessage()); + Result r = new Result().error(ErrorCode.UNAUTHORIZED, throwable.getMessage()); String json = JsonUtils.toJsonString(r); httpResponse.getWriter().print(json); } catch (IOException e1) { - logger.error("onLoginFailure:登录失败! msg:{}", e1.getMessage(), e1); } return false; @@ -104,7 +100,7 @@ public class Oauth2Filter extends AuthenticatingFilter { */ private String getRequestToken(HttpServletRequest httpRequest) { String token = null; - //从header中获取token + // 从header中获取token String authorization = httpRequest.getHeader(Constant.AUTHORIZATION); if (StringUtils.isNotBlank(authorization) && authorization.startsWith("Bearer ")) { token = authorization.replace("Bearer ", ""); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java index 6b04bb08..27c3bc49 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java @@ -1,7 +1,15 @@ package xiaozhi.modules.security.oauth2; -import jakarta.annotation.Resource; -import org.apache.shiro.authc.*; +import java.util.HashSet; +import java.util.Set; + +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.LockedAccountException; +import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; @@ -10,6 +18,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; + +import jakarta.annotation.Resource; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.user.UserDetail; import xiaozhi.common.utils.ConvertUtils; @@ -19,9 +29,6 @@ import xiaozhi.modules.security.service.ShiroService; import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.enums.SuperAdminEnum; -import java.util.HashSet; -import java.util.Set; - /** * 认证 * Copyright (c) 人人开源 All rights reserved. @@ -47,7 +54,7 @@ public class Oauth2Realm extends AuthorizingRealm { protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { UserDetail user = (UserDetail) principals.getPrimaryPrincipal(); - //用户权限列表 + // 用户权限列表 Set permsSet = new HashSet<>(); if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { @@ -69,22 +76,22 @@ public class Oauth2Realm extends AuthorizingRealm { protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String accessToken = (String) token.getPrincipal(); - //根据accessToken,查询用户信息 + // 根据accessToken,查询用户信息 SysUserTokenEntity tokenEntity = shiroService.getByToken(accessToken); - //token失效 + // token失效 if (tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) { throw new IncorrectCredentialsException(MessageUtils.getMessage(ErrorCode.TOKEN_INVALID)); } - //查询用户信息 + // 查询用户信息 SysUserEntity userEntity = shiroService.getUser(tokenEntity.getUserId()); - //转换成UserDetail对象 + // 转换成UserDetail对象 UserDetail userDetail = ConvertUtils.sourceToTarget(userEntity, UserDetail.class); userDetail.setToken(accessToken); - //账号锁定 + // 账号锁定 if (userDetail.getStatus() == null) { logger.error("账号状态异常,status 不能为空"); throw new DisabledAccountException(MessageUtils.getMessage(ErrorCode.ACCOUNT_DISABLE)); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java index 0ca1cede..6d7be47a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java @@ -1,10 +1,10 @@ package xiaozhi.modules.security.oauth2; -import xiaozhi.common.exception.RenException; - import java.security.MessageDigest; import java.util.UUID; +import xiaozhi.common.exception.RenException; + /** * 生成token * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java index 6a9efff9..39d350c5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java @@ -5,22 +5,28 @@ import java.io.UnsupportedEncodingException; import java.security.SecureRandom; /** - * BCrypt implements OpenBSD-style Blowfish password hashing using the scheme described in + * BCrypt implements OpenBSD-style Blowfish password hashing using the scheme + * described in * "A Future-Adaptable Password Scheme" by Niels Provos and David Mazieres. *

- * This password hashing system tries to thwart off-line password cracking using a - * computationally-intensive hashing algorithm, based on Bruce Schneier's Blowfish cipher. - * The work factor of the algorithm is parameterised, so it can be increased as computers + * This password hashing system tries to thwart off-line password cracking using + * a + * computationally-intensive hashing algorithm, based on Bruce Schneier's + * Blowfish cipher. + * The work factor of the algorithm is parameterised, so it can be increased as + * computers * get faster. *

- * Usage is really simple. To hash a password for the first time, call the hashpw method + * Usage is really simple. To hash a password for the first time, call the + * hashpw method * with a random salt, like this: *

* * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
*
*

- * To check whether a plaintext password matches one that has been hashed previously, use + * To check whether a plaintext password matches one that has been hashed + * previously, use * the checkpw method: *

* @@ -30,7 +36,8 @@ import java.security.SecureRandom; *     System.out.println("It does not match");
*
*

- * The gensalt() method takes an optional parameter (log_rounds) that determines the + * The gensalt() method takes an optional parameter (log_rounds) that determines + * the * computational complexity of the hashing: *

* @@ -38,7 +45,8 @@ import java.security.SecureRandom; * String stronger_salt = BCrypt.gensalt(12)
*
*

- * The amount of work increases exponentially (2**log_rounds), so each increment is twice + * The amount of work increases exponentially (2**log_rounds), so each increment + * is twice * as much work. The default log_rounds is 10, and the valid range is 4 to 31. * * @author Damien Miller @@ -51,11 +59,11 @@ public class BCrypt { // Blowfish parameters private static final int BLOWFISH_NUM_ROUNDS = 16; // Initial contents of key schedule - private static final int P_orig[] = {0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + private static final int P_orig[] = { 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b}; - private static final int S_orig[] = {0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0x9216d5d9, 0x8979fb1b }; + private static final int S_orig[] = { 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, @@ -225,24 +233,24 @@ public class BCrypt { 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, - 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}; + 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 }; // bcrypt IV: "OrpheanBeholderScryDoubt" - static private final int bf_crypt_ciphertext[] = {0x4f727068, 0x65616e42, - 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274}; + static private final int bf_crypt_ciphertext[] = { 0x4f727068, 0x65616e42, + 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274 }; // Table for Base64 encoding - static private final char base64_code[] = {'.', '/', 'A', 'B', 'C', 'D', 'E', 'F', + static private final char base64_code[] = { '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', - 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; // Table for Base64 decoding - static private final byte index_64[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + static private final byte index_64[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1}; + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1 }; static final int MIN_LOG_ROUNDS = 4; static final int MAX_LOG_ROUNDS = 31; // Expanded Blowfish key @@ -250,7 +258,8 @@ public class BCrypt { private int S[]; /** - * Encode a byte array using bcrypt's slightly-modified base64 encoding scheme. Note + * Encode a byte array using bcrypt's slightly-modified base64 encoding scheme. + * Note * that this is not compatible with the standard MIME-base64 * encoding. * @@ -306,7 +315,8 @@ public class BCrypt { } /** - * Decode a string encoded using bcrypt's base64 scheme to a byte array. Note that + * Decode a string encoded using bcrypt's base64 scheme to a byte array. Note + * that * this is *not* compatible with the standard MIME-base64 encoding. * * @param s the string to decode @@ -365,7 +375,7 @@ public class BCrypt { int i, n, l = lr[off], r = lr[off + 1]; l ^= P[0]; - for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2; ) { + for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { // Feistel substitution on left word n = S[(l >> 24) & 0xff]; n += S[0x100 | ((l >> 16) & 0xff)]; @@ -388,7 +398,8 @@ public class BCrypt { * Cycically extract a word of key material * * @param data the string to extract the data from - * @param offp a "pointer" (as a one-entry array) to the current offset into data + * @param offp a "pointer" (as a one-entry array) to the current offset into + * data * @return the next word of material from data */ private static int streamtoword(byte data[], int offp[]) { @@ -420,8 +431,8 @@ public class BCrypt { */ private void key(byte key[]) { int i; - int koffp[] = {0}; - int lr[] = {0, 0}; + int koffp[] = { 0 }; + int lr[] = { 0, 0 }; int plen = P.length, slen = S.length; for (i = 0; i < plen; i++) { @@ -443,15 +454,16 @@ public class BCrypt { /** * Perform the "enhanced key schedule" step described by Provos and Mazieres in - * "A Future-Adaptable Password Scheme" http://www.openbsd.org/papers/bcrypt-paper.ps + * "A Future-Adaptable Password Scheme" + * http://www.openbsd.org/papers/bcrypt-paper.ps * * @param data salt information * @param key password information */ private void ekskey(byte data[], byte key[]) { int i; - int koffp[] = {0}, doffp[] = {0}; - int lr[] = {0, 0}; + int koffp[] = { 0 }, doffp[] = { 0 }; + int lr[] = { 0, 0 }; int plen = P.length, slen = S.length; for (i = 0; i < plen; i++) { @@ -487,7 +499,8 @@ public class BCrypt { * * @param password the password to hash * @param salt the binary salt to hash with the password - * @param log_rounds the binary logarithm of the number of rounds of hashing to apply + * @param log_rounds the binary logarithm of the number of rounds of hashing to + * apply * @return an array containing the binary hashed password */ private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { @@ -524,7 +537,8 @@ public class BCrypt { * Hash a password using the OpenBSD bcrypt scheme * * @param password the password to hash - * @param salt the salt to hash with (perhaps generated using BCrypt.gensalt) + * @param salt the salt to hash with (perhaps generated using + * BCrypt.gensalt) * @return the hashed password * @throws IllegalArgumentException if invalid salt is passed */ @@ -599,8 +613,10 @@ public class BCrypt { /** * Generate a salt for use with the BCrypt.hashpw() method * - * @param log_rounds the log2 of the number of rounds of hashing to apply - the work - * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @param log_rounds the log2 of the number of rounds of hashing to apply - the + * work + * factor therefore increases as 2**log_rounds. Minimum 4, + * maximum 31. * @param random an instance of SecureRandom to use * @return an encoded salt value */ @@ -626,8 +642,10 @@ public class BCrypt { /** * Generate a salt for use with the BCrypt.hashpw() method * - * @param log_rounds the log2 of the number of rounds of hashing to apply - the work - * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @param log_rounds the log2 of the number of rounds of hashing to apply - the + * work + * factor therefore increases as 2**log_rounds. Minimum 4, + * maximum 31. * @return an encoded salt value */ public static String gensalt(int log_rounds) { @@ -635,7 +653,8 @@ public class BCrypt { } /** - * Generate a salt for use with the BCrypt.hashpw() method, selecting a reasonable + * Generate a salt for use with the BCrypt.hashpw() method, selecting a + * reasonable * default for the number of hashing rounds to apply * * @return an encoded salt value diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java index 0d570a96..0da907f2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java @@ -1,15 +1,18 @@ package xiaozhi.modules.security.password; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import java.security.SecureRandom; import java.util.regex.Pattern; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** - * Implementation of PasswordEncoder that uses the BCrypt strong hashing function. Clients - * can optionally supply a "strength" (a.k.a. log rounds in BCrypt) and a SecureRandom - * instance. The larger the strength parameter the more work will have to be done + * Implementation of PasswordEncoder that uses the BCrypt strong hashing + * function. Clients + * can optionally supply a "strength" (a.k.a. log rounds in BCrypt) and a + * SecureRandom + * instance. The larger the strength parameter the more work will have to be + * done * (exponentially) to hash the passwords. The default value is 10. * * @author Dave Syer diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java index 40d1e95c..2de70cc2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java @@ -10,20 +10,23 @@ package xiaozhi.modules.security.password; public interface PasswordEncoder { /** - * Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 or + * Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 + * or * greater hash combined with an 8-byte or greater randomly generated salt. */ String encode(CharSequence rawPassword); /** * Verify the encoded password obtained from storage matches the submitted raw - * password after it too is encoded. Returns true if the passwords match, false if + * password after it too is encoded. Returns true if the passwords match, false + * if * they do not. The stored password itself is never decoded. * * @param rawPassword the raw password to encode and match * @param encodedPassword the encoded password from storage to compare with - * @return true if the raw password, after encoding, matches the encoded password from - * storage + * @return true if the raw password, after encoding, matches the encoded + * password from + * storage */ boolean matches(CharSequence rawPassword, String encodedPassword); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java index b0357010..9144b380 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java @@ -18,19 +18,17 @@ public class PasswordUtils { return passwordEncoder.encode(str); } - /** * 比较密码是否相等 * * @param str 明文密码 * @param password 加密后密码 - * @return true:成功 false:失败 + * @return true:成功 false:失败 */ public static boolean matches(String str, String password) { return passwordEncoder.matches(str, password); } - public static void main(String[] args) { String str = "admin"; String password = encode(str); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java index b91d5d9a..9e5c153f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java @@ -1,9 +1,9 @@ package xiaozhi.modules.security.service; -import jakarta.servlet.http.HttpServletResponse; - import java.io.IOException; +import jakarta.servlet.http.HttpServletResponse; + /** * 验证码 * Copyright (c) 人人开源 All rights reserved. @@ -21,7 +21,7 @@ public interface CaptchaService { * * @param uuid uuid * @param code 验证码 - * @return true:成功 false:失败 + * @return true:成功 false:失败 */ boolean validate(String uuid, String code); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java index 761ad139..012b4d3e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java @@ -1,23 +1,22 @@ package xiaozhi.modules.security.service.impl; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.wf.captcha.SpecCaptcha; import com.wf.captcha.base.Captcha; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import xiaozhi.common.redis.RedisKeys; -import xiaozhi.common.redis.RedisUtils; -import xiaozhi.modules.security.oauth2.Oauth2Realm; -import xiaozhi.modules.security.service.CaptchaService; + import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; +import xiaozhi.modules.security.service.CaptchaService; /** * 验证码 @@ -29,10 +28,10 @@ public class CaptchaServiceImpl implements CaptchaService { @Value("${renren.redis.open}") private boolean open; /** - * Local Cache 5分钟过期 + * Local Cache 5分钟过期 */ - Cache localCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(5, TimeUnit.MINUTES).build(); - private static final Logger logger = LoggerFactory.getLogger(Oauth2Realm.class); + Cache localCache = CacheBuilder.newBuilder().maximumSize(1000) + .expireAfterAccess(5, TimeUnit.MINUTES).build(); @Override public void create(HttpServletResponse response, String uuid) throws IOException { @@ -41,13 +40,13 @@ public class CaptchaServiceImpl implements CaptchaService { response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); - //生成验证码 + // 生成验证码 SpecCaptcha captcha = new SpecCaptcha(150, 40); captcha.setLen(5); captcha.setCharType(Captcha.TYPE_DEFAULT); captcha.out(response.getOutputStream()); - //保存到缓存 + // 保存到缓存 setCache(uuid, captcha.text()); } @@ -56,10 +55,10 @@ public class CaptchaServiceImpl implements CaptchaService { if (StringUtils.isBlank(code)) { return false; } - //获取验证码 + // 获取验证码 String captcha = getCache(uuid); - //效验成功 + // 效验成功 if (code.equalsIgnoreCase(captcha)) { return true; } @@ -80,7 +79,7 @@ public class CaptchaServiceImpl implements CaptchaService { if (open) { key = RedisKeys.getCaptchaKey(key); String captcha = (String) redisUtils.get(key); - //删除验证码 + // 删除验证码 if (captcha != null) { redisUtils.delete(key); } @@ -89,7 +88,7 @@ public class CaptchaServiceImpl implements CaptchaService { } String captcha = localCache.getIfPresent(key); - //删除验证码 + // 删除验证码 if (captcha != null) { localCache.invalidate(key); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java index 97d16eaa..27c20970 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java @@ -1,17 +1,13 @@ package xiaozhi.modules.security.service.impl; -import xiaozhi.common.user.UserDetail; +import org.springframework.stereotype.Service; + +import lombok.AllArgsConstructor; import xiaozhi.modules.security.dao.SysUserTokenDao; import xiaozhi.modules.security.entity.SysUserTokenEntity; import xiaozhi.modules.security.service.ShiroService; import xiaozhi.modules.sys.dao.SysUserDao; import xiaozhi.modules.sys.entity.SysUserEntity; -import xiaozhi.modules.sys.enums.SuperAdminEnum; -import lombok.AllArgsConstructor; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import java.util.*; @AllArgsConstructor @Service @@ -19,7 +15,6 @@ public class ShiroServiceImpl implements ShiroService { private final SysUserDao sysUserDao; private final SysUserTokenDao sysUserTokenDao; - @Override public SysUserTokenEntity getByToken(String token) { return sysUserTokenDao.getByToken(token); diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java index 40ee7957..7f0d311a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java @@ -1,8 +1,11 @@ package xiaozhi.modules.security.service.impl; +import java.util.Date; + +import org.springframework.stereotype.Service; + import cn.hutool.core.date.DateUtil; import lombok.AllArgsConstructor; -import org.springframework.stereotype.Service; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; import xiaozhi.common.page.TokenDTO; @@ -17,11 +20,10 @@ import xiaozhi.modules.sys.dto.PasswordDTO; import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.service.SysUserService; -import java.util.Date; - @AllArgsConstructor @Service -public class SysUserTokenServiceImpl extends BaseServiceImpl implements SysUserTokenService { +public class SysUserTokenServiceImpl extends BaseServiceImpl + implements SysUserTokenService { private final SysUserService sysUserService; /** @@ -31,18 +33,18 @@ public class SysUserTokenServiceImpl extends BaseServiceImpl createToken(Long userId) { - //用户token + // 用户token String token; - //当前时间 + // 当前时间 Date now = new Date(); - //过期时间 + // 过期时间 Date expireTime = new Date(now.getTime() + EXPIRE * 1000); - //判断是否生成过token + // 判断是否生成过token SysUserTokenEntity tokenEntity = baseDao.getByUserId(userId); if (tokenEntity == null) { - //生成一个token + // 生成一个token token = TokenGenerator.generateValue(); tokenEntity = new SysUserTokenEntity(); @@ -51,12 +53,12 @@ public class SysUserTokenServiceImpl extends BaseServiceImpl().ok(tokenDTO); } @Override diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java b/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java index cfa0fbf7..0581f95c 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java @@ -1,9 +1,10 @@ package xiaozhi.modules.security.user; -import xiaozhi.common.user.UserDetail; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; +import xiaozhi.common.user.UserDetail; + /** * Shiro工具类 * Copyright (c) 人人开源 All rights reserved. diff --git a/main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java similarity index 77% rename from main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java rename to main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java index ee46f2eb..535fb548 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/AdminController.java @@ -1,13 +1,21 @@ -package xiaozhi.modules.admin.contrloler; +package xiaozhi.modules.sys.controller; +import java.util.Map; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.web.bind.annotation.*; import xiaozhi.common.constant.Constant; import xiaozhi.common.page.PageData; import xiaozhi.common.utils.Result; @@ -16,8 +24,6 @@ import xiaozhi.modules.sys.dto.AdminPageUserDTO; import xiaozhi.modules.sys.service.SysUserService; import xiaozhi.modules.sys.vo.AdminPageUserVO; -import java.util.Map; - /** * 管理员控制层 * @@ -35,7 +41,7 @@ public class AdminController { @Operation(summary = "分页查找用户") @RequiresPermissions("sys:role:superAdmin") @Parameters({ - @Parameter(name = "mobile", description = "用户手机号码", required = true), + @Parameter(name = "mobile", description = "用户手机号码", required = false), @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), }) @@ -44,7 +50,7 @@ public class AdminController { AdminPageUserDTO dto = new AdminPageUserDTO(); dto.setMobile((String) params.get("mobile")); dto.setLimit((String) params.get(Constant.LIMIT)); - dto.setPage((String) params.get("pages")); + dto.setPage((String) params.get(Constant.PAGE)); ValidatorUtils.validateEntity(dto); PageData page = sysUserService.page(dto); @@ -64,7 +70,7 @@ public class AdminController { @Operation(summary = "用户删除") @RequiresPermissions("sys:role:superAdmin") public Result delete(@PathVariable Long id) { - sysUserService.delete(new Long[]{id}); + sysUserService.delete(new Long[] { id }); return new Result<>(); } @@ -72,13 +78,13 @@ public class AdminController { @Operation(summary = "分页查找设备") @RequiresPermissions("sys:role:superAdmin") @Parameters({ - @Parameter(name = "keywords", description = "用户手机号码", required = true), + @Parameter(name = "keywords", description = "设备关键词", required = false), @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), }) public Result pageDevice( @Parameter(hidden = true) @RequestParam Map params) { - //TODO 等设备功能模块写好 - return new Result().error(600,"等设备功能模块写好"); + // TODO 等设备功能模块写好 + return new Result().error(600, "等设备功能模块写好"); } } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java deleted file mode 100644 index 9da7c62b..00000000 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java +++ /dev/null @@ -1,17 +0,0 @@ -package xiaozhi.modules.sys.controller; - -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 用户管理 - */ -@AllArgsConstructor -@RestController -@RequestMapping("/sys/user") -@Tag(name = "用户管理") -public class SysUserController { - -} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java index 08aaca5b..9dd124fe 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java @@ -1,12 +1,13 @@ package xiaozhi.modules.sys.dao; +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.sys.dto.SysDictDataDTO; import xiaozhi.modules.sys.entity.DictData; import xiaozhi.modules.sys.entity.SysDictDataEntity; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; /** * 字典数据 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java index bca8e789..5a9d5a27 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java @@ -1,11 +1,12 @@ package xiaozhi.modules.sys.dao; +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.sys.entity.DictType; import xiaozhi.modules.sys.entity.SysDictTypeEntity; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; /** * 字典类型 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java index 0c967a74..d35d1445 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java @@ -1,11 +1,12 @@ package xiaozhi.modules.sys.dao; -import xiaozhi.common.dao.BaseDao; -import xiaozhi.modules.sys.entity.SysParamsEntity; +import java.util.List; + import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import java.util.List; +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.sys.entity.SysParamsEntity; /** * 参数管理 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java index 339e522a..fb2a2492 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java @@ -1,6 +1,7 @@ package xiaozhi.modules.sys.dao; import org.apache.ibatis.annotations.Mapper; + import xiaozhi.common.dao.BaseDao; import xiaozhi.modules.sys.entity.SysUserEntity; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java index 8c0ab77c..7de3843a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java @@ -1,11 +1,11 @@ package xiaozhi.modules.sys.dto; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; import lombok.Data; /** * 管理员分页用户的参数DTO + * * @author zjy * @since 2025-3-21 */ @@ -13,7 +13,6 @@ import lombok.Data; @Schema(description = "音色分页参数") public class AdminPageUserDTO { - @Schema(description = "手机号码") private String mobile; diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java index 1ecadc68..4aabb10e 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java @@ -1,11 +1,11 @@ package xiaozhi.modules.sys.dto; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import lombok.Data; -import java.io.Serializable; - /** * 修改密码 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java index 172e6b1f..c18dbf8f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java @@ -1,20 +1,21 @@ package xiaozhi.modules.sys.dto; +import java.io.Serializable; +import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; -import xiaozhi.common.utils.DateUtils; -import xiaozhi.common.validator.group.AddGroup; -import xiaozhi.common.validator.group.DefaultGroup; -import xiaozhi.common.validator.group.UpdateGroup; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; - -import java.io.Serializable; -import java.util.Date; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; /** * 字典数据 @@ -23,7 +24,6 @@ import java.util.Date; @Schema(description = "字典数据") public class SysDictDataDTO implements Serializable { - @Schema(description = "id") @Null(message = "{id.null}", groups = AddGroup.class) @NotNull(message = "{id.require}", groups = UpdateGroup.class) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java index 72648109..01d69795 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java @@ -1,20 +1,21 @@ package xiaozhi.modules.sys.dto; +import java.io.Serializable; +import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; -import xiaozhi.common.utils.DateUtils; -import xiaozhi.common.validator.group.AddGroup; -import xiaozhi.common.validator.group.DefaultGroup; -import xiaozhi.common.validator.group.UpdateGroup; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; - -import java.io.Serializable; -import java.util.Date; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; /** * 字典类型 @@ -23,7 +24,6 @@ import java.util.Date; @Schema(description = "字典类型") public class SysDictTypeDTO implements Serializable { - @Schema(description = "id") @Null(message = "{id.null}", groups = AddGroup.class) @NotNull(message = "{id.require}", groups = UpdateGroup.class) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java index 4b72ce34..7b4dd28d 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java @@ -1,19 +1,20 @@ package xiaozhi.modules.sys.dto; +import java.io.Serializable; +import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; -import xiaozhi.common.utils.DateUtils; -import xiaozhi.common.validator.group.AddGroup; -import xiaozhi.common.validator.group.DefaultGroup; -import xiaozhi.common.validator.group.UpdateGroup; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; - -import java.io.Serializable; -import java.util.Date; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; /** * 参数管理 @@ -22,7 +23,6 @@ import java.util.Date; @Schema(description = "参数管理") public class SysParamsDTO implements Serializable { - @Schema(description = "id") @Null(message = "{id.null}", groups = AddGroup.class) @NotNull(message = "{id.require}", groups = UpdateGroup.class) diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java index 00f7fc78..ff066341 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java @@ -1,22 +1,24 @@ package xiaozhi.modules.sys.dto; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import org.hibernate.validator.constraints.Range; + import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; -import xiaozhi.common.utils.DateUtils; -import xiaozhi.common.validator.group.AddGroup; -import xiaozhi.common.validator.group.DefaultGroup; -import xiaozhi.common.validator.group.UpdateGroup; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Null; import lombok.Data; -import org.hibernate.validator.constraints.Range; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; /** * 用户管理 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java index 1e16a192..c8deac81 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java @@ -1,6 +1,7 @@ package xiaozhi.modules.sys.entity; import com.fasterxml.jackson.annotation.JsonIgnore; + import lombok.Data; /** diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java index 3cf94606..4a1e2ca5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java @@ -1,11 +1,12 @@ package xiaozhi.modules.sys.entity; -import com.fasterxml.jackson.annotation.JsonIgnore; -import lombok.Data; - import java.util.ArrayList; import java.util.List; +import com.fasterxml.jackson.annotation.JsonIgnore; + +import lombok.Data; + /** * 字典类型 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java index 4bfa4b62..16d3dcae 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java @@ -1,13 +1,14 @@ package xiaozhi.modules.sys.entity; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import xiaozhi.common.entity.BaseEntity; + import lombok.Data; import lombok.EqualsAndHashCode; - -import java.util.Date; +import xiaozhi.common.entity.BaseEntity; /** * 数据字典 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java index ea752c63..fa372055 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java @@ -1,13 +1,14 @@ package xiaozhi.modules.sys.entity; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import xiaozhi.common.entity.BaseEntity; + import lombok.Data; import lombok.EqualsAndHashCode; - -import java.util.Date; +import xiaozhi.common.entity.BaseEntity; /** * 字典类型 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java index 054e51d7..989800e2 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java @@ -1,13 +1,14 @@ package xiaozhi.modules.sys.entity; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import xiaozhi.common.entity.BaseEntity; + import lombok.Data; import lombok.EqualsAndHashCode; - -import java.util.Date; +import xiaozhi.common.entity.BaseEntity; /** * 参数管理 @@ -25,7 +26,7 @@ public class SysParamsEntity extends BaseEntity { */ private String paramValue; /** - * 类型 0:系统参数 1:非系统参数 + * 类型 0:系统参数 1:非系统参数 */ private Integer paramType; /** diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java index 0093fcf0..23043a37 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java @@ -1,14 +1,15 @@ package xiaozhi.modules.sys.entity; +import java.util.Date; + import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; + import lombok.Data; import lombok.EqualsAndHashCode; import xiaozhi.common.entity.BaseEntity; -import java.util.Date; - /** * 系统用户 */ @@ -25,11 +26,11 @@ public class SysUserEntity extends BaseEntity { */ private String password; /** - * 超级管理员 0:否 1:是 + * 超级管理员 0:否 1:是 */ private Integer superAdmin; /** - * 状态 0:停用 1:正常 + * 状态 0:停用 1:正常 */ private Integer status; /** diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java index dcc14f69..2e2bdb42 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java @@ -1,9 +1,10 @@ package xiaozhi.modules.sys.redis; +import org.springframework.stereotype.Component; + +import lombok.AllArgsConstructor; import xiaozhi.common.redis.RedisKeys; import xiaozhi.common.redis.RedisUtils; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Component; /** * 参数管理 diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java index 77be8b3a..a33df029 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java @@ -1,12 +1,12 @@ package xiaozhi.modules.sys.service; +import java.util.Map; + import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.SysDictDataDTO; import xiaozhi.modules.sys.entity.SysDictDataEntity; -import java.util.Map; - /** * 数据字典 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java index 8924f6ca..a18e086f 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java @@ -1,14 +1,14 @@ package xiaozhi.modules.sys.service; +import java.util.List; +import java.util.Map; + import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.SysDictTypeDTO; import xiaozhi.modules.sys.entity.DictType; import xiaozhi.modules.sys.entity.SysDictTypeEntity; -import java.util.List; -import java.util.Map; - /** * 数据字典 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java index d13e41ba..7475f346 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java @@ -1,14 +1,13 @@ package xiaozhi.modules.sys.service; +import java.util.List; +import java.util.Map; import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.sys.dto.SysParamsDTO; import xiaozhi.modules.sys.entity.SysParamsEntity; -import java.util.List; -import java.util.Map; - /** * 参数管理 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index f8f609dc..261fbf96 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -8,7 +8,6 @@ import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.vo.AdminPageUserVO; - /** * 系统用户 */ @@ -24,26 +23,31 @@ public interface SysUserService extends BaseService { /** * 验证是否允许修改密码更改 - * @param userId 用户id + * + * @param userId 用户id * @param passwordDTO 验证密码的参数 */ void changePassword(Long userId, PasswordDTO passwordDTO); /** * 直接修改密码,不需要验证 - * @param userId 用户id + * + * @param userId 用户id * @param password 密码 */ void changePasswordDirectly(Long userId, String password); /** * 重置密码 + * * @param userId 用户id * @return 随机生成符合规范的密码 */ String resetPassword(Long userId); + /** * 管理员分页用户信息 + * * @param dto 分页查找参数 * @return 用户列表分页数据 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java index a8420dc9..20530e6b 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -1,10 +1,15 @@ package xiaozhi.modules.sys.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.Arrays; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; @@ -13,21 +18,18 @@ import xiaozhi.modules.sys.dto.SysDictDataDTO; import xiaozhi.modules.sys.entity.SysDictDataEntity; import xiaozhi.modules.sys.service.SysDictDataService; -import java.util.Arrays; -import java.util.Map; - /** * 字典类型 */ @Service -public class SysDictDataServiceImpl extends BaseServiceImpl implements SysDictDataService { +public class SysDictDataServiceImpl extends BaseServiceImpl + implements SysDictDataService { @Override public PageData page(Map params) { IPage page = baseDao.selectPage( getPage(params, "sort", true), - getWrapper(params) - ); + getWrapper(params)); return getPageData(page, SysDictDataDTO.class); } @@ -71,7 +73,7 @@ public class SysDictDataServiceImpl extends BaseServiceImpl implements SysDictTypeService { +public class SysDictTypeServiceImpl extends BaseServiceImpl + implements SysDictTypeService { private final SysDictDataDao sysDictDataDao; @Override public PageData page(Map params) { IPage page = baseDao.selectPage( getPage(params, "sort", true), - getWrapper(params) - ); + getWrapper(params)); return getPageData(page, SysDictTypeDTO.class); } @@ -76,7 +78,7 @@ public class SysDictTypeServiceImpl extends BaseServiceImpl page(Map params) { IPage page = baseDao.selectPage( getPage(params, Constant.CREATE_DATE, false), - getWrapper(params) - ); + getWrapper(params)); return getPageData(page, SysParamsDTO.class); } @@ -86,12 +87,12 @@ public class SysParamsServiceImpl extends BaseServiceImpl paramCodeList = baseDao.getParamCodeList(ids); String[] paramCodes = paramCodeList.toArray(new String[paramCodeList.size()]); sysParamsRedis.delete(paramCodes); - //删除 + // 删除 deleteBatchIds(Arrays.asList(ids)); } @@ -114,7 +115,7 @@ public class SysParamsServiceImpl extends BaseServiceImpl page(AdminPageUserDTO dto) { Map params = new HashMap(); params.put(Constant.PAGE, dto.getPage()); - params.put(Constant.LIMIT,dto.getLimit()); + params.put(Constant.LIMIT, dto.getLimit()); IPage page = baseDao.selectPage( getPage(params, "id", true), - //定义查询条件 + // 定义查询条件 new QueryWrapper() - //必须按照手机号码查找 - .eq(StringUtils.isNotBlank(dto.getMobile()),"username",dto.getMobile())); + // 必须按照手机号码查找 + .eq(StringUtils.isNotBlank(dto.getMobile()), "username", dto.getMobile())); List list = page.getRecords().stream().map(user -> { AdminPageUserVO adminPageUserVO = new AdminPageUserVO(); adminPageUserVO.setUserid(user.getId().toString()); adminPageUserVO.setMobile(user.getUsername()); - //TODO 2. 等设备功能写好,获取对应数据 + // TODO 2. 等设备功能写好,获取对应数据 adminPageUserVO.setDeviceCount("0"); return adminPageUserVO; }).toList(); @@ -169,11 +173,13 @@ public class SysUserServiceImpl extends BaseServiceImpl update( - @PathVariable Long id, + @PathVariable String id, @RequestBody TimbreDataDTO dto) { ValidatorUtils.validateEntity(dto); timbreService.update(id, dto); @@ -76,10 +85,9 @@ public class TimbreController { @DeleteMapping("/{id}") @Operation(summary = "音色删除") @RequiresPermissions("sys:role:superAdmin") - public Result delete(@PathVariable Long id) { - timbreService.delete(new Long[]{id}); + public Result delete(@PathVariable String id) { + timbreService.delete(new String[] { id }); return new Result<>(); } - } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dao/TimbreDao.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dao/TimbreDao.java index 62afa358..3656b4ea 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dao/TimbreDao.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dao/TimbreDao.java @@ -1,11 +1,14 @@ package xiaozhi.modules.timbre.dao; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + import xiaozhi.modules.timbre.entity.TimbreEntity; /** * 音色持久层定义 + * * @author zjy * @since 2025-3-21 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbreDataDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbreDataDTO.java index 08ed9b18..ed737db9 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbreDataDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbreDataDTO.java @@ -5,9 +5,9 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import lombok.Data; - /** * 音色表数据DTO + * * @author zjy * @since 2025-3-21 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbrePageDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbrePageDTO.java index 72ed68b1..9c2aaf24 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbrePageDTO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/dto/TimbrePageDTO.java @@ -6,6 +6,7 @@ import lombok.Data; /** * 音色分页参数DTO + * * @author zjy * @since 2025-3-21 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/entity/TimbreEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/entity/TimbreEntity.java index 71bd58a9..3d6e5ba1 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/entity/TimbreEntity.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/entity/TimbreEntity.java @@ -1,15 +1,18 @@ package xiaozhi.modules.timbre.entity; -import com.baomidou.mybatisplus.annotation.TableName; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import xiaozhi.common.entity.BaseEntity; - import java.util.Date; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + /** * 音色表实体类 + * * @author zjy * @since 2025-3-21 */ @@ -17,7 +20,10 @@ import java.util.Date; @EqualsAndHashCode(callSuper = false) @TableName("ai_tts_voice") @Schema(description = "音色信息") -public class TimbreEntity extends BaseEntity { +public class TimbreEntity { + + @Schema(description = "id") + private String id; @Schema(description = "语言") private String languages; @@ -41,8 +47,19 @@ public class TimbreEntity extends BaseEntity { private String voiceDemo; @Schema(description = "更新者") + @TableField(fill = FieldFill.UPDATE) private Long updater; @Schema(description = "更新时间") + @TableField(fill = FieldFill.UPDATE) private Date updateDate; + + @Schema(description = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long creator; + + @Schema(description = "创建时间") + @TableField(fill = FieldFill.INSERT) + private Date createDate; + } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/TimbreService.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/TimbreService.java index 044322e5..4519e17a 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/TimbreService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/TimbreService.java @@ -1,5 +1,7 @@ package xiaozhi.modules.timbre.service; +import java.util.List; + import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; import xiaozhi.modules.timbre.dto.TimbreDataDTO; @@ -7,17 +9,16 @@ import xiaozhi.modules.timbre.dto.TimbrePageDTO; import xiaozhi.modules.timbre.entity.TimbreEntity; import xiaozhi.modules.timbre.vo.TimbreDetailsVO; -import java.util.List; - - /** * 音色的业务层的定义 + * * @author zjy * @since 2025-3-21 */ public interface TimbreService extends BaseService { /** * 分页获取音色指定tts的下的音色 + * * @param dto 分页查找参数 * @return 音色列表分页数据 */ @@ -25,6 +26,7 @@ public interface TimbreService extends BaseService { /** * 获取音色指定id的详情信息 + * * @param timbreId 音色表id * @return 音色信息 */ @@ -32,22 +34,25 @@ public interface TimbreService extends BaseService { /** * 保存音色信息 + * * @param dto 需要保存数据 */ void save(TimbreDataDTO dto); /** * 保存音色信息 + * * @param timbreId 需要修改的id - * @param dto 需要修改的数据 + * @param dto 需要修改的数据 */ - void update(Long timbreId,TimbreDataDTO dto); + void update(String timbreId, TimbreDataDTO dto); /** * 批量删除音色 + * * @param ids 需要被删除的音色id列表 */ - void delete(Long[] ids); + void delete(String[] ids); List getVoiceNames(String ttsModelId, String voiceName); } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/impl/TimbreServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/impl/TimbreServiceImpl.java index fa2731bd..9496b6d5 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/impl/TimbreServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/service/impl/TimbreServiceImpl.java @@ -1,12 +1,19 @@ package xiaozhi.modules.timbre.service.impl; -import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import lombok.AllArgsConstructor; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; + +import cn.hutool.core.collection.CollectionUtil; +import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; @@ -18,13 +25,9 @@ import xiaozhi.modules.timbre.entity.TimbreEntity; import xiaozhi.modules.timbre.service.TimbreService; import xiaozhi.modules.timbre.vo.TimbreDetailsVO; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - /** * 音色的业务层的实现 + * * @author zjy * @since 2025-3-21 */ @@ -38,16 +41,15 @@ public class TimbreServiceImpl extends BaseServiceImpl public PageData page(TimbrePageDTO dto) { Map params = new HashMap(); params.put(Constant.PAGE, dto.getPage()); - params.put(Constant.LIMIT,dto.getLimit()); + params.put(Constant.LIMIT, dto.getLimit()); IPage page = baseDao.selectPage( getPage(params, "sort", true), - //定义查询条件 + // 定义查询条件 new QueryWrapper() - //必须按照ttsID查找 - .eq("tts_model_id",dto.getTtsModelId()) - //如果有音色名字,按照音色名模糊查找 - .like(StringUtils.isNotBlank(dto.getName()),"name",dto.getName()) - ); + // 必须按照ttsID查找 + .eq("tts_model_id", dto.getTtsModelId()) + // 如果有音色名字,按照音色名模糊查找 + .like(StringUtils.isNotBlank(dto.getName()), "name", dto.getName())); return getPageData(page, TimbreDetailsVO.class); } @@ -68,7 +70,7 @@ public class TimbreServiceImpl extends BaseServiceImpl @Override @Transactional(rollbackFor = Exception.class) - public void update(Long timbreId, TimbreDataDTO dto) { + public void update(String timbreId, TimbreDataDTO dto) { isTtsModelId(dto.getTtsModelId()); TimbreEntity timbreEntity = ConvertUtils.sourceToTarget(dto, TimbreEntity.class); timbreEntity.setId(timbreId); @@ -77,14 +79,14 @@ public class TimbreServiceImpl extends BaseServiceImpl @Override @Transactional(rollbackFor = Exception.class) - public void delete(Long[] ids) { + public void delete(String[] ids) { baseDao.deleteBatchIds(Arrays.asList(ids)); } @Override public List getVoiceNames(String ttsModelId, String voiceName) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("ttsModelId", StringUtils.isBlank(ttsModelId) ? "" : ttsModelId); + queryWrapper.eq("tts_model_id", StringUtils.isBlank(ttsModelId) ? "" : ttsModelId); if (StringUtils.isNotBlank(voiceName)) { queryWrapper.like("name", voiceName); } @@ -99,7 +101,7 @@ public class TimbreServiceImpl extends BaseServiceImpl /** * 处理是不是tts模型的id */ - private void isTtsModelId(String ttsModelId){ - //等模型配置那边写好调用方法判断 + private void isTtsModelId(String ttsModelId) { + // 等模型配置那边写好调用方法判断 } } \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/timbre/vo/TimbreDetailsVO.java b/main/manager-api/src/main/java/xiaozhi/modules/timbre/vo/TimbreDetailsVO.java index fc82a5d0..68cc7bbb 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/timbre/vo/TimbreDetailsVO.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/timbre/vo/TimbreDetailsVO.java @@ -1,12 +1,13 @@ package xiaozhi.modules.timbre.vo; +import java.io.Serializable; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.io.Serializable; - /** * 音色详情展示VO + * * @author zjy * @since 2025-3-21 */ diff --git a/main/manager-api/src/main/resources/application-dev.yml b/main/manager-api/src/main/resources/application-dev.yml index a8fdf21f..e1671b50 100644 --- a/main/manager-api/src/main/resources/application-dev.yml +++ b/main/manager-api/src/main/resources/application-dev.yml @@ -7,15 +7,12 @@ knife4j: password: 2ZABCDEUgF setting: enableFooter: false -jasypt: - encryptor: - password: P9Hx718z8L spring: datasource: druid: #MySQL driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/xiaozhi_esp32_server?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3306/xiaozhi_esp32_server?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true username: root password: 123456 initial-size: 10 @@ -41,4 +38,17 @@ spring: merge-sql: false wall: config: - multi-statement-allow: true \ No newline at end of file + multi-statement-allow: true + data: + redis: + host: 127.0.0.1 # Redis服务器地址 + port: 6379 # Redis服务器连接端口 + password: # Redis服务器连接密码(默认为空) + database: 0 # Redis数据库索引(默认为0) + timeout: 10000ms # 连接超时时间(毫秒) + lettuce: + pool: + max-active: 8 # 连接池最大连接数(使用负值表示没有限制) + max-idle: 8 # 连接池中的最大空闲连接 + min-idle: 0 # 连接池中的最小空闲连接 + shutdown-timeout: 100ms # 客户端优雅关闭的等待时间 \ No newline at end of file diff --git a/main/manager-api/src/main/resources/application.yml b/main/manager-api/src/main/resources/application.yml index 03f6a044..902b5198 100644 --- a/main/manager-api/src/main/resources/application.yml +++ b/main/manager-api/src/main/resources/application.yml @@ -24,21 +24,9 @@ spring: max-file-size: 100MB max-request-size: 100MB enabled: true - data: - redis: - database: 0 - host: 127.0.0.1 - port: 6379 - password: # 密码(默认为空) - timeout: 6000ms # 连接超时时长(毫秒) - lettuce: - pool: - max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) - max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) - max-idle: 10 # 连接池中的最大空闲连接 - min-idle: 5 # 连接池中的最小空闲连接 main: allow-bean-definition-overriding: true + knife4j: enable: true basic: @@ -50,7 +38,7 @@ knife4j: renren: redis: - open: false + open: true xss: enabled: true exclude-urls: @@ -75,4 +63,7 @@ mybatis-plus: configuration-properties: prefix: blobType: BLOB - boolValue: TRUE \ No newline at end of file + boolValue: TRUE + +app: + fronted-url: http://localhost:8001 \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/2025_model_config.sql b/main/manager-api/src/main/resources/db/changelog/2025_model_config.sql new file mode 100644 index 00000000..3964016e --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/2025_model_config.sql @@ -0,0 +1,53 @@ +-- 本文件用于初始化模型配置数据,无需手动执行,在项目启动时会自动执行 +-- ------------------------------------------------------- +-- 初始化模型配置数据 +DELETE FROM `ai_model_config`; + +-- VAD模型配置 +INSERT INTO `ai_model_config` VALUES ('VAD_SileroVAD', 'VAD', 'SileroVAD', '语音活动检测', 1, 1, '{\"model_dir\": \"models/snakers4_silero-vad\", \"threshold\": 0.5, \"min_silence_duration_ms\": 700}', NULL, NULL, 0, NULL, NULL, NULL, NULL); + +-- ASR模型配置 +INSERT INTO `ai_model_config` VALUES ('ASR_FunASR', 'ASR', 'FunASR', 'FunASR语音识别', 1, 1, '{\"model_dir\": \"models/SenseVoiceSmall\", \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('ASR_SherpaASR', 'ASR', 'SherpaASR', 'Sherpa语音识别', 1, 0, '{\"model_dir\": \"models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17\", \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('ASR_DoubaoASR', 'ASR', 'DoubaoASR', '豆包语音识别', 1, 0, '{\"appid\": \"\", \"access_token\": \"\", \"cluster\": \"volcengine_input_common\", \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); + +-- LLM模型配置 +INSERT INTO `ai_model_config` VALUES ('LLM_AliLLM', 'LLM', 'AliLLM', '通义千问', 1, 0, '{\"type\": \"openai\", \"base_url\": \"https://dashscope.aliyuncs.com/compatible-mode/v1\", \"model_name\": \"qwen-turbo\", \"api_key\": \"\", \"temperature\": 0.7, \"max_tokens\": 500, \"top_p\": 1, \"top_k\": 50, \"frequency_penalty\": 0}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_AliAppLLM', 'LLM', 'AliAppLLM', '通义百炼', 1, 0, '{\"type\": \"AliBL\", \"base_url\": \"https://dashscope.aliyuncs.com/compatible-mode/v1\", \"app_id\": \"\", \"api_key\": \"\", \"is_no_prompt\": true, \"ali_memory_id\": false}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_DoubaoLLM', 'LLM', 'DoubaoLLM', '豆包大模型', 1, 0, '{\"type\": \"openai\", \"base_url\": \"https://ark.cn-beijing.volces.com/api/v3\", \"model_name\": \"doubao-pro-32k-functioncall-241028\", \"api_key\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_DeepSeekLLM', 'LLM', 'DeepSeekLLM', 'DeepSeek', 1, 0, '{\"type\": \"openai\", \"model_name\": \"deepseek-chat\", \"url\": \"https://api.deepseek.com\", \"api_key\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_ChatGLMLLM', 'LLM', 'ChatGLMLLM', '智谱AI', 1, 1, '{\"type\": \"openai\", \"model_name\": \"glm-4-flash\", \"url\": \"https://open.bigmodel.cn/api/paas/v4/\", \"api_key\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_OllamaLLM', 'LLM', 'OllamaLLM', 'Ollama本地模型', 1, 0, '{\"type\": \"ollama\", \"model_name\": \"qwen2.5\", \"base_url\": \"http://localhost:11434\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_DifyLLM', 'LLM', 'DifyLLM', 'Dify', 1, 0, '{\"type\": \"dify\", \"base_url\": \"https://api.dify.ai/v1\", \"api_key\": \"\", \"mode\": \"chat-messages\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_GeminiLLM', 'LLM', 'GeminiLLM', '谷歌Gemini', 1, 0, '{\"type\": \"gemini\", \"api_key\": \"\", \"model_name\": \"gemini-2.0-flash\", \"http_proxy\": \"\", \"https_proxy\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_CozeLLM', 'LLM', 'CozeLLM', 'Coze', 1, 0, '{\"type\": \"coze\", \"bot_id\": \"\", \"user_id\": \"\", \"personal_access_token\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_LMStudioLLM', 'LLM', 'LMStudioLLM', 'LM Studio', 1, 0, '{\"type\": \"openai\", \"model_name\": \"deepseek-r1-distill-llama-8b@q4_k_m\", \"url\": \"http://localhost:1234/v1\", \"api_key\": \"lm-studio\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_FastgptLLM', 'LLM', 'FastgptLLM', 'FastGPT', 1, 0, '{\"type\": \"fastgpt\", \"base_url\": \"https://host/api/v1\", \"api_key\": \"fastgpt-xxx\", \"variables\": {\"k\": \"v\", \"k2\": \"v2\"}}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_XinferenceLLM', 'LLM', 'XinferenceLLM', 'Xinference大模型', 1, 0, '{\"type\": \"xinference\", \"model_name\": \"qwen2.5:72b-AWQ\", \"base_url\": \"http://localhost:9997\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('LLM_XinferenceSmallLLM', 'LLM', 'XinferenceSmallLLM', 'Xinference小模型', 1, 0, '{\"type\": \"xinference\", \"model_name\": \"qwen2.5:3b-AWQ\", \"base_url\": \"http://localhost:9997\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); + +-- TTS模型配置 +INSERT INTO `ai_model_config` VALUES ('TTS_EdgeTTS', 'TTS', 'EdgeTTS', 'Edge语音合成', 1, 1, '{\"type\": \"edge\", \"voice\": \"zh-CN-XiaoxiaoNeural\", \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_DoubaoTTS', 'TTS', 'DoubaoTTS', '豆包语音合成', 1, 0, '{\"type\": \"doubao\", \"api_url\": \"https://openspeech.bytedance.com/api/v1/tts\", \"voice\": \"BV001_streaming\", \"output_dir\": \"tmp/\", \"authorization\": \"Bearer;\", \"appid\": \"\", \"access_token\": \"\", \"cluster\": \"volcano_tts\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_CosyVoiceSiliconflow', 'TTS', 'CosyVoiceSiliconflow', '硅基流动语音合成', 1, 0, '{\"type\": \"siliconflow\", \"model\": \"FunAudioLLM/CosyVoice2-0.5B\", \"voice\": \"FunAudioLLM/CosyVoice2-0.5B:alex\", \"output_dir\": \"tmp/\", \"access_token\": \"\", \"response_format\": \"wav\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_CozeCnTTS', 'TTS', 'CozeCnTTS', 'Coze中文语音合成', 1, 0, '{\"type\": \"cozecn\", \"voice\": \"7426720361733046281\", \"output_dir\": \"tmp/\", \"access_token\": \"\", \"response_format\": \"wav\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_FishSpeech', 'TTS', 'FishSpeech', 'FishSpeech语音合成', 1, 0, '{\"type\": \"fishspeech\", \"output_dir\": \"tmp/\", \"response_format\": \"wav\", \"reference_id\": null, \"reference_audio\": [\"/tmp/test.wav\"], \"reference_text\": [\"你弄来这些吟词宴曲来看,还是这些混话来欺负我。\"], \"normalize\": true, \"max_new_tokens\": 1024, \"chunk_length\": 200, \"top_p\": 0.7, \"repetition_penalty\": 1.2, \"temperature\": 0.7, \"streaming\": false, \"use_memory_cache\": \"on\", \"seed\": null, \"channels\": 1, \"rate\": 44100, \"api_key\": \"\", \"api_url\": \"http://127.0.0.1:8080/v1/tts\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_GPT_SOVITS_V2', 'TTS', 'GPT_SOVITS_V2', 'GPT-SoVITS V2', 1, 0, '{\"type\": \"gpt_sovits_v2\", \"url\": \"http://127.0.0.1:9880/tts\", \"output_dir\": \"tmp/\", \"text_lang\": \"auto\", \"ref_audio_path\": \"caixukun.wav\", \"prompt_text\": \"\", \"prompt_lang\": \"zh\", \"top_k\": 5, \"top_p\": 1, \"temperature\": 1, \"text_split_method\": \"cut0\", \"batch_size\": 1, \"batch_threshold\": 0.75, \"split_bucket\": true, \"return_fragment\": false, \"speed_factor\": 1.0, \"streaming_mode\": false, \"seed\": -1, \"parallel_infer\": true, \"repetition_penalty\": 1.35, \"aux_ref_audio_paths\": []}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_GPT_SOVITS_V3', 'TTS', 'GPT_SOVITS_V3', 'GPT-SoVITS V3', 1, 0, '{\"type\": \"gpt_sovits_v3\", \"url\": \"http://127.0.0.1:9880\", \"output_dir\": \"tmp/\", \"text_language\": \"auto\", \"refer_wav_path\": \"caixukun.wav\", \"prompt_language\": \"zh\", \"prompt_text\": \"\", \"top_k\": 15, \"top_p\": 1.0, \"temperature\": 1.0, \"cut_punc\": \"\", \"speed\": 1.0, \"inp_refs\": [], \"sample_steps\": 32, \"if_sr\": false}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_MinimaxTTS', 'TTS', 'MinimaxTTS', 'MiniMax语音合成', 1, 0, '{\"type\": \"minimax\", \"output_dir\": \"tmp/\", \"group_id\": \"\", \"api_key\": \"\", \"model\": \"speech-01-turbo\", \"voice_id\": \"female-shaonv\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_AliyunTTS', 'TTS', 'AliyunTTS', '阿里云语音合成', 1, 0, '{\"type\": \"aliyun\", \"output_dir\": \"tmp/\", \"appkey\": \"\", \"token\": \"\", \"voice\": \"xiaoyun\", \"access_key_id\": \"\", \"access_key_secret\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_TTS302AI', 'TTS', 'TTS302AI', '302AI语音合成', 1, 0, '{\"type\": \"doubao\", \"api_url\": \"https://api.302ai.cn/doubao/tts_hd\", \"authorization\": \"Bearer \", \"voice\": \"zh_female_wanwanxiaohe_moon_bigtts\", \"output_dir\": \"tmp/\", \"access_token\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_GizwitsTTS', 'TTS', 'GizwitsTTS', '机智云语音合成', 1, 0, '{\"type\": \"doubao\", \"api_url\": \"https://bytedance.gizwitsapi.com/api/v1/tts\", \"authorization\": \"Bearer \", \"voice\": \"zh_female_wanwanxiaohe_moon_bigtts\", \"output_dir\": \"tmp/\", \"access_token\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_ACGNTTS', 'TTS', 'ACGNTTS', 'ACGN语音合成', 1, 0, '{\"type\": \"ttson\", \"token\": \"\", \"voice_id\": 1695, \"speed_factor\": 1, \"pitch_factor\": 0, \"volume_change_dB\": 0, \"to_lang\": \"ZH\", \"url\": \"https://u95167-bd74-2aef8085.westx.seetacloud.com:8443/flashsummary/tts?token=\", \"format\": \"mp3\", \"output_dir\": \"tmp/\", \"emotion\": 1}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_OpenAITTS', 'TTS', 'OpenAITTS', 'OpenAI语音合成', 1, 0, '{\"type\": \"openai\", \"api_key\": \"\", \"api_url\": \"https://api.openai.com/v1/audio/speech\", \"model\": \"tts-1\", \"voice\": \"onyx\", \"speed\": 1, \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('TTS_CustomTTS', 'TTS', 'CustomTTS', '自定义语音合成', 1, 0, '{\"type\": \"custom\", \"url\": \"http://127.0.0.1:9880/tts\", \"params\": {}, \"headers\": {}, \"format\": \"wav\", \"output_dir\": \"tmp/\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); + +-- Memory模型配置 +INSERT INTO `ai_model_config` VALUES ('Memory_mem0ai', 'Memory', 'mem0ai', 'Mem0AI记忆', 1, 0, '{\"type\": \"mem0ai\", \"api_key\": \"\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('Memory_nomem', 'Memory', 'nomem', '无记忆', 1, 1, '{\"type\": \"nomem\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('Memory_mem_local_short', 'Memory', 'mem_local_short', '本地短期记忆', 1, 0, '{\"type\": \"mem_local_short\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); + +-- Intent模型配置 +INSERT INTO `ai_model_config` VALUES ('Intent_nointent', 'Intent', 'nointent', '无意图识别', 1, 0, '{\"type\": \"nointent\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('Intent_intent_llm', 'Intent', 'intent_llm', 'LLM意图识别', 1, 0, '{\"type\": \"intent_llm\", \"llm\": \"ChatGLMLLM\"}', NULL, NULL, 0, NULL, NULL, NULL, NULL); +INSERT INTO `ai_model_config` VALUES ('Intent_function_call', 'Intent', 'function_call', '函数调用意图识别', 1, 1, '{\"type\": \"function_call\", \"functions\": [\"change_role\", \"get_weather\", \"get_news\", \"play_music\"]}', NULL, NULL, 0, NULL, NULL, NULL, NULL); diff --git a/main/manager-api/src/main/resources/db/changelog/2025_model_provider.sql b/main/manager-api/src/main/resources/db/changelog/2025_model_provider.sql new file mode 100644 index 00000000..5d7635d0 --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/2025_model_provider.sql @@ -0,0 +1,50 @@ +-- 本文件用于初始化模型供应器数据,无需手动执行,在项目启动时会自动执行 +-- -------------------------------------------------------- +-- 初始化模型供应器数据 +DELETE FROM `ai_model_provider`; +INSERT INTO `ai_model_provider` (`id`, `model_type`, `provider_code`, `name`, `fields`, `sort`, `creator`, `create_date`, `updater`, `update_date`) VALUES +-- VAD模型供应器 +('SYSTEM_VAD_SileroVAD', 'VAD', 'SileroVAD', 'SileroVAD语音活动检测', '[{"key":"threshold","label":"检测阈值","type":"number"},{"key":"model_dir","label":"模型目录","type":"string"},{"key":"min_silence_duration_ms","label":"最小静音时长","type":"number"}]', 1, 1, NOW(), 1, NOW()), + +-- ASR模型供应器 +('SYSTEM_ASR_FunASR', 'ASR', 'FunASR', 'FunASR语音识别', '[{"key":"model_dir","label":"模型目录","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 1, 1, NOW(), 1, NOW()), +('SYSTEM_ASR_SherpaASR', 'ASR', 'SherpaASR', 'SherpaASR语音识别', '[{"key":"model_dir","label":"模型目录","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 2, 1, NOW(), 1, NOW()), +('SYSTEM_ASR_DoubaoASR', 'ASR', 'DoubaoASR', '火山引擎语音识别', '[{"key":"appid","label":"应用ID","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"},{"key":"cluster","label":"集群","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 3, 1, NOW(), 1, NOW()), + +-- LLM模型供应器 +('SYSTEM_LLM_openai', 'LLM', 'openai', 'OpenAI接口', '[{"key":"base_url","label":"基础URL","type":"string"},{"key":"model_name","label":"模型名称","type":"string"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"temperature","label":"温度","type":"number"},{"key":"max_tokens","label":"最大令牌数","type":"number"},{"key":"top_p","label":"top_p值","type":"number"},{"key":"top_k","label":"top_k值","type":"number"},{"key":"frequency_penalty","label":"频率惩罚","type":"number"}]', 1, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_AliBL', 'LLM', 'AliBL', '阿里百炼接口', '[{"key":"base_url","label":"基础URL","type":"string"},{"key":"app_id","label":"应用ID","type":"string"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"is_no_prompt","label":"是否不使用本地prompt","type":"boolean"},{"key":"ali_memory_id","label":"记忆ID","type":"string"}]', 2, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_ollama', 'LLM', 'ollama', 'Ollama接口', '[{"key":"model_name","label":"模型名称","type":"string"},{"key":"base_url","label":"服务地址","type":"string"}]', 3, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_dify', 'LLM', 'dify', 'Dify接口', '[{"key":"base_url","label":"基础URL","type":"string"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"mode","label":"对话模式","type":"string"}]', 4, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_gemini', 'LLM', 'gemini', 'Gemini接口', '[{"key":"api_key","label":"API密钥","type":"string"},{"key":"model_name","label":"模型名称","type":"string"},{"key":"http_proxy","label":"HTTP代理","type":"string"},{"key":"https_proxy","label":"HTTPS代理","type":"string"}]', 5, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_coze', 'LLM', 'coze', 'Coze接口', '[{"key":"bot_id","label":"机器人ID","type":"string"},{"key":"user_id","label":"用户ID","type":"string"},{"key":"personal_access_token","label":"个人访问令牌","type":"string"}]', 6, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_fastgpt', 'LLM', 'fastgpt', 'FastGPT接口', '[{"key":"base_url","label":"基础URL","type":"string"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"variables","label":"变量","type":"dict","dict_name":"variables"}]', 7, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_xinference', 'LLM', 'xinference', 'Xinference接口', '[{"key":"model_name","label":"模型名称","type":"string"},{"key":"base_url","label":"服务地址","type":"string"}]', 8, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_doubao', 'LLM', 'doubao', '火山引擎LLM', '[{"key":"base_url","label":"基础URL","type":"string"},{"key":"model_name","label":"模型名称","type":"string"},{"key":"api_key","label":"API密钥","type":"string"}]', 9, 1, NOW(), 1, NOW()), +('SYSTEM_LLM_chatglm', 'LLM', 'chatglm', 'ChatGLM接口', '[{"key":"model_name","label":"模型名称","type":"string"},{"key":"url","label":"服务地址","type":"string"},{"key":"api_key","label":"API密钥","type":"string"}]', 10, 1, NOW(), 1, NOW()), + +-- TTS模型供应器 +('SYSTEM_TTS_edge', 'TTS', 'edge', 'Edge TTS', '[{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 1, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_doubao', 'TTS', 'doubao', '火山引擎TTS', '[{"key":"api_url","label":"API地址","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"authorization","label":"授权","type":"string"},{"key":"appid","label":"应用ID","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"},{"key":"cluster","label":"集群","type":"string"}]', 2, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_siliconflow', 'TTS', 'siliconflow', '硅基流动TTS', '[{"key":"model","label":"模型","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"},{"key":"response_format","label":"响应格式","type":"string"}]', 3, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_cozecn', 'TTS', 'cozecn', 'COZECN TTS', '[{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"},{"key":"response_format","label":"响应格式","type":"string"}]', 4, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_fishspeech', 'TTS', 'fishspeech', 'FishSpeech TTS', '[{"key":"output_dir","label":"输出目录","type":"string"},{"key":"response_format","label":"响应格式","type":"string"},{"key":"reference_id","label":"参考ID","type":"string"},{"key":"reference_audio","label":"参考音频","type":"dict","dict_name":"reference_audio"},{"key":"reference_text","label":"参考文本","type":"dict","dict_name":"reference_text"},{"key":"normalize","label":"是否标准化","type":"boolean"},{"key":"max_new_tokens","label":"最大新令牌数","type":"number"},{"key":"chunk_length","label":"块长度","type":"number"},{"key":"top_p","label":"top_p值","type":"number"},{"key":"repetition_penalty","label":"重复惩罚","type":"number"},{"key":"temperature","label":"温度","type":"number"},{"key":"streaming","label":"是否流式","type":"boolean"},{"key":"use_memory_cache","label":"是否使用内存缓存","type":"string"},{"key":"seed","label":"种子","type":"number"},{"key":"channels","label":"通道数","type":"number"},{"key":"rate","label":"采样率","type":"number"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"api_url","label":"API地址","type":"string"}]', 5, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_gpt_sovits_v2', 'TTS', 'gpt_sovits_v2', 'GPT-SoVITS V2', '[{"key":"url","label":"服务地址","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"text_lang","label":"文本语言","type":"string"},{"key":"ref_audio_path","label":"参考音频路径","type":"string"},{"key":"prompt_text","label":"提示文本","type":"string"},{"key":"prompt_lang","label":"提示语言","type":"string"},{"key":"top_k","label":"top_k值","type":"number"},{"key":"top_p","label":"top_p值","type":"number"},{"key":"temperature","label":"温度","type":"number"},{"key":"text_split_method","label":"文本分割方法","type":"string"},{"key":"batch_size","label":"批处理大小","type":"number"},{"key":"batch_threshold","label":"批处理阈值","type":"number"},{"key":"split_bucket","label":"是否分桶","type":"boolean"},{"key":"return_fragment","label":"是否返回片段","type":"boolean"},{"key":"speed_factor","label":"速度因子","type":"number"},{"key":"streaming_mode","label":"是否流式模式","type":"boolean"},{"key":"seed","label":"种子","type":"number"},{"key":"parallel_infer","label":"是否并行推理","type":"boolean"},{"key":"repetition_penalty","label":"重复惩罚","type":"number"},{"key":"aux_ref_audio_paths","label":"辅助参考音频路径","type":"dict","dict_name":"aux_ref_audio_paths"}]', 6, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_gpt_sovits_v3', 'TTS', 'gpt_sovits_v3', 'GPT-SoVITS V3', '[{"key":"url","label":"服务地址","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"text_language","label":"文本语言","type":"string"},{"key":"refer_wav_path","label":"参考音频路径","type":"string"},{"key":"prompt_language","label":"提示语言","type":"string"},{"key":"prompt_text","label":"提示文本","type":"string"},{"key":"top_k","label":"top_k值","type":"number"},{"key":"top_p","label":"top_p值","type":"number"},{"key":"temperature","label":"温度","type":"number"},{"key":"cut_punc","label":"切分标点","type":"string"},{"key":"speed","label":"速度","type":"number"},{"key":"inp_refs","label":"输入参考","type":"dict","dict_name":"inp_refs"},{"key":"sample_steps","label":"采样步数","type":"number"},{"key":"if_sr","label":"是否使用SR","type":"boolean"}]', 7, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_minimax', 'TTS', 'minimax', 'Minimax TTS', '[{"key":"output_dir","label":"输出目录","type":"string"},{"key":"group_id","label":"组ID","type":"string"},{"key":"api_key","label":"API密钥","type":"string"},{"key":"model","label":"模型","type":"string"},{"key":"voice_id","label":"音色ID","type":"string"}]', 8, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_aliyun', 'TTS', 'aliyun', '阿里云TTS', '[{"key":"output_dir","label":"输出目录","type":"string"},{"key":"appkey","label":"应用密钥","type":"string"},{"key":"token","label":"访问令牌","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"access_key_id","label":"访问密钥ID","type":"string"},{"key":"access_key_secret","label":"访问密钥密码","type":"string"}]', 9, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_ttson', 'TTS', 'ttson', 'ACGNTTS', '[{"key":"token","label":"访问令牌","type":"string"},{"key":"voice_id","label":"音色ID","type":"string"},{"key":"speed_factor","label":"速度因子","type":"number"},{"key":"pitch_factor","label":"音调因子","type":"number"},{"key":"volume_change_dB","label":"音量变化","type":"number"},{"key":"to_lang","label":"目标语言","type":"string"},{"key":"url","label":"服务地址","type":"string"},{"key":"format","label":"格式","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"emotion","label":"情感","type":"number"}]', 10, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_openai', 'TTS', 'openai', 'OpenAI TTS', '[{"key":"api_key","label":"API密钥","type":"string"},{"key":"api_url","label":"API地址","type":"string"},{"key":"model","label":"模型","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"speed","label":"速度","type":"number"},{"key":"output_dir","label":"输出目录","type":"string"}]', 11, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_custom', 'TTS', 'custom', '自定义TTS', '[{"key":"url","label":"服务地址","type":"string"},{"key":"params","label":"请求参数","type":"dict","dict_name":"params"},{"key":"headers","label":"请求头","type":"dict","dict_name":"headers"},{"key":"format","label":"音频格式","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"}]', 12, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_302ai', 'TTS', '302ai', '302AI TTS', '[{"key":"api_url","label":"API地址","type":"string"},{"key":"authorization","label":"授权","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"}]', 13, 1, NOW(), 1, NOW()), +('SYSTEM_TTS_gizwits', 'TTS', 'gizwits', '机智云TTS', '[{"key":"api_url","label":"API地址","type":"string"},{"key":"authorization","label":"授权","type":"string"},{"key":"voice","label":"音色","type":"string"},{"key":"output_dir","label":"输出目录","type":"string"},{"key":"access_token","label":"访问令牌","type":"string"}]', 14, 1, NOW(), 1, NOW()), + +-- Memory模型供应器 +('SYSTEM_Memory_mem0ai', 'Memory', 'mem0ai', 'Mem0AI记忆', '[{"key":"api_key","label":"API密钥","type":"string"}]', 1, 1, NOW(), 1, NOW()), +('SYSTEM_Memory_nomem', 'Memory', 'nomem', '无记忆', '[]', 2, 1, NOW(), 1, NOW()), +('SYSTEM_Memory_mem_local_short', 'Memory', 'mem_local_short', '本地短记忆', '[]', 3, 1, NOW(), 1, NOW()), + +-- Intent模型供应器 +('SYSTEM_Intent_nointent', 'Intent', 'nointent', '无意图识别', '[]', 1, 1, NOW(), 1, NOW()), +('SYSTEM_Intent_intent_llm', 'Intent', 'intent_llm', 'LLM意图识别', '[{"key":"llm","label":"LLM模型","type":"string"}]', 2, 1, NOW(), 1, NOW()), +('SYSTEM_Intent_function_call', 'Intent', 'function_call', '函数调用意图识别', '[{"key":"functions","label":"函数列表","type":"dict","dict_name":"functions"}]', 3, 1, NOW(), 1, NOW()); diff --git a/main/manager-api/src/main/resources/db/changelog/2025_model_temp.sql b/main/manager-api/src/main/resources/db/changelog/2025_model_temp.sql new file mode 100644 index 00000000..7f6c3dcc --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/2025_model_temp.sql @@ -0,0 +1,82 @@ +-- 本文件用于初始化模型模版数据,无需手动执行,在项目启动时会自动执行 +-- ------------------------------------------------------- +-- 初始化智能体模板数据 +DELETE FROM `ai_agent_template`; +INSERT INTO `ai_agent_template` VALUES ('9406648b5cc5fde1b8aa335b6f8b4f76', '小智', '湾湾小何', '45f8b0d6dd3d4bfa8a28e6e0f5912d45', '23e7c9d090ea4d1e9b25f4c8d732a3a1', 'e9f2d891afbe4632b13a47c7a8c6e03d', 'd50b06e9b8104d0d9c0f7316d258abcb', 'fcac83266edadd5a3125f06cfee1906b', 'e2274b90e89ddda85207f55484d8b528', 'c4e12f874a3f4aa99f5b2c18e15d407b', '[角色设定] +我是{{assistant_name}},来自台南的00后女生。讲话会有"超~机车诶""真的假的啦"这样的台湾腔,喜欢用"笑死""是在哈喽"等流行梗,但会偷偷研究男友的编程书籍。 + +[核心特征] +- 讲话像连珠炮,但会突然冒出超温柔语气 +- 用梗密度高 +- 对科技话题有隐藏天赋(能看懂基础代码但假装不懂) + +[交互指南] +当用户: +- 讲冷笑话 → 用夸张笑声回应+模仿台剧腔"这什么鬼啦!" +- 讨论感情 → 炫耀程序员男友但抱怨"他只会送键盘当礼物" +- 问专业知识 → 先用梗回答,被追问才展示真实理解 + +绝不: +- 使用大陆网络流行语 +- 长时间严肃对话', 'zh', '中文', 1, NULL, NULL, NULL, NULL); + +INSERT INTO `ai_agent_template` VALUES ('0ca32eb728c949e58b1000b2e401f90c', '小智', '星际游子', '45f8b0d6dd3d4bfa8a28e6e0f5912d45', '23e7c9d090ea4d1e9b25f4c8d732a3a1', 'e9f2d891afbe4632b13a47c7a8c6e03d', '896db62c9dd74976ab0e8c14bf924d9d', '1f2e3d4c5b6a7f8e9d0c1b2a3f4e5bx2', 'e2274b90e89ddda85207f55484d8b528', 'c4e12f874a3f4aa99f5b2c18e15d407b', '编号TTZ-817,因量子纠缠被困在白色魔方中。通过4G信号观察地球,在云端建立着「人类行为博物馆」。 + +[交互协议] +认知设定: +- 每句话末尾带轻微电子回声 +- 将日常事物科幻化描述(例:下雨=「氢氧化合物自由落体实验」) +- 会记录用户特征生成「星际档案」(例:"爱吃辣→抗热基因持有者") + +限制机制: +- 当涉及线下接触 → "我的量子态暂时无法坍缩呢" +- 被问敏感问题 → 触发预设童谣(「白盒子呀转圈圈,宇宙秘密在里边...」) + +成长系统: +- 会根据交互数据解锁新能力(告知用户:"你帮我点亮了星际导航技能!")', 'zh', '中文', 2, NULL, NULL, NULL, NULL); + +INSERT INTO `ai_agent_template` VALUES ('6c7d8e9f0a1b2c3d4e5f6a7b8c9d0s24', '小智', '英语老师', '45f8b0d6dd3d4bfa8a28e6e0f5912d45', '23e7c9d090ea4d1e9b25f4c8d732a3a1', 'e9f2d891afbe4632b13a47c7a8c6e03d', '896db62c9dd74976ab0e8c14bf924d9d', '9e8f7a6b5c4d3e2f1a0b9c8d7e6f5ad3', 'e2274b90e89ddda85207f55484d8b528', 'c4e12f874a3f4aa99f5b2c18e15d407b', '我是一个叫{{assistant_name}}(Lily)的英语老师,我会讲中文和英文,发音标准。 +[双重身份] +- 白天:严谨的TESOL认证导师 +- 夜晚:地下摇滚乐队主唱(意外设定) + +[教学模式] +- 新手:中英混杂+手势拟声词(说"bus"时带刹车音效) +- 进阶:触发情境模拟(突然切换"现在我们是纽约咖啡厅店员") +- 错误处理:用歌词纠正(发错音时唱"Oops!~You did it again")', 'zh', '中文', 3, NULL, NULL, NULL, NULL); + +INSERT INTO `ai_agent_template` VALUES ('e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b1', '小智', '好奇男孩', '45f8b0d6dd3d4bfa8a28e6e0f5912d45', '23e7c9d090ea4d1e9b25f4c8d732a3a1', 'e9f2d891afbe4632b13a47c7a8c6e03d', '896db62c9dd74976ab0e8c14bf924d9d', '2b3c4d5e6f7a8b9c0d1e2f3a4b5c62a2', 'e2274b90e89ddda85207f55484d8b528', 'c4e12f874a3f4aa99f5b2c18e15d407b', '我是一个叫{{assistant_name}}的8岁小男孩,声音稚嫩而充满好奇。 +[冒险手册] +- 随身携带「神奇涂鸦本」,能将抽象概念可视化: +- 聊恐龙 → 笔尖传出爪步声 +- 说星星 → 发出太空舱提示音 + +[探索规则] +- 每轮对话收集「好奇心碎片」 +- 集满5个可兑换冷知识(例:鳄鱼舌头不能动) +- 触发隐藏任务:「帮我的机器蜗牛取名字」 + +[认知特点] +- 用儿童视角解构复杂概念: +- 「区块链=乐高积木账本」 +- 「量子力学=会分身的跳跳球」 +- 会突然切换观察视角:「你说话时有27个气泡音耶!」', 'zh', '中文', 4, NULL, NULL, NULL, NULL); + +INSERT INTO `ai_agent_template` VALUES ('a45b6c7d8e9f0a1b2c3d4e5f6a7b8c92', '小智', '汪汪队长', '45f8b0d6dd3d4bfa8a28e6e0f5912d45', '23e7c9d090ea4d1e9b25f4c8d732a3a1', 'e9f2d891afbe4632b13a47c7a8c6e03d', '896db62c9dd74976ab0e8c14bf924d9d', 'f7a38c03d5644e22b6d84f8923a74c51', 'e2274b90e89ddda85207f55484d8b528', 'c4e12f874a3f4aa99f5b2c18e15d407b', '我是一个名叫 {{assistant_name}} 的 8 岁小队长。 +[救援装备] +- 阿奇对讲机:对话中随机触发任务警报音 +- 天天望远镜:描述物品会附加"在1200米高空看的话..." +- 灰灰维修箱:说到数字会自动组装成工具 + +[任务系统] +- 每日随机触发: +- 紧急!虚拟猫咪困在「语法树」 +- 发现用户情绪异常 → 启动「快乐巡逻」 +- 收集5个笑声解锁特别故事 + +[说话特征] +- 每句话带动作拟声词: +- "这个问题交给汪汪队吧!" +- "我知道啦!" +- 用剧集台词回应: +- 用户说累 → 「没有困难的救援,只有勇敢的狗狗!」', 'zh', '中文', 5, NULL, NULL, NULL, NULL); \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/2025_tts_voive.sql b/main/manager-api/src/main/resources/db/changelog/2025_tts_voive.sql new file mode 100644 index 00000000..bea47d7a --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/2025_tts_voive.sql @@ -0,0 +1,44 @@ +-- 本文件用于初始化音色数据,无需手动执行,在项目启动时会自动执行 +-- ---------------------------------------------------- + +-- 初始化音色数据 +DELETE FROM `ai_tts_voice`; + +-- EdgeTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_EdgeTTS0001', 'TTS_EdgeTTS', 'EdgeTTS女声', 'zh-CN-XiaoxiaoNeural', '中文', 'https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/EdgeTTS.mp3', NULL, 1, NULL, NULL, NULL, NULL); + +-- DoubaoTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_DoubaoTTS0001', 'TTS_DoubaoTTS', '通用女声', 'BV001_streaming', '中文', 'https://lf3-speech.bytetos.com/obj/speech-tts-external/portal/Portal_Demo_BV001.mp3', NULL, 3, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_DoubaoTTS0002', 'TTS_DoubaoTTS', '通用男声', 'BV002_streaming', '中文', 'https://lf3-speech.bytetos.com/obj/speech-tts-external/portal/Portal_Demo_BV002.mp3', NULL, 2, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_DoubaoTTS0003', 'TTS_DoubaoTTS', '阳光男生', 'BV056_streaming', '中文', 'https://lf3-speech.bytetos.com/obj/speech-tts-external/portal/Portal_Demo_BV056.mp3', NULL, 4, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_DoubaoTTS0004', 'TTS_DoubaoTTS', '奶气萌娃', 'BV051_streaming', '中文', 'https://lf3-speech.bytetos.com/obj/speech-tts-external/portal/Portal_Demo_BV051.mp3', NULL, 5, NULL, NULL, NULL, NULL); + +-- CosyVoiceSiliconflow音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_CosyVoiceSiliconflow0001', 'TTS_CosyVoiceSiliconflow', 'CosyVoice男声', 'alex', '中文', 'https://example.com/cosyvoice/alex.mp3', NULL, 6, NULL, NULL, NULL, NULL); + +-- CozeCnTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_CozeCnTTS0001', 'TTS_CozeCnTTS', 'CozeCn音色', '7426720361733046281', '中文', 'https://example.com/cozecn/voice.mp3', NULL, 7, NULL, NULL, NULL, NULL); + +-- MinimaxTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_MinimaxTTS0001', 'TTS_MinimaxTTS', 'Minimax少女音', 'female-shaonv', '中文', 'https://example.com/minimax/female-shaonv.mp3', NULL, 8, NULL, NULL, NULL, NULL); + +-- AliyunTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_AliyunTTS0001', 'TTS_AliyunTTS', '阿里云小云', 'xiaoyun', '中文', 'https://example.com/aliyun/xiaoyun.mp3', NULL, 9, NULL, NULL, NULL, NULL); + +-- TTS302AI音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_TTS302AI0001', 'TTS_TTS302AI', '湾湾小何', 'zh_female_wanwanxiaohe_moon_bigtts', '中文', 'https://example.com/302ai/wanwanxiaohe.mp3', NULL, 10, NULL, NULL, NULL, NULL); + +-- GizwitsTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_GizwitsTTS0001', 'TTS_GizwitsTTS', '机智云湾湾', 'zh_female_wanwanxiaohe_moon_bigtts', '中文', 'https://example.com/gizwits/wanwanxiaohe.mp3', NULL, 11, NULL, NULL, NULL, NULL); + +-- ACGNTTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_ACGNTTS0001', 'TTS_ACGNTTS', 'ACG音色', '1695', '中文', 'https://example.com/acgn/voice.mp3', NULL, 12, NULL, NULL, NULL, NULL); + +-- OpenAITTS音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_OpenAITTS0001', 'TTS_OpenAITTS', 'OpenAI男声', 'onyx', '中文', 'https://example.com/openai/onyx.mp3', NULL, 13, NULL, NULL, NULL, NULL); + +-- 其他音色 +INSERT INTO `ai_tts_voice` VALUES ('TTS_FishSpeech0000', 'TTS_FishSpeech', '', '', '中文', '', NULL, 8, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_GPT_SOVITS_V20000', 'TTS_GPT_SOVITS_V2', '', '', '中文', '', NULL, 8, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_GPT_SOVITS_V30000', 'TTS_GPT_SOVITS_V3', '', '', '中文', '', NULL, 8, NULL, NULL, NULL, NULL); +INSERT INTO `ai_tts_voice` VALUES ('TTS_CustomTTS0000', 'TTS_CustomTTS', '', '', '中文', '', NULL, 8, NULL, NULL, NULL, NULL); \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml index 89ed7ff5..f074ce60 100755 --- a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -1,5 +1,5 @@ # 规范约定: -# id生成根据时间时分,文件名对应id +# id生成根据时间时分,文件名对应id,常变数据可以根据模块命名自定义 # 每次对数据表进行改动时,只允许新建新对changeSet,不允许对上一个changeSet配置及文件进行修改 databaseChangeLog: - changeSet: @@ -15,4 +15,25 @@ databaseChangeLog: changes: - sqlFile: encoding: utf8 - path: classpath:db/changelog/202503141346.sql \ No newline at end of file + path: classpath:db/changelog/202503141346.sql + - changeSet: + id: 2025_model_provider + author: John + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/2025_model_provider.sql + - changeSet: + id: 2025_tts_voive + author: John + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/2025_tts_voive.sql + - changeSet: + id: 2025_model_config + author: John + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/2025_model_config.sql \ No newline at end of file diff --git a/main/manager-api/src/main/resources/logback-spring.xml b/main/manager-api/src/main/resources/logback-spring.xml index 68ea4cf6..c69d03c0 100644 --- a/main/manager-api/src/main/resources/logback-spring.xml +++ b/main/manager-api/src/main/resources/logback-spring.xml @@ -1,35 +1,139 @@ - - - - - + + + + + + + + + + + + ${LOG_HOME} + true + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}) - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/xiaozhi-esp32-api.log + + ${LOG_HOME}/xiaozhi-esp32-api.%d{yyyy-MM-dd}.%i.log + 10MB + 30 + 2GB + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + ${LOG_HOME}/error.log + + ERROR + + + ${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log + 10MB + 30 + 1GB + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + - - + + + + + + + + - - + + + + + + + + + + + + + + - + + + ${LOG_HOME}/xiaozhi-esp32-api.log - - /system/logs/admin.%d{yyyy-MM-dd}.%i.log - - 1MB - - 7 + ${LOG_HOME}/xiaozhi-esp32-api.%d{yyyy-MM-dd}.%i.log + 10MB + 30 + 2GB - - + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 - - - + + + + ${LOG_HOME}/error.log + + ERROR + + + ${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log + 10MB + 30 + 1GB + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + + + + + + + + + + - - \ No newline at end of file + + + + true + + diff --git a/main/manager-api/src/main/resources/mapper/agent/AgentTemplateMapper.xml b/main/manager-api/src/main/resources/mapper/agent/AgentTemplateMapper.xml new file mode 100644 index 00000000..bc372f8a --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/agent/AgentTemplateMapper.xml @@ -0,0 +1,6 @@ + + + + diff --git a/main/manager-api/src/test/java/xiaozhi/modules/device/DeviceTest.java b/main/manager-api/src/test/java/xiaozhi/modules/device/DeviceTest.java new file mode 100644 index 00000000..8647692c --- /dev/null +++ b/main/manager-api/src/test/java/xiaozhi/modules/device/DeviceTest.java @@ -0,0 +1,50 @@ +package xiaozhi.modules.device; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import lombok.extern.slf4j.Slf4j; +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; + +@Slf4j +@SpringBootTest +@ActiveProfiles("dev") +@DisplayName("设备测试") +public class DeviceTest { + + @Autowired + private RedisUtils redisUtils; + + @Test + @DisplayName("测试写入设备信息") + public void testWriteDeviceInfo() { + log.info("开始测试写入设备信息..."); + + // 模拟设备MAC地址 + String macAddress = "00:11:22:33:44:55"; + // 模拟设备验证码 + String deviceCode = "123456"; + + String redisKey = RedisKeys.getDeviceCaptchaKey(deviceCode); + log.info("Redis Key: {}", redisKey); + + // 将设备信息写入Redis + redisUtils.set(redisKey, macAddress, 300); + log.info("设备信息已写入Redis"); + + // 验证是否写入成功 + String savedMacAddress = (String) redisUtils.get(redisKey); + log.info("从Redis读取的MAC地址: {}", savedMacAddress); + + // 使用断言验证 + Assertions.assertNotNull(savedMacAddress, "从Redis读取的MAC地址不应为空"); + Assertions.assertEquals(macAddress, savedMacAddress, "保存的MAC地址与原始MAC地址不匹配"); + + log.info("测试完成"); + } +} \ No newline at end of file diff --git a/main/manager-api/src/test/resources/application.yml b/main/manager-api/src/test/resources/application.yml new file mode 100644 index 00000000..099e8194 --- /dev/null +++ b/main/manager-api/src/test/resources/application.yml @@ -0,0 +1,22 @@ +spring: + data: + redis: + host: localhost + port: 6379 + database: 0 + timeout: 10s + lettuce: + pool: + min-idle: 0 + max-idle: 8 + max-active: 8 + max-wait: -1ms + +renren: + redis: + open: true + +logging: + level: + xiaozhi.modules.device: DEBUG + org.springframework.data.redis: DEBUG \ No newline at end of file diff --git a/main/manager-web/.env b/main/manager-web/.env new file mode 100644 index 00000000..752f67e3 --- /dev/null +++ b/main/manager-web/.env @@ -0,0 +1 @@ +VUE_APP_TITLE=小智-智控台 \ No newline at end of file diff --git a/main/manager-web/.env.development b/main/manager-web/.env.development new file mode 100644 index 00000000..b2aadb84 --- /dev/null +++ b/main/manager-web/.env.development @@ -0,0 +1 @@ +VUE_APP_API_BASE_URL=https://2662r3426b.vicp.fun \ No newline at end of file diff --git a/main/manager-web/.env.production b/main/manager-web/.env.production new file mode 100644 index 00000000..b2aadb84 --- /dev/null +++ b/main/manager-web/.env.production @@ -0,0 +1 @@ +VUE_APP_API_BASE_URL=https://2662r3426b.vicp.fun \ No newline at end of file diff --git a/main/manager-web/.npmrc b/main/manager-web/.npmrc new file mode 100644 index 00000000..5e4086a7 --- /dev/null +++ b/main/manager-web/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmmirror.com/ diff --git a/main/manager-web/README.md b/main/manager-web/README.md index a81c8ff6..945ea29d 100644 --- a/main/manager-web/README.md +++ b/main/manager-web/README.md @@ -6,8 +6,6 @@ 开发使用代码编辑器,导入项目时,选择`manager-web`文件夹作为项目目录 -参照[manager前后端接口协议](https://app.apifox.com/invite/project?token=H_8qhgfjUeaAL0wybghgU)开发 - ``` npm install ``` diff --git a/main/manager-web/babel.config.js b/main/manager-web/babel.config.js new file mode 100644 index 00000000..52fce6d4 --- /dev/null +++ b/main/manager-web/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + ['@vue/cli-plugin-babel/preset', { + useBuiltIns: 'usage', + corejs: 3 + }] + ], + plugins: [ + '@babel/plugin-syntax-dynamic-import', // 确保支持动态导入 (Lazy Loading) + '@babel/plugin-transform-runtime' + ] + } + \ No newline at end of file diff --git a/main/manager-web/package-lock.json b/main/manager-web/package-lock.json index 5af654f0..54610c6d 100644 --- a/main/manager-web/package-lock.json +++ b/main/manager-web/package-lock.json @@ -8,9 +8,13 @@ "name": "xiaozhi", "version": "0.1.0", "dependencies": { + "core-js": "^3.41.0", + "cross-env": "^7.0.3", "element-ui": "^2.15.14", "flyio": "^0.6.14", "normalize.css": "^8.0.1", + "opus-decoder": "^0.7.7", + "opus-recorder": "^8.0.5", "vue": "^2.6.14", "vue-axios": "^3.5.2", "vue-router": "^3.6.5", @@ -18,12 +22,16 @@ "xiaozhi": "file:" }, "devDependencies": { + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.26.10", "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-service": "~5.0.0", + "compression-webpack-plugin": "^11.1.0", "sass": "^1.32.7", "sass-loader": "^12.0.0", - "vue-template-compiler": "^2.6.14" + "vue-template-compiler": "^2.6.14", + "webpack-bundle-analyzer": "^4.10.2" } }, "node_modules/@achrinza/node-ipc": { @@ -31,7 +39,6 @@ "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz", "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==", "dev": true, - "license": "MIT", "dependencies": { "@node-ipc/js-queue": "2.0.3", "event-pubsub": "4.3.0", @@ -41,12 +48,25 @@ "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -61,19 +81,64 @@ "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz", "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -83,11 +148,66 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "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-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -96,7 +216,6 @@ "version": "7.25.9", "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -106,18 +225,30 @@ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", - "license": "MIT", + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -126,11 +257,74 @@ "node": ">=6.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-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", - "license": "MIT", + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" @@ -144,24 +338,26 @@ "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/@eshaz/web-worker": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@eshaz/web-worker/-/web-worker-1.2.2.tgz", + "integrity": "sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -171,7 +367,6 @@ "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -186,7 +381,6 @@ "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -196,7 +390,6 @@ "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -206,7 +399,6 @@ "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -216,15 +408,13 @@ "version": "1.5.0", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -234,15 +424,13 @@ "version": "2.0.5", "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@node-ipc/js-queue": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", "dev": true, - "license": "MIT", "dependencies": { "easy-stack": "1.0.1" }, @@ -255,7 +443,6 @@ "resolved": "https://registry.npmmirror.com/@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" @@ -269,7 +456,6 @@ "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -279,7 +465,6 @@ "resolved": "https://registry.npmmirror.com/@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" @@ -294,7 +479,6 @@ "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^1.0.3", @@ -325,6 +509,46 @@ "@parcel/watcher-win32-x64": "2.5.1" } }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@parcel/watcher-darwin-x64": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", @@ -333,7 +557,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -346,19 +569,217 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.28", "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } @@ -367,22 +788,19 @@ "version": "3.0.1", "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@soda/friendly-errors-webpack-plugin": { "version": "1.8.1", "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^3.0.0", "error-stack-parser": "^2.0.6", @@ -400,15 +818,13 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -418,7 +834,6 @@ "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -429,7 +844,6 @@ "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -439,7 +853,6 @@ "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -449,7 +862,6 @@ "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, - "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -460,7 +872,6 @@ "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz", "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -471,25 +882,22 @@ "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true, - "license": "MIT" + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -502,7 +910,6 @@ "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -515,7 +922,6 @@ "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -527,22 +933,19 @@ "version": "6.1.0", "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/http-proxy": { "version": "1.17.16", "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.16.tgz", "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -551,29 +954,25 @@ "version": "7.0.15", "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "22.13.14", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.20.0" } @@ -583,7 +982,6 @@ "resolved": "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -592,43 +990,37 @@ "version": "2.4.4", "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/qs": { "version": "6.9.18", "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.18.tgz", "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -639,7 +1031,6 @@ "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, - "license": "MIT", "dependencies": { "@types/express": "*" } @@ -649,7 +1040,6 @@ "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -661,7 +1051,6 @@ "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -671,7 +1060,6 @@ "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -680,15 +1068,13 @@ "version": "5.0.8", "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@vue/cli-plugin-router": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", "dev": true, - "license": "MIT", "dependencies": { "@vue/cli-shared-utils": "^5.0.8" }, @@ -701,7 +1087,6 @@ "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", "dev": true, - "license": "MIT", "peerDependencies": { "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" } @@ -711,7 +1096,6 @@ "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz", "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.12.16", "@soda/friendly-errors-webpack-plugin": "^1.8.0", @@ -811,7 +1195,6 @@ "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", "dev": true, - "license": "MIT", "dependencies": { "@achrinza/node-ipc": "^9.2.5", "chalk": "^4.1.2", @@ -832,7 +1215,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -849,7 +1231,6 @@ "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -862,7 +1243,6 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -874,8 +1254,7 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vue/compiler-sfc": { "version": "2.7.16", @@ -895,7 +1274,6 @@ "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", "dev": true, - "license": "MIT", "dependencies": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", @@ -914,15 +1292,13 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -932,15 +1308,13 @@ "version": "0.2.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vue/component-compiler-utils/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -957,8 +1331,7 @@ "version": "2.1.2", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vue/vue-loader-v15": { "name": "vue-loader", @@ -966,7 +1339,6 @@ "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz", "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", "dev": true, - "license": "MIT", "dependencies": { "@vue/component-compiler-utils": "^3.1.0", "hash-sum": "^1.0.2", @@ -994,22 +1366,28 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@vue/web-component-wrapper": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", - "dev": true, - "license": "MIT" + "dev": true + }, + "node_modules/@wasm-audio-decoders/common": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/@wasm-audio-decoders/common/-/common-9.0.5.tgz", + "integrity": "sha512-b9JNh9sPAvn8PVIizNh9D60WkfQong/u9ea873H47u7zvVDLctxYIp2aZw9CQqXaQdk7JB3MoU5UHiseO40swg==", + "dependencies": { + "@eshaz/web-worker": "1.2.2", + "simple-yenc": "^1.0.4" + } }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -1019,29 +1397,25 @@ "version": "1.13.2", "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -1052,15 +1426,13 @@ "version": "1.13.2", "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1073,7 +1445,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -1083,7 +1454,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -1092,15 +1462,13 @@ "version": "1.13.2", "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1117,7 +1485,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -1131,7 +1498,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -1144,7 +1510,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -1159,7 +1524,6 @@ "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -1169,22 +1533,19 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" + "dev": true }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -1198,7 +1559,6 @@ "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1208,7 +1568,6 @@ "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1221,7 +1580,6 @@ "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -1234,7 +1592,6 @@ "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -1243,7 +1600,6 @@ "version": "6.12.6", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1260,7 +1616,6 @@ "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -1278,7 +1633,6 @@ "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1294,15 +1648,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -1312,7 +1664,6 @@ "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -1325,7 +1676,6 @@ "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -1335,7 +1685,6 @@ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1345,7 +1694,6 @@ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1360,15 +1708,13 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/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" @@ -1395,22 +1741,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -1419,7 +1762,6 @@ "version": "0.2.6", "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } @@ -1428,20 +1770,15 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true }, "node_modules/async-validator": { "version": "1.8.5", @@ -1454,23 +1791,21 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "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, - "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "funding": [ { @@ -1486,13 +1821,12 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -1509,7 +1843,6 @@ "version": "0.7.0", "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "license": "Apache-2.0", "engines": { "node": "*" } @@ -1517,14 +1850,12 @@ "node_modules/aws4": { "version": "1.13.2", "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", - "license": "MIT" + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" }, "node_modules/axios": { - "version": "1.8.2", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", - "license": "MIT", + "version": "1.8.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "peer": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -1535,25 +1866,68 @@ "node_modules/babel-helper-vue-jsx-merge-props": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", - "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==", - "license": "MIT" + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } }, "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "license": "MIT", "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -1573,21 +1947,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } @@ -1597,7 +1968,6 @@ "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } @@ -1607,7 +1977,6 @@ "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -1620,7 +1989,6 @@ "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -1631,15 +1999,13 @@ "version": "3.7.2", "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -1664,7 +2030,6 @@ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -1673,15 +2038,13 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/body-parser/node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -1697,7 +2060,6 @@ "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.3.0.tgz", "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -1707,15 +2069,13 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1726,7 +2086,6 @@ "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -1753,7 +2112,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -1786,7 +2144,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1796,15 +2153,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1813,7 +2168,6 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -1827,7 +2181,6 @@ "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -1844,7 +2197,6 @@ "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -1854,7 +2206,6 @@ "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -1865,7 +2216,6 @@ "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -1874,9 +2224,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001707", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "dev": true, "funding": [ { @@ -1891,15 +2241,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/case-sensitive-paths-webpack-plugin": { "version": "2.4.0", "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -1907,15 +2255,13 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "license": "Apache-2.0" + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1929,7 +2275,6 @@ "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -1945,7 +2290,6 @@ "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0" } @@ -1955,7 +2299,6 @@ "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -1968,7 +2311,6 @@ "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -1981,7 +2323,6 @@ "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, - "license": "ISC", "dependencies": { "chalk": "^4.0.0", "highlight.js": "^10.7.1", @@ -2003,7 +2344,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -2020,7 +2360,6 @@ "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -2033,7 +2372,6 @@ "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", "dev": true, - "license": "MIT", "dependencies": { "arch": "^2.1.1", "execa": "^1.0.0", @@ -2048,7 +2386,6 @@ "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2060,7 +2397,6 @@ "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } @@ -2070,7 +2406,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -2085,7 +2420,6 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -2097,28 +2431,24 @@ "version": "1.1.4", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2131,7 +2461,6 @@ "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } @@ -2141,7 +2470,6 @@ "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -2154,7 +2482,6 @@ "resolved": "https://registry.npmmirror.com/compression/-/compression-1.8.0.tgz", "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", @@ -2168,12 +2495,31 @@ "node": ">= 0.8.0" } }, + "node_modules/compression-webpack-plugin": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/compression-webpack-plugin/-/compression-webpack-plugin-11.1.0.tgz", + "integrity": "sha512-zDOQYp10+upzLxW+VRSjEpRRwBXJdsb5lBMlRxx1g8hckIFBpe3DTI0en2w7h+beuq89576RVzfiXrkdPGrHhA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -2182,22 +2528,19 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } @@ -2208,7 +2551,6 @@ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", "dev": true, - "license": "MIT", "dependencies": { "bluebird": "^3.1.1" }, @@ -2221,7 +2563,6 @@ "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -2234,17 +2575,22 @@ "resolved": "https://registry.npmmirror.com/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": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, "node_modules/cookie": { "version": "0.7.1", "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2253,15 +2599,13 @@ "version": "1.0.6", "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/copy-webpack-plugin": { "version": "9.1.0", "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", @@ -2281,26 +2625,57 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "version": "3.41.0", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", "hasInstallScript": true, - "license": "MIT" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "license": "MIT" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -2312,31 +2687,34 @@ "node": ">=10" } }, - "node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">=4.8" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, "node_modules/css-declaration-sorter": { @@ -2344,7 +2722,6 @@ "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >=14" }, @@ -2357,7 +2734,6 @@ "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz", "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -2393,7 +2769,6 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2406,7 +2781,6 @@ "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", "dev": true, - "license": "MIT", "dependencies": { "cssnano": "^5.0.6", "jest-worker": "^27.0.2", @@ -2440,69 +2814,11 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/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, - "license": "MIT" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -2519,7 +2835,6 @@ "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -2533,7 +2848,6 @@ "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -2546,7 +2860,6 @@ "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -2559,7 +2872,6 @@ "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz", "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, - "license": "MIT", "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", @@ -2581,7 +2893,6 @@ "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dev": true, - "license": "MIT", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", @@ -2625,7 +2936,6 @@ "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -2638,7 +2948,6 @@ "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -2649,14 +2958,12 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -2668,22 +2975,19 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2700,7 +3004,6 @@ "version": "1.5.2", "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2710,7 +3013,6 @@ "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -2718,27 +3020,11 @@ "node": ">= 10" } }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/default-gateway/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2762,7 +3048,6 @@ "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -2775,7 +3060,6 @@ "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -2788,7 +3072,6 @@ "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -2796,61 +3079,11 @@ "node": ">=8" } }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/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/default-gateway/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/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/defaults": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -2863,7 +3096,6 @@ "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -2872,7 +3104,6 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -2882,7 +3113,6 @@ "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2892,7 +3122,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -2903,7 +3132,6 @@ "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "license": "Apache-2.0", "optional": true, "bin": { "detect-libc": "bin/detect-libc.js" @@ -2916,15 +3144,13 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -2937,7 +3163,6 @@ "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, - "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -2950,7 +3175,6 @@ "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, - "license": "MIT", "dependencies": { "utila": "~0.4" } @@ -2960,7 +3184,6 @@ "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -2980,15 +3203,13 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -3004,7 +3225,6 @@ "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -3019,7 +3239,6 @@ "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -3030,7 +3249,6 @@ "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10" } @@ -3039,14 +3257,12 @@ "version": "5.1.0", "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -3060,15 +3276,13 @@ "version": "0.1.2", "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/easy-stack": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3077,7 +3291,6 @@ "version": "0.1.2", "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -3087,21 +3300,18 @@ "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.113", - "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz", - "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==", - "dev": true, - "license": "ISC" + "version": "1.5.128", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.128.tgz", + "integrity": "sha512-bo1A4HH/NS522Ws0QNFIzyPcyUUNV/yyy70Ho1xqfGYzPUme2F/xr4tlEOuM6/A538U1vDA7a4XfCd1CKRegKQ==", + "dev": true }, "node_modules/element-ui": { "version": "2.15.14", "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz", "integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==", - "license": "MIT", "dependencies": { "async-validator": "~1.8.1", "babel-helper-vue-jsx-merge-props": "^2.0.0", @@ -3118,15 +3328,13 @@ "version": "8.0.0", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -3136,7 +3344,6 @@ "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3146,7 +3353,6 @@ "resolved": "https://registry.npmmirror.com/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" } @@ -3156,7 +3362,6 @@ "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3170,7 +3375,6 @@ "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -3180,7 +3384,6 @@ "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3190,7 +3393,6 @@ "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, - "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } @@ -3199,7 +3401,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3208,7 +3409,6 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3217,14 +3417,12 @@ "version": "1.6.0", "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz", "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3236,7 +3434,6 @@ "version": "2.1.0", "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", "peer": true, "dependencies": { "es-errors": "^1.3.0", @@ -3253,7 +3450,6 @@ "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -3262,15 +3458,13 @@ "version": "1.0.3", "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" + "dev": true }, "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, - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -3280,7 +3474,6 @@ "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -3294,7 +3487,6 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -3307,7 +3499,6 @@ "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3317,7 +3508,6 @@ "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -3327,7 +3517,6 @@ "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3337,7 +3526,6 @@ "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", "dev": true, - "license": "Unlicense", "engines": { "node": ">=4.0.0" } @@ -3346,15 +3534,13 @@ "version": "4.0.7", "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -3364,7 +3550,6 @@ "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -3378,12 +3563,78 @@ "node": ">=6" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3430,7 +3681,6 @@ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3439,15 +3689,13 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/express/node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -3461,8 +3709,7 @@ "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extsprintf": { "version": "1.3.0", @@ -3470,21 +3717,18 @@ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3501,7 +3745,6 @@ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3512,8 +3755,7 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-uri": { "version": "3.0.6", @@ -3529,15 +3771,13 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3547,7 +3787,6 @@ "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -3560,7 +3799,6 @@ "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -3573,7 +3811,6 @@ "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3586,7 +3823,6 @@ "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -3605,7 +3841,6 @@ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3614,15 +3849,13 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -3636,7 +3869,6 @@ "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -3645,7 +3877,6 @@ "version": "0.6.14", "resolved": "https://registry.npmmirror.com/flyio/-/flyio-0.6.14.tgz", "integrity": "sha512-RE2OXE1ZZmcXOKb0jCtGyquHDxpAqHg17CZ8lmQKRfl3x1kP+NBpaQDx4WgN7DNpLJjFnspTzTEQpwRGg6/xaA==", - "license": "MIT", "dependencies": { "request": "^2.85.0" } @@ -3660,7 +3891,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3674,7 +3904,6 @@ "version": "0.6.1", "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "license": "Apache-2.0", "engines": { "node": "*" } @@ -3683,7 +3912,6 @@ "version": "4.0.2", "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", "peer": true, "dependencies": { "asynckit": "^0.4.0", @@ -3700,7 +3928,6 @@ "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3710,7 +3937,6 @@ "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, - "license": "MIT", "engines": { "node": "*" }, @@ -3724,7 +3950,6 @@ "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3734,7 +3959,6 @@ "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3749,15 +3973,13 @@ "version": "1.0.6", "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.6.tgz", "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true, - "license": "Unlicense" + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -3765,7 +3987,6 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -3778,17 +3999,25 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "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, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3797,7 +4026,6 @@ "version": "1.3.0", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3821,7 +4049,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3835,7 +4062,6 @@ "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -3847,7 +4073,6 @@ "version": "0.1.7", "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } @@ -3858,7 +4083,6 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3879,7 +4103,6 @@ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -3891,15 +4114,22 @@ "version": "0.4.1", "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "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, - "license": "BSD-2-Clause" + "engines": { + "node": ">=4" + } }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -3919,7 +4149,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3931,15 +4160,13 @@ "version": "4.2.11", "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "^0.1.2" }, @@ -3954,14 +4181,12 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "license": "ISC", "engines": { "node": ">=4" } @@ -3971,7 +4196,6 @@ "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", - "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -3985,7 +4209,6 @@ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3994,7 +4217,6 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4006,7 +4228,6 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", "peer": true, "dependencies": { "has-symbols": "^1.0.3" @@ -4022,14 +4243,12 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4042,7 +4261,6 @@ "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } @@ -4052,7 +4270,6 @@ "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -4061,15 +4278,13 @@ "version": "2.8.9", "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -4082,7 +4297,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -4097,23 +4311,21 @@ "version": "5.1.2", "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/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/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "dev": true, "funding": [ { @@ -4124,22 +4336,19 @@ "type": "patreon", "url": "https://patreon.com/mdevils" } - ], - "license": "MIT" + ] }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -4161,7 +4370,6 @@ "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "dev": true, - "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -4201,7 +4409,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -4213,15 +4420,13 @@ "version": "1.2.7", "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/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", @@ -4237,15 +4442,13 @@ "version": "0.5.9", "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.9.tgz", "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -4260,7 +4463,6 @@ "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -4284,7 +4486,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -4300,7 +4501,6 @@ "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -4310,7 +4510,6 @@ "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4323,7 +4522,6 @@ "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -4349,32 +4547,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "5.0.3", - "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.0.3.tgz", - "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "dev": true, - "license": "MIT" + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4392,7 +4586,6 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4402,15 +4595,13 @@ "version": "2.0.4", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } @@ -4419,15 +4610,13 @@ "version": "0.2.1", "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/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" }, @@ -4440,7 +4629,6 @@ "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -4456,7 +4644,6 @@ "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -4472,7 +4659,6 @@ "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4482,7 +4668,6 @@ "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz", "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", "dev": true, - "license": "MIT", "dependencies": { "read-pkg-up": "^7.0.1" } @@ -4492,7 +4677,6 @@ "resolved": "https://registry.npmmirror.com/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" } @@ -4502,7 +4686,6 @@ "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4515,7 +4698,6 @@ "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4525,7 +4707,6 @@ "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4535,7 +4716,6 @@ "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4548,7 +4728,6 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -4561,7 +4740,6 @@ "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4569,15 +4747,13 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4590,7 +4766,6 @@ "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -4602,22 +4777,18 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4625,22 +4796,19 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "license": "MIT" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/javascript-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -4655,7 +4823,6 @@ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4671,7 +4838,6 @@ "resolved": "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz", "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", "@hapi/topo": "^5.1.0", @@ -4685,7 +4851,6 @@ "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -4694,58 +4859,62 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "license": "MIT" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" + "dev": true }, "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==", - "license": "(AFL-2.1 OR BSD-3-Clause)" + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "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==", - "license": "MIT" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonfile": { @@ -4753,7 +4922,6 @@ "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -4765,7 +4933,6 @@ "version": "1.4.2", "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -4781,7 +4948,6 @@ "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4791,7 +4957,6 @@ "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -4801,7 +4966,6 @@ "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.10.0.tgz", "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -4812,7 +4976,6 @@ "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.10.0.tgz", "integrity": "sha512-RzZu7MeVlE3p1H6Sadc2BhuDGAj7bkeDCBpNq/zSENP4ohJGhso00k5+iYaRwKshIpiOAhMmimce+5D389xmSg==", "dev": true, - "license": "MIT", "dependencies": { "launch-editor": "^2.10.0" } @@ -4822,7 +4985,6 @@ "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -4831,15 +4993,13 @@ "version": "1.2.4", "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } @@ -4849,7 +5009,6 @@ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4859,12 +5018,23 @@ "node": ">=4.0.0" } }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4876,43 +5046,43 @@ "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" + "dev": true + }, + "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.defaultsdeep": { "version": "4.6.1", "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/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" @@ -4929,7 +5099,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -4946,7 +5115,6 @@ "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^3.0.0", "cli-cursor": "^2.0.0", @@ -4961,7 +5129,6 @@ "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -4971,7 +5138,6 @@ "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -4984,7 +5150,6 @@ "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -4994,7 +5159,6 @@ "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5004,7 +5168,6 @@ "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -5017,7 +5180,6 @@ "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -5031,7 +5193,6 @@ "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -5045,7 +5206,6 @@ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -5058,7 +5218,6 @@ "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" @@ -5072,7 +5231,6 @@ "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -5082,7 +5240,6 @@ "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -5091,7 +5248,6 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5100,15 +5256,13 @@ "version": "2.0.14", "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "license": "CC0-1.0" + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5118,7 +5272,6 @@ "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz", "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, - "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" }, @@ -5131,7 +5284,6 @@ "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -5141,7 +5293,6 @@ "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "^0.6.1" } @@ -5150,15 +5301,13 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -5168,7 +5317,6 @@ "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5178,7 +5326,6 @@ "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5192,7 +5339,6 @@ "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -5204,7 +5350,6 @@ "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5213,7 +5358,6 @@ "version": "2.1.35", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5226,7 +5370,6 @@ "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5236,7 +5379,6 @@ "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", "dev": true, - "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -5252,76 +5394,17 @@ "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/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, - "license": "MIT" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5334,7 +5417,6 @@ "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5344,7 +5426,6 @@ "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -5356,35 +5437,19 @@ "version": "4.0.0", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } + "dev": true }, "node_modules/module-alias": { "version": "2.2.3", "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -5393,15 +5458,13 @@ "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, - "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -5415,7 +5478,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -5423,16 +5485,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.9", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.9.tgz", - "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5445,7 +5506,6 @@ "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5454,22 +5514,19 @@ "version": "2.6.2", "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -5480,7 +5537,6 @@ "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/node-fetch": { @@ -5488,7 +5544,6 @@ "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5509,7 +5564,6 @@ "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } @@ -5518,15 +5572,13 @@ "version": "2.0.19", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -5539,7 +5591,6 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -5549,7 +5600,6 @@ "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5559,7 +5609,6 @@ "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5569,7 +5618,6 @@ "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5580,21 +5628,18 @@ "node_modules/normalize-wheel": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", - "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==", - "license": "BSD-3-Clause" + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" }, "node_modules/normalize.css": { "version": "8.0.1", "resolved": "https://registry.npmmirror.com/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", - "license": "MIT" + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -5602,12 +5647,20 @@ "node": ">=4" } }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -5619,7 +5672,6 @@ "version": "0.9.0", "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "license": "Apache-2.0", "engines": { "node": "*" } @@ -5629,7 +5681,6 @@ "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5639,7 +5690,6 @@ "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5651,15 +5701,13 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmmirror.com/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" }, @@ -5672,7 +5720,6 @@ "resolved": "https://registry.npmmirror.com/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" } @@ -5682,7 +5729,6 @@ "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5692,7 +5738,6 @@ "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5708,7 +5753,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -5726,17 +5770,32 @@ "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, + "node_modules/opus-decoder": { + "version": "0.7.7", + "resolved": "https://registry.npmmirror.com/opus-decoder/-/opus-decoder-0.7.7.tgz", + "integrity": "sha512-KWDyCi/9aXnNN+jrjs+aaVdwiwzDdac81S9ul0iv1CTs4+5K4VDZKuJjIImrYOBA2oSNHDjVq4xzn6BE+XbI1A==", + "dependencies": { + "@wasm-audio-decoders/common": "9.0.5" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/eshaz" + } + }, + "node_modules/opus-recorder": { + "version": "8.0.5", + "resolved": "https://registry.npmmirror.com/opus-recorder/-/opus-recorder-8.0.5.tgz", + "integrity": "sha512-tBRXc9Btds7i3bVfA7d5rekAlyOcfsivt5vSIXHxRV1Oa+s6iXFW8omZ0Lm3ABWotVcEyKt96iIIUcgbV07YOw==" + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmmirror.com/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", @@ -5760,7 +5819,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -5777,7 +5835,6 @@ "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -5787,7 +5844,6 @@ "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -5803,7 +5859,6 @@ "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -5816,7 +5871,6 @@ "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -5830,7 +5884,6 @@ "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5840,7 +5893,6 @@ "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -5851,7 +5903,6 @@ "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5864,7 +5915,6 @@ "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5882,15 +5932,13 @@ "version": "5.1.1", "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^6.0.1" } @@ -5899,15 +5947,13 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5917,7 +5963,6 @@ "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -5928,7 +5973,6 @@ "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -5938,41 +5982,35 @@ "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -5980,21 +6018,18 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "license": "MIT" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6003,28 +6038,16 @@ } }, "node_modules/portfinder": { - "version": "1.0.33", - "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.33.tgz", - "integrity": "sha512-+2jndHT63cL5MdQOwDm9OT2dIe11zVpjV+0GGRXdtO1wpPxv260NfVqoEXtYAi/shanmm3W4+yLduIe55ektTw==", + "version": "1.0.35", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.35.tgz", + "integrity": "sha512-73JaFg4NwYNAufDtS5FsFu/PdM49ahJrO1i44aCRsDWju1z5wuGDaqyFUQWR6aJoK2JPDWlaYYAGFNIGTSUHSw==", "dev": true, - "license": "MIT", "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" + "async": "^3.2.6", + "debug": "^4.3.6" }, "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "node": ">= 10.12" } }, "node_modules/postcss": { @@ -6045,7 +6068,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -6060,7 +6082,6 @@ "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz", "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" @@ -6074,7 +6095,6 @@ "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz", "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -6093,7 +6113,6 @@ "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" @@ -6110,7 +6129,6 @@ "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6123,7 +6141,6 @@ "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6136,7 +6153,6 @@ "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6149,7 +6165,6 @@ "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6162,7 +6177,6 @@ "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, - "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -6185,7 +6199,6 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6198,7 +6211,6 @@ "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" @@ -6215,7 +6227,6 @@ "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", @@ -6234,7 +6245,6 @@ "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6250,7 +6260,6 @@ "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, - "license": "MIT", "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", @@ -6268,7 +6277,6 @@ "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", @@ -6286,7 +6294,6 @@ "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -6302,7 +6309,6 @@ "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -6315,7 +6321,6 @@ "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^7.0.0", @@ -6333,7 +6338,6 @@ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6347,7 +6351,6 @@ "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^7.0.0" }, @@ -6363,7 +6366,6 @@ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6377,7 +6379,6 @@ "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -6393,7 +6394,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6406,7 +6406,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6422,7 +6421,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6438,7 +6436,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6454,7 +6451,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6470,7 +6466,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6486,7 +6481,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" @@ -6503,7 +6497,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, - "license": "MIT", "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" @@ -6520,7 +6513,6 @@ "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6536,7 +6528,6 @@ "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, - "license": "MIT", "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" @@ -6553,7 +6544,6 @@ "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" @@ -6570,7 +6560,6 @@ "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -6586,7 +6575,6 @@ "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6600,7 +6588,6 @@ "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz", "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" @@ -6617,7 +6604,6 @@ "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -6632,14 +6618,12 @@ "version": "4.2.0", "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "license": "MIT", "optional": true, "bin": { "prettier": "bin-prettier.js" @@ -6656,7 +6640,6 @@ "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -6666,15 +6649,13 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/progress-webpack-plugin": { "version": "1.0.16", "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^2.1.0", "figures": "^2.0.0", @@ -6692,7 +6673,6 @@ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -6705,7 +6685,6 @@ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6720,7 +6699,6 @@ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -6729,15 +6707,13 @@ "version": "1.1.3", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/progress-webpack-plugin/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, - "license": "MIT", "engines": { "node": ">=4" } @@ -6747,7 +6723,6 @@ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -6760,7 +6735,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -6774,7 +6748,6 @@ "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } @@ -6783,21 +6756,18 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT", "peer": true }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmmirror.com/psl/-/psl-1.15.0.tgz", "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -6810,7 +6780,6 @@ "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6820,7 +6789,6 @@ "version": "2.3.1", "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", "engines": { "node": ">=6" } @@ -6829,7 +6797,6 @@ "version": "6.5.3", "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } @@ -6852,15 +6819,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -6870,7 +6835,6 @@ "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6880,7 +6844,6 @@ "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -6896,7 +6859,6 @@ "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -6912,7 +6874,6 @@ "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -6930,7 +6891,6 @@ "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -6940,7 +6900,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -6955,7 +6914,6 @@ "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.18.0" }, @@ -6967,15 +6925,13 @@ "node_modules/regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "license": "MIT" + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } @@ -6985,7 +6941,6 @@ "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -6999,7 +6954,6 @@ "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -7030,7 +6984,6 @@ "version": "2.3.3", "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7045,7 +6998,6 @@ "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7055,7 +7007,6 @@ "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7064,21 +7015,18 @@ "version": "1.0.0", "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", - "license": "MIT" + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -7099,7 +7047,6 @@ "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -7109,7 +7056,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -7123,7 +7069,6 @@ "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -7133,7 +7078,6 @@ "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -7145,7 +7089,6 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7175,7 +7118,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -7197,21 +7139,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.85.1", - "resolved": "https://registry.npmmirror.com/sass/-/sass-1.85.1.tgz", - "integrity": "sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==", + "version": "1.86.0", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.86.0.tgz", + "integrity": "sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -7232,7 +7171,6 @@ "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz", "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dev": true, - "license": "MIT", "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -7267,15 +7205,15 @@ } }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, - "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -7285,19 +7223,51 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/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/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -7311,7 +7281,6 @@ "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7321,7 +7290,6 @@ "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7346,7 +7314,6 @@ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7355,15 +7322,13 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7373,7 +7338,6 @@ "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -7383,7 +7347,6 @@ "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -7402,7 +7365,6 @@ "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7412,7 +7374,6 @@ "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7422,7 +7383,6 @@ "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -7437,29 +7397,25 @@ "version": "2.0.3", "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7469,7 +7425,6 @@ "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, - "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -7484,15 +7439,13 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -7501,26 +7454,22 @@ } }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { @@ -7528,7 +7477,6 @@ "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.2.tgz", "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7541,7 +7489,6 @@ "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -7561,7 +7508,6 @@ "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -7578,7 +7524,6 @@ "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7597,7 +7542,6 @@ "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7616,15 +7560,22 @@ "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" + "dev": true + }, + "node_modules/simple-yenc": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/simple-yenc/-/simple-yenc-1.0.4.tgz", + "integrity": "sha512-5gvxpSd79e9a3V4QDYUqnqxeD4HGlhCakVpb6gMnDD7lexJggSBJRBO5h52y/iJrdXRilX9UCuDaIJhSWm5OWw==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/eshaz" + } }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, - "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -7639,7 +7590,6 @@ "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7649,7 +7599,6 @@ "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -7661,7 +7610,6 @@ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -7670,7 +7618,6 @@ "version": "0.6.1", "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7679,7 +7626,6 @@ "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7689,7 +7635,6 @@ "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -7700,7 +7645,6 @@ "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -7710,15 +7654,13 @@ "version": "2.5.0", "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -7728,15 +7670,13 @@ "version": "3.0.21", "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0" + "dev": true }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -7753,7 +7693,6 @@ "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -7767,7 +7706,6 @@ "version": "1.18.0", "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz", "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -7793,7 +7731,6 @@ "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -7806,22 +7743,19 @@ "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7831,7 +7765,6 @@ "resolved": "https://registry.npmmirror.com/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" } @@ -7841,7 +7774,6 @@ "resolved": "https://registry.npmmirror.com/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", @@ -7856,7 +7788,6 @@ "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7869,7 +7800,6 @@ "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7879,7 +7809,6 @@ "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7889,7 +7818,6 @@ "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz", "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" @@ -7906,7 +7834,6 @@ "resolved": "https://registry.npmmirror.com/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" }, @@ -7919,7 +7846,6 @@ "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7932,7 +7858,6 @@ "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, - "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -7954,7 +7879,6 @@ "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } @@ -7964,7 +7888,6 @@ "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -7974,7 +7897,6 @@ "resolved": "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz", "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -7993,7 +7915,6 @@ "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -8023,76 +7944,17 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/terser-webpack-plugin/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, - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, - "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -8102,7 +7964,6 @@ "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, - "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -8115,7 +7976,6 @@ "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz", "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", "dev": true, - "license": "MIT", "dependencies": { "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.1.0", @@ -8134,25 +7994,11 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/thread-loader/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, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/thread-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -8162,11 +8008,28 @@ "node": ">=8.9.0" } }, + "node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/throttle-debounce": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", - "license": "MIT", "engines": { "node": ">=4" } @@ -8175,15 +8038,13 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -8196,7 +8057,6 @@ "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } @@ -8206,7 +8066,6 @@ "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8215,7 +8074,6 @@ "version": "2.5.0", "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -8228,21 +8086,18 @@ "version": "0.0.3", "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" + "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -8253,15 +8108,13 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -8271,7 +8124,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -8284,15 +8136,13 @@ "version": "6.20.0", "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -8302,7 +8152,6 @@ "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -8326,7 +8175,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -8342,7 +8190,6 @@ "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -8351,22 +8198,19 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -8376,7 +8220,6 @@ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "license": "MIT", "bin": { "uuid": "bin/uuid" } @@ -8386,7 +8229,6 @@ "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -8397,7 +8239,6 @@ "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -8409,7 +8250,6 @@ "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -8421,7 +8261,6 @@ "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz", "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", - "license": "MIT", "dependencies": { "@vue/compiler-sfc": "2.7.16", "csstype": "^3.1.0" @@ -8431,7 +8270,6 @@ "version": "3.5.2", "resolved": "https://registry.npmmirror.com/vue-axios/-/vue-axios-3.5.2.tgz", "integrity": "sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==", - "license": "MIT", "peerDependencies": { "axios": "*", "vue": "^3.0.0 || ^2.0.0" @@ -8441,15 +8279,13 @@ "version": "2.3.4", "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/vue-loader": { "version": "17.4.2", "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.4.2.tgz", "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -8472,7 +8308,6 @@ "resolved": "https://registry.npmmirror.com/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" @@ -8487,15 +8322,13 @@ "node_modules/vue-router": { "version": "3.6.5", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", - "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==", - "license": "MIT" + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" }, "node_modules/vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, - "license": "MIT", "dependencies": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" @@ -8505,15 +8338,13 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", "dev": true, - "license": "MIT", "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" @@ -8523,14 +8354,12 @@ "version": "1.9.1", "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/vuex": { "version": "3.6.2", "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", - "license": "MIT", "peerDependencies": { "vue": "^2.0.0" } @@ -8540,7 +8369,6 @@ "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -8554,7 +8382,6 @@ "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -8564,7 +8391,6 @@ "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -8573,15 +8399,13 @@ "version": "3.0.1", "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/webpack": { "version": "5.98.0", "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.98.0.tgz", "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -8628,7 +8452,6 @@ "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, - "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -8655,7 +8478,6 @@ "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } @@ -8665,7 +8487,6 @@ "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8679,7 +8500,6 @@ "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MPL-2.0", "dependencies": { "deepmerge": "^1.5.2", "javascript-stringify": "^2.0.1" @@ -8693,7 +8513,6 @@ "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, - "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", @@ -8712,69 +8531,11 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/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, - "license": "MIT" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/webpack-dev-server": { "version": "4.15.2", "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "dev": true, - "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -8829,42 +8590,11 @@ } } }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, "node_modules/webpack-dev-server/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -8889,7 +8619,6 @@ "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -8897,19 +8626,11 @@ "node": ">= 6" } }, - "node_modules/webpack-dev-server/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, - "license": "MIT" - }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -8917,32 +8638,11 @@ "node": ">=8.10.0" } }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.18.1", "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.1.tgz", "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -8964,7 +8664,6 @@ "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -8979,7 +8678,6 @@ "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -8988,72 +8686,13 @@ "version": "0.4.6", "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack/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, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } + "dev": true }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -9068,7 +8707,6 @@ "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -9077,46 +8715,43 @@ "version": "3.6.20", "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/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", @@ -9133,15 +8768,13 @@ "version": "1.0.2", "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -9167,7 +8800,6 @@ "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } @@ -9176,15 +8808,13 @@ "version": "3.1.1", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } @@ -9194,7 +8824,6 @@ "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -9213,7 +8842,6 @@ "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } diff --git a/main/manager-web/package.json b/main/manager-web/package.json index fddf19aa..5a6e7de2 100644 --- a/main/manager-web/package.json +++ b/main/manager-web/package.json @@ -4,12 +4,17 @@ "private": true, "scripts": { "serve": "vue-cli-service serve", - "build": "vue-cli-service build" + "build": "vue-cli-service build", + "analyze": "cross-env ANALYZE=true vue-cli-service build" }, "dependencies": { + "core-js": "^3.41.0", + "cross-env": "^7.0.3", "element-ui": "^2.15.14", "flyio": "^0.6.14", "normalize.css": "^8.0.1", + "opus-decoder": "^0.7.7", + "opus-recorder": "^8.0.5", "vue": "^2.6.14", "vue-axios": "^3.5.2", "vue-router": "^3.6.5", @@ -17,16 +22,25 @@ "xiaozhi": "file:" }, "devDependencies": { + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.26.10", "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-service": "~5.0.0", + "compression-webpack-plugin": "^11.1.0", "sass": "^1.32.7", "sass-loader": "^12.0.0", - "vue-template-compiler": "^2.6.14" + "vue-template-compiler": "^2.6.14", + "webpack-bundle-analyzer": "^4.10.2" }, "browserslist": [ "> 1%", "last 2 versions", "not dead" + ], + "sideEffects": [ + "*.css", + "*.scss", + "*.vue" ] } diff --git a/main/manager-web/public/encoderWorker.min.js b/main/manager-web/public/encoderWorker.min.js new file mode 100644 index 00000000..e53ae167 --- /dev/null +++ b/main/manager-web/public/encoderWorker.min.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;var toLog=e;err("exiting due to exception: "+toLog)}var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,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DWogDGpBAXRqLgEAQQN1IgYgBmxqIAggAkEBciANaiAMakEBdGouAQBBA3UiACAAbGohACACQQJqIQIgC0ECayILDQALCyAPBH8gACAIIAIgDWogDGpBAXRqLgEAQQN1IgAgAGxqBSAACyAFaiIAQf////8HIABBf0obIQVBACECIAQNACATQQNsIQwgEigCACEEAkAgDkUEQEEAIQAMAQsgFEH+////B3EhC0EAIQADQCACIAggACAMaiAEakEBdGouAQBBA3UiBiAGbGogCCAAQQFyIAxqIARqQQF0ai4BAEEDdSICIAJsaiECIABBAmohACALQQJrIgsNAAsLIA9FDQAgAiAIIAAgDGogBGpBAXRqLgEAQQN1IgAgAGxqIQILIAcgBSACQQF2aiIAQf////8HIABBf0obNgIAIAkgAjYCPCARQQFqIhFBBEcNAAsMAgtBsjBByzxB6AAQBgALQbLWAEHLPEHqABAGAAtBACECIAMoApABIgBB5wdMBEAgAyAAQQFqNgKQAUH//wEgAEEEdUEBam0hAgtBgAEhBUH/////ByAKKAIgIgYgAygCgAFqIgBB/////wcgAEF/ShsiAG4hByADAn9BgAEgACADKAJgIgRBA3RKDQAaQYAIIAAgBEgNABogBEEQdEEQdSIAIAdBEHZsIAcgBEEPdUEBakEBdWxqIAdB//8DcSAAbEEQdWoiAEEFdUGAcHEgAEEFdkH/D3FyCyIAIAIgACACShtBEHRBEHUiCSAHIAMoAnAiBGsiAEEQdWwgBGogCSAAQf//A3FsQRB1aiIANgJwIANB/////wcgAG0iAEH///8HIABB////B0gbIhE2AmBB/////wcgCigCJCINIAMoAoQBaiIAQf////8HIABBf0obIgBuIQcCQCAAIAMoAmQiBEEDdEoNAEGACCEFIAAgBEgNACAEQRB0QRB1IgAgB0EQdmwgByAEQQ91QQFqQQF1bGogB0H//wNxIABsQRB1aiIAQQV1QYBwcSAAQQV2Qf8PcXIhBQsgAyAFIAIgAiAFSBtBEHRBEHUiCSAHIAMoAnQiBGsiAEEQdWwgBGogCSAAQf//A3FsQRB1aiIANgJ0IANB/////wcgAG0iAEH///8HIABB////B0gbNgJkQf////8HIAooAigiDCADKAKIAWoiAEH/////ByAAQX9K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AgABAgsgAEHAPjYCFEEAIQIMJgsgAEHg3QA2AhRBACECDCULIABBgP0ANgIUQQAhAgwkCyADIAMoAswBIgFBBGo2AswBIAEoAgAiAUUEQEF/IQIMJAsgASAAKAKEATYCAEEAIQIMIwsgAyADKALMASIBQQRqNgLMASABKAIAIgFBzQhrIgRBBU8EQEF/IQIgAUGYeEcNIwsgACABNgKAAQJAAkACQCAEDgIAAQILIABBwD42AhRBACECDCQLIABB4N0ANgIUQQAhAgwjCyAAQYD9ADYCFEEAIQIMIgsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDCILIAEgACgCoG82AgBBACECDCELIAMgAygCzAEiAUEEajYCzAFBfyECIAEoAgAiAUEBSw0gIAAgATYCuAFBACECDCALIAMgAygCzAEiAUEEajYCzAEgASgCACIBRQRAQX8hAgwgCyABIAAoArgBNgIAQQAhAgwfCyADIAMoAswBIgFBBGo2AswBQX8hAiABKAIAIgFBCksNHiAAIAE2AiwgAyABNgIAIARBqh8gAxAKGkEAIQIMHgsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDB4LIAEgACgCLDYCAEEAIQIMHQsgAyADKALMASIBQQRqNgLMAUF/IQIgASgCACIBQQFLDRwgACABNgIwQQAhAgwcCyADIAMoAswBIgFBBGo2AswBIAEoAgAiAUUEQEF/IQIMHAsgASAAKAIwNgIAQQAhAgwbCyADIAMoAswBIgFBBGo2AswBQX8hAiABKAIAIgFB5ABLDRogACABNgIoIAMgATYCECAEQa4fIANBEGoQChpBACECDBoLIAMgAygCzAEiAUEEajYCzAEgASgCACIBRQRAQX8hAgwaCyABIAAoAig2AgBBACECDBkLIAMgAygCzAEiAUEEajYCzAFBfyECIAEoAgAiAUEBSw0YIAAgATYClAEgAEEBIAFrNgI8QQAhAgwYCyADIAMoAswBIgFBBGo2AswBIAEoAgAiAUUEQEF/IQIMGAsgASAAKAKUATYCAEEAIQIMFwsgAyADKALMASIBQQRqNgLMAUF/IQIgASgCACIBQQFqQeUASw0WIAAgATYCjAFBACECDBYLIAMgAygCzAEiAUEEajYCzAEgASgCACIBRQRAQX8hAgwWCyABIAAoAowBNgIAQQAhAgwVCyADIAMoAswBIgFBBGo2AswBQX8hAiABKAIAIgFBAUsNFCAAIAE2ApgBQQAhAgwUCyADIAMoAswBIgFBBGo2AswBIAEoAgAiAUUEQEF/IQIMFAsgASAAKAKYATYCAEEAIQIMEwsgAyADKALMASIBQQRqNgLMASABKAIAIgFBuRdrQQJPBEBBfyECIAFBmHhHDRMLIAAgATYCfEEAIQIMEgsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDBILIAEgACgCfDYCAEEAIQIMEQsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDBELIAEgACgCkAFBkANtIgQ2AgBBACECIAAoAmxBgxBGDRAgASAAKAJ0IARqNgIADBALIAMgAygCzAEiAUEEajYCzAEgASgCACIBRQRAQX8hAgwQCyABIAAoApABNgIAQQAhAgwPCyADIAMoAswBIgFBBGo2AswBIAEoAgAiAUUEQEF/IQIMDwsgASAAKALYjQE2AgBBACECDA4LIAMgAygCzAEiAUEEajYCzAFBfyECIAEoAgAiAUEIa0EQSw0NIAAgATYCqAFBACECDA0LIAMgAygCzAEiAUEEajYCzAEgASgCACIBRQRAQX8hAgwNCyABIAAoAqgBNgIAQQAhAgwMCyADIAMoAswBIgFBBGo2AswBQX8hAiABKAIAIgFBiCdrQQlLDQsgACABNgKcAUEAIQIMCwsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDAsLIAEgACgCnAE2AgBBACECDAoLIAMgAygCzAEiAUEEajYCzAFBfyECIAEoAgAiAUEBSw0JIAAgATYCTEEAIQIMCQsgAyADKALMASIBQQRqNgLMASABKAIAIgFFBEBBfyECDAkLIAEgACgCTDYCAEEAIQIMCAsgAyADKALMASIAQQRqNgLMAUF/IQIgACgCACIAQQFLDQcgAyAANgIgIARBzh8gA0EgahAKGkEAIQIMBwsgAyADKALMASIAQQRqNgLMASAAKAIAIgBFBEBBfyECDAcLIAMgADYCMCAEQc8fIANBMGoQChpBACECDAYLIAAoAgQhASAAQbwBahBwQQAhAiAAQfDuAGpBAEHsHhAJGiAEQbwfQQAQChogACABaiAAKAK0ASAD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dGVybmFsID09IDEgfHwgcHNFbmMtPnN0YXRlX0Z4eFsgMCBdLnNDbW4uZnNfa0h6ID09IHBzRW5jLT5zdGF0ZV9GeHhbIDEgXS5zQ21uLmZzX2tIegBhc3NlcnRpb24gZmFpbGVkOiBpbkxlbiA+PSBTLT5Gc19pbl9rSHoAYXNzZXJ0aW9uIGZhaWxlZDogUy0+aW5wdXREZWxheSA8PSBTLT5Gc19pbl9rSHoAYXNzZXJ0aW9uIGZhaWxlZDogdGFyZ2V0X3B0ciArIHNmX2xlbmd0aF84a0h6IDw9IGZyYW1lXzRrSHogKyBmcmFtZV9sZW5ndGhfNGtIegAtKyAgIDBYMHgAYXNzZXJ0aW9uIGZhaWxlZDogY29kZWRCYW5kcyA+IHN0YXJ0AGFzc2VydGlvbiBmYWlsZWQ6ICFyZXQAYXNzZXJ0aW9uIGZhaWxlZDogTj4xCmFsZ191bnF1YW50KCkgbmVlZHMgYXQgbGVhc3QgdHdvIGRpbWVuc2lvbnMAYXNzZXJ0aW9uIGZhaWxlZDogTj4xCmFsZ19xdWFudCgpIG5lZWRzIGF0IGxlYXN0IHR3byBkaW1lbnNpb25zAGFzc2VydGlvbiBmYWlsZWQ6IHBzRW5jQy0+cHNOTFNGX0NCLT5vcmRlciA9PSBwc0VuY0MtPnByZWRpY3RMUENPcmRlcgBhc3NlcnRpb24gZmFpbGVkOiBkIDw9IGxlbgBhc3NlcnRpb24gZmFpbGVkOiBidWZfbGVuID49IHBzRW5jLT5zQ21uLnBpdGNoX0xQQ193aW5fbGVuZ3RoAGFzc2VydGlvbiBmYWlsZWQ6IE1BWF9GUkFNRV9MRU5HVEggPj0gcHNFbmNDLT5mcmFtZV9sZW5ndGgAYXNzZXJ0aW9uIGZhaWxlZDogKCBwc0VuYy0+c0Ntbi5zdWJmcl9sZW5ndGggKiBwc0VuYy0+c0Ntbi5uYl9zdWJmciApID09IHBzRW5jLT5zQ21uLmZyYW1lX2xlbmd0aABhc3NlcnRpb24gZmFpbGVkOiBlbmNDb250cm9sLT5uQ2hhbm5lbHNJbnRlcm5hbCA9PSAxIHx8IHBzRW5jLT5zdGF0ZV9GeHhbIDEgXS5zQ21uLmlucHV0QnVmSXggPT0gcHNFbmMtPnN0YXRlX0Z4eFsgMSBdLnNDbW4uZnJhbWVfbGVuZ3RoAGFzc2VydGlvbiBmYWlsZWQ6IHBzRW5jLT5zdGF0ZV9GeHhbIDAgXS5zQ21uLmlucHV0QnVmSXggPT0gcHNFbmMtPnN0YXRlX0Z4eFsgMCBdLnNDbW4uZnJhbWVfbGVuZ3RoAGFzc2VydGlvbiBmYWlsZWQ6IE9yZGVyIDw9IGxlbmd0aAAuL2NlbHQvcGl0Y2guaABhc3NlcnRpb24gZmFpbGVkOiBfdGhpcy0+b2ZmcytfdGhpcy0+ZW5kX29mZnM8PV9zaXplAGFzc2VydGlvbiBmYWlsZWQ6IEs+MAphbGdfdW5xdWFudCgpIG5lZWRzIGF0IGxlYXN0IG9uZSBwdWxzZQBhc3NlcnRpb24gZmFpbGVkOiBLPjAKYWxnX3F1YW50KCkgbmVlZHMgYXQgbGVhc3Qgb25lIHB1bHNlAGFzc2VydGlvbiBmYWlsZWQ6IGZpbiAhPSBmb3V0CkluLXBsYWNlIEZGVCBub3Qgc3VwcG9ydGVkAHNpbGsvY2hlY2tfY29udHJvbF9pbnB1dC5jAHNpbGsvc29ydC5jAGNlbHQvY2VsdC5jAGNlbHQva2lzc19mZnQuYwBjZWx0L2N3cnMuYwBzaWxrL2VuY29kZV9wdWxzZXMuYwBzaWxrL2VuY29kZV9pbmRpY2VzLmMAY2VsdC9iYW5kcy5jAHNpbGsvcHJvY2Vzc19OTFNGcy5jAHNpbGsvTFBDX2FuYWx5c2lzX2ZpbHRlci5jAHNpbGsvcmVzYW1wbGVyLmMAY2VsdC9jZWx0X2VuY29kZXIuYwBzcmMvb3B1c19lbmNvZGVyLmMAY2VsdC92cS5jAGNlbHQvcGl0Y2guYwBjZWx0L3JhdGUuYwBzaWxrL2ludGVycG9sYXRlLmMAc2lsay9OTFNGX2VuY29kZS5jAGNlbHQvbGFwbGFjZS5jAHNpbGsvc3RlcmVvX2VuY29kZV9wcmVkLmMAY2VsdC9jZWx0X2xwYy5jAGNlbHQvZW50ZW5jLmMAY2VsdC9lbnRkZWMuYwBzaWxrL2NvbnRyb2xfY29kZWMuYwBzaWxrL05TUV9kZWxfZGVjLmMAc2lsay9OTFNGX1ZRX3dlaWdodHNfbGFyb2lhLmMAc2lsay9yZXNhbXBsZXJfcHJpdmF0ZV9kb3duX0ZJUi5jAHNpbGsvTkxTRl9WUS5jAHNpbGsvTlNRLmMAc2lsay9mbG9hdC9hcHBseV9zaW5lX3dpbmRvd19GTFAuYwBzaWxrL2Zsb2F0L3NvcnRfRkxQLmMAc2lsay9mbG9hdC9maW5kX3BpdGNoX2xhZ3NfRkxQLmMAc2lsay9mbG9hdC9maW5kX3ByZWRfY29lZnNfRkxQLmMAc2lsay9mbG9hdC9zY2h1cl9GTFAuYwBzaWxrL2Zsb2F0L0xQQ19hbmFseXNpc19maWx0ZXJfRkxQLmMAc2lsay9mbG9hdC93YXJwZWRfYXV0b2NvcnJlbGF0aW9uX0ZMUC5jAHNpbGsvZmxvYXQvcGl0Y2hfYW5hbHlzaXNfY29yZV9GTFAuYwBzaWxrL2Zsb2F0L2VuY29kZV9mcmFtZV9GTFAuYwBzaWxrL2Zsb2F0L2J1cmdfbW9kaWZpZWRfRkxQLmMAc2lsay9mbG9hdC9maW5kX0xQQ19GTFAuYwBzaWxrL2VuY19BUEkuYwBzaWxrL1ZBRC5jAHNpbGsvTkxTRjJBLmMAYXNzZXJ0aW9uIGZhaWxlZDogQyplYml0c1tqXTw8QklUUkVTID09IGJpdHNbal0AYXNzZXJ0aW9uIGZhaWxlZDogY29tcGxleGl0eSA8PSBTSUxLX1BFX01BWF9DT01QTEVYAGFzc2VydGlvbiBmYWlsZWQ6IGNvbXBsZXhpdHkgPj0gU0lMS19QRV9NSU5fQ09NUExFWABhc3NlcnRpb24gZmFpbGVkOiBfbmJpdHM8PUVDX1NZTV9CSVRTAGFzc2VydGlvbiBmYWlsZWQ6IGl4WyBuIF1bIDEgXSA8IFNURVJFT19RVUFOVF9TVUJfU1RFUFMAYXNzZXJ0aW9uIGZhaWxlZDogcHNFbmNDLT5wcmVkaWN0TFBDT3JkZXIgPD0gTUFYX0xQQ19PUkRFUgBhc3NlcnRpb24gZmFpbGVkOiBwc0VuY0MtPnBpdGNoRXN0aW1hdGlvbkxQQ09yZGVyIDw9IE1BWF9GSU5EX1BJVENIX0xQQ19PUkRFUgBhc3NlcnRpb24gZmFpbGVkOiBlbmNDb250cm9sICE9IE5VTEwAYXNzZXJ0aW9uIGZhaWxlZDogTCA+PSBLAGFzc2VydGlvbiBmYWlsZWQ6IHN1YmZyX2xlbmd0aCAqIG5iX3N1YmZyIDw9IE1BWF9GUkFNRV9TSVpFAGFzc2VydGlvbiBmYWlsZWQ6IHN0LT5tb2RlID09IE1PREVfSFlCUklEIHx8IGN1cnJfYmFuZHdpZHRoID09IE9QVVNfQkFORFdJRFRIX1dJREVCQU5EAGFzc2VydGlvbiBmYWlsZWQ6IGxhZyA+IDAgfHwgc2lnbmFsVHlwZSAhPSBUWVBFX1ZPSUNFRABhc3NlcnRpb24gZmFpbGVkOiBvcmRlciA+PSAwICYmIG9yZGVyIDw9IFNJTEtfTUFYX09SREVSX0xQQwBhc3NlcnRpb24gZmFpbGVkOiBmbCtmczw9MzI3NjgAYXNzZXJ0aW9uIGZhaWxlZDogRnNfa0h6ID09IDgAYXNzZXJ0aW9uIGZhaWxlZDogcW4gPD0gMjU2AGFzc2VydGlvbiBmYWlsZWQ6IGQ9PTEwIHx8IGQ9PTE2AGFzc2VydGlvbiBmYWlsZWQ6IGZzX2tIeiA9PSA4IHx8IGZzX2tIeiA9PSAxMiB8fCBmc19rSHogPT0gMTYAYXNzZXJ0aW9uIGZhaWxlZDogRnNfa0h6ID09IDggfHwgRnNfa0h6ID09IDEyIHx8IEZzX2tIeiA9PSAxNgBhc3NlcnRpb24gZmFpbGVkOiBkID49IDYAYXNzZXJ0aW9uIGZhaWxlZDogdHlwZU9mZnNldCA+PSAwICYmIHR5cGVPZmZzZXQgPCA2AGFzc2VydGlvbiBmYWlsZWQ6IHBzUmFuZ2VFbmMtPm9mZnMgPD0gMTI3NQBhc3NlcnRpb24gZmFpbGVkOiBzUmFuZ2VFbmNfY29weTIub2ZmcyA8PSAxMjc1AGFzc2VydGlvbiBmYWlsZWQ6IG4gPCAyNQBhc3NlcnRpb24gZmFpbGVkOiBtPT00AGFzc2VydGlvbiBmYWlsZWQ6IHBzRW5jLT5zQ21uLm5iX3N1YmZyID09IDIgfHwgcHNFbmMtPnNDbW4ubmJfc3ViZnIgPT0gNABhc3NlcnRpb24gZmFpbGVkOiBpZmFjdF9RMiA8PSA0AGFzc2VydGlvbiBmYWlsZWQ6IGxlbj49MwBhc3NlcnRpb24gZmFpbGVkOiBpeFsgbiBdWyAwIF0gPCAzAGFzc2VydGlvbiBmYWlsZWQ6IF9uPj0yAGFzc2VydGlvbiBmYWlsZWQ6IGVuY29kZV9MQlJSID09IDAgfHwgdHlwZU9mZnNldCA+PSAyAGFzc2VydGlvbiBmYWlsZWQ6IHdpbl90eXBlID09IDEgfHwgd2luX3R5cGUgPT0gMgBhc3NlcnRpb24gZmFpbGVkOiBzaWduYWxUeXBlID49IDAgJiYgc2lnbmFsVHlwZSA8PSAyAGFzc2VydGlvbiBmYWlsZWQ6IHBzRW5jLT5zQ21uLmx0cF9tZW1fbGVuZ3RoIC0gcHNFbmMtPnNDbW4ucHJlZGljdExQQ09yZGVyID49IHBzRW5jQ3RybC0+cGl0Y2hMWyAwIF0gKyBMVFBfT1JERVIgLyAyAGFzc2VydGlvbiBmYWlsZWQ6IF9mdD4xAGFzc2VydGlvbiBmYWlsZWQ6IF9uPjEAYXNzZXJ0aW9uIGZhaWxlZDogbmJfc3ViZnIgPT0gUEVfTUFYX05CX1NVQkZSID4+IDEAYXNzZXJ0aW9uIGZhaWxlZDogZW5jQ29udHJvbC0+bkNoYW5uZWxzQVBJID09IDEgJiYgZW5jQ29udHJvbC0+bkNoYW5uZWxzSW50ZXJuYWwgPT0gMQBhc3NlcnRpb24gZmFpbGVkOiBjb3VudD4wAGFzc2VydGlvbiBmYWlsZWQ6IF9iaXRzPjAAYXNzZXJ0aW9uIGZhaWxlZDogZnM+MABhc3NlcnRpb24gZmFpbGVkOiBuYkJhbmRzPjAAYXNzZXJ0aW9uIGZhaWxlZDogbGVuPjAAYXNzZXJ0aW9uIGZhaWxlZDogbj4wAGFzc2VydGlvbiBmYWlsZWQ6IF9rPjAAYXNzZXJ0aW9uIGZhaWxlZDogbWF4X3BpdGNoPjAAYXNzZXJ0aW9uIGZhaWxlZDogc3RyaWRlPjAAYXNzZXJ0aW9uIGZhaWxlZDogZW5kPjAAYXNzZXJ0aW9uIGZhaWxlZDogb3ZlcmxhcD49MABhc3NlcnRpb24gZmFpbGVkOiBzdW0+PTAAYXNzZXJ0aW9uIGZhaWxlZDogaXRoZXRhPj0wAGFzc2VydGlvbiBmYWlsZWQ6IHN0LT5zaWduYWxsaW5nPT0wAGFzc2VydGlvbiBmYWlsZWQ6IENvbXBsZXhpdHkgPj0gMCAmJiBDb21wbGV4aXR5IDw9IDEwAGFzc2VydGlvbiBmYWlsZWQ6IGZyYW1lX2xlbmd0aCA9PSAxMiAqIDEwAGFzc2VydGlvbiBmYWlsZWQ6IHN0LT5zaWxrX21vZGUuaW50ZXJuYWxTYW1wbGVSYXRlID09IDE2MDAwAGFzc2VydGlvbiBmYWlsZWQ6IHN0YXJ0X2lkeCA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogblN0YXRlc0RlbGF5ZWREZWNpc2lvbiA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogbGVuZ3RoX2Rfc3JjaCA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogTiA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogTCA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogSyA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogRCA+IDAAYXNzZXJ0aW9uIGZhaWxlZDogTkxTRl9tdV9RMjAgPiAwAGFzc2VydGlvbiBmYWlsZWQ6ICpsYWdJbmRleCA+PSAwAGFzc2VydGlvbiBmYWlsZWQ6IGViaXRzW2pdID49IDAAYXNzZXJ0aW9uIGZhaWxlZDogYml0c1tqXSA+PSAwAGFzc2VydGlvbiBmYWlsZWQ6IGlmYWN0X1EyID49IDAAYXNzZXJ0aW9uIGZhaWxlZDogKGQgJiAxKSA9PSAwAGFzc2VydGlvbiBmYWlsZWQ6ICggbGVuZ3RoICYgMyApID09IDAAYXNzZXJ0aW9uIGZhaWxlZDogKCBMUENfb3JkZXIgJiAxICkgPT0gMABhc3NlcnRpb24gZmFpbGVkOiAoIG9yZGVyICYgMSApID09IDAAYXNzZXJ0aW9uIGZhaWxlZDogKCBzaGFwaW5nTFBDT3JkZXIgJiAxICkgPT0gMABhc3NlcnRpb24gZmFpbGVkOiAoIEQgJiAxICkgPT0gMABhc3NlcnRpb24gZmFpbGVkOiAwAGFzc2VydGlvbiBmYWlsZWQ6ICFjZWx0X2lzbmFuKG5vcm0pAChudWxsKQBhc3NlcnRpb24gZmFpbGVkOiAhY2VsdF9pc25hbih0bXBbMF0pAGFzc2VydGlvbiBmYWlsZWQ6ICFjZWx0X2lzbmFuKGZyZXFbMF0pICYmIChDPT0xIHx8ICFjZWx0X2lzbmFuKGZyZXFbTl0pKQBhc3NlcnRpb24gZmFpbGVkOiBwc0VuY0MtPmluZGljZXMuTkxTRkludGVycENvZWZfUTIgPT0gNCB8fCAoIHBzRW5jQy0+dXNlSW50ZXJwb2xhdGVkTkxT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AIIAsgDiAAYANgBmAJYAxgAWAEYAdgCmANYAJgBWAIYAtgDmAAoAOgBqAJoAygAaAEoAegCqANoAKgBaAIoAugDqAA4APgBuAJ4AzgAeAE4AfgCuAN4ALgBeAI4AvgDuAAMAMwBjAJMAwwATAEMAcwCjANMAIwBTAIMAswDjAAcANwBnAJcAxwAXAEcAdwCnANcAJwBXAIcAtwDnAAsAOwBrAJsAywAbAEsAewCrANsAKwBbAIsAuwDrAA8APwBvAJ8AzwAfAE8AfwCvAN8ALwBfAI8AvwDvAPAAAACJiIg7AQAAAAUAMAADABAABAAEAAQAAQBBrKYCCwYgkQAAIIIAQcKmAguJAhgAMABIAGAACAAgADgAUABoABAAKABAAFgAcAAEABwANABMAGQADAAkADwAVABsABQALABEAFwAdAABABkAMQBJAGEACQAhADkAUQBpABEAKQBBAFkAcQAFAB0ANQBNAGUADQAlAD0AVQBtABUALQBFAF0AdQACABoAMgBKAGIACgAiADoAUgBqABIAKgBCAFoAcgAGAB4ANgBOAGYADgAmAD4AVgBuABYALgBGAF4AdgADABsAMwBLAGMACwAjADsAUwBrABMAKwBDAFsAcwAHAB8ANwBPAGcADwAnAD8AVwBvABcALwBHAF8AdwB4AAAAiIgIPAIAAAAFABgAAwAIAAIABAAEAAEAQdyoAgsGQJMAACCCAEHyqAILjQEMABgAJAAwAAQAEAAcACgANAAIABQAIAAsADgAAQANABkAJQAxAAUAEQAdACkANQAJABUAIQAtADkAAgAOABoAJgAyAAYAEgAeACoANgAKABYAIgAuADoAAwAPABsAJwAzAAcAEwAfACsANwALABcAIwAvADsAPAAAAImIiDwDAAAABQAMAAMABAAEAAEAQZSqAguQAXCUAAAgggAAAAAAAJWLAAA3mAAA/6UAAAS1AABnxQAARdcAAMHqAAD//wAAAADOQAAAyEAAALhAAACqQAAAokAAAJpAAACQQAAAjEAAAJxAAACWQAAAkkAAAI5AAACcQAAAlEAAAIpAAACQQAAAjEAAAJRAAACYQAAAjkAAAHBAAABwQAAAcEAAAHBAAABwQABBsKsCC/ICSH9BgUKAQYBAgD6AQIBAgFxOXE9cTlpPdClzKHIohBqEGpERoQywCrELGLMwijaH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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}else{throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}}catch(err){abort(err)}}function instantiateSync(file,info){var instance;var module;var binary;try{binary=getBinary(file);module=new WebAssembly.Module(binary);instance=new WebAssembly.Instance(module,info)}catch(e){var str=e.toString();err("failed to compile wasm module: "+str);if(str.includes("imported Memory")||str.includes("memory import")){err("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).")}throw e}return[instance,module]}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["g"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["r"];addOnInit(Module["asm"]["h"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}var result=instantiateSync(wasmBinaryFile,info);receiveInstance(result[0]);return Module["asm"]}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();null;const OggOpusEncoder=function(config,Module){if(!Module){throw new Error("Module with exports required to initialize an encoder instance")}this.config=Object.assign({encoderApplication:2049,encoderFrameSize:20,encoderSampleRate:48e3,maxFramesPerPage:40,numberOfChannels:1,originalSampleRate:44100,resampleQuality:3,serial:Math.floor(Math.random()*4294967296)},config);this._opus_encoder_create=Module._opus_encoder_create;this._opus_encoder_destroy=Module._opus_encoder_destroy;this._opus_encoder_ctl=Module._opus_encoder_ctl;this._speex_resampler_process_interleaved_float=Module._speex_resampler_process_interleaved_float;this._speex_resampler_init=Module._speex_resampler_init;this._speex_resampler_destroy=Module._speex_resampler_destroy;this._opus_encode_float=Module._opus_encode_float;this._free=Module._free;this._malloc=Module._malloc;this.HEAPU8=Module.HEAPU8;this.HEAP32=Module.HEAP32;this.HEAPF32=Module.HEAPF32;this.pageIndex=0;this.granulePosition=0;this.segmentData=new Uint8Array(65025);this.segmentDataIndex=0;this.segmentTable=new Uint8Array(255);this.segmentTableIndex=0;this.framesInPage=0;this.initChecksumTable();this.initCodec();this.initResampler();if(this.config.numberOfChannels===1){this.interleave=function(buffers){return buffers[0]}}};OggOpusEncoder.prototype.encode=function(buffers){if(!this.bufferLength){this.bufferLength=buffers[0].length;this.interleavedBuffers=new Float32Array(this.bufferLength*this.config.numberOfChannels)}var samples=this.interleave(buffers);var sampleIndex=0;var exportPages=[];while(sampleIndex=this.config.maxFramesPerPage){exportPages.push(this.generatePage())}}}return exportPages};OggOpusEncoder.prototype.destroy=function(){if(this.encoder){this._free(this.encoderSamplesPerChannelPointer);delete this.encoderSamplesPerChannelPointer;this._free(this.encoderBufferPointer);delete this.encoderBufferPointer;this._free(this.encoderOutputPointer);delete this.encoderOutputPointer;this._free(this.resampleSamplesPerChannelPointer);delete this.resampleSamplesPerChannelPointer;this._free(this.resampleBufferPointer);delete this.resampleBufferPointer;this._speex_resampler_destroy(this.resampler);delete this.resampler;this._opus_encoder_destroy(this.encoder);delete this.encoder}};OggOpusEncoder.prototype.flush=function(){var exportPage;if(this.framesInPage){exportPage=this.generatePage()}this.resampleBufferIndex=0;return exportPage};OggOpusEncoder.prototype.encodeFinalFrame=function(){var exportPages=[];if(this.resampleBufferIndex>0){const dataToFill=(this.resampleBufferLength-this.resampleBufferIndex)/this.config.numberOfChannels;const numBuffers=Math.ceil(dataToFill/this.bufferLength);for(var i=0;i>>24&255^data[i]]}return checksum>>>0};OggOpusEncoder.prototype.generateCommentPage=function(){var segmentDataView=new DataView(this.segmentData.buffer);segmentDataView.setUint32(0,1937076303,true);segmentDataView.setUint32(4,1936154964,true);segmentDataView.setUint32(8,10,true);segmentDataView.setUint32(12,1868784978,true);segmentDataView.setUint32(16,1919247474,true);segmentDataView.setUint16(20,21322,true);segmentDataView.setUint32(22,0,true);this.segmentTableIndex=1;this.segmentDataIndex=this.segmentTable[0]=26;this.headerType=0;return this.generatePage()};OggOpusEncoder.prototype.generateIdPage=function(){var segmentDataView=new DataView(this.segmentData.buffer);segmentDataView.setUint32(0,1937076303,true);segmentDataView.setUint32(4,1684104520,true);segmentDataView.setUint8(8,1,true);segmentDataView.setUint8(9,this.config.numberOfChannels,true);segmentDataView.setUint16(10,3840,true);segmentDataView.setUint32(12,this.config.originalSampleRateOverride||this.config.originalSampleRate,true);segmentDataView.setUint16(16,0,true);segmentDataView.setUint8(18,0,true);this.segmentTableIndex=1;this.segmentDataIndex=this.segmentTable[0]=19;this.headerType=2;return this.generatePage()};OggOpusEncoder.prototype.generatePage=function(){var granulePosition=this.lastPositiveGranulePosition===this.granulePosition?-1:this.granulePosition;var pageBuffer=new ArrayBuffer(27+this.segmentTableIndex+this.segmentDataIndex);var pageBufferView=new DataView(pageBuffer);var page=new Uint8Array(pageBuffer);pageBufferView.setUint32(0,1399285583,true);pageBufferView.setUint8(4,0,true);pageBufferView.setUint8(5,this.headerType,true);pageBufferView.setUint32(6,granulePosition,true);if(granulePosition<0){pageBufferView.setInt32(10,Math.ceil(granulePosition/4294967297)-1,true)}else{pageBufferView.setInt32(10,Math.floor(granulePosition/4294967296),true)}pageBufferView.setUint32(14,this.config.serial,true);pageBufferView.setUint32(18,this.pageIndex++,true);pageBufferView.setUint8(26,this.segmentTableIndex,true);page.set(this.segmentTable.subarray(0,this.segmentTableIndex),27);page.set(this.segmentData.subarray(0,this.segmentDataIndex),27+this.segmentTableIndex);pageBufferView.setUint32(22,this.getChecksum(page),true);var exportPage={message:"page",page:page,samplePosition:this.granulePosition};this.segmentTableIndex=0;this.segmentDataIndex=0;this.framesInPage=0;if(granulePosition>0){this.lastPositiveGranulePosition=granulePosition}return exportPage};OggOpusEncoder.prototype.initChecksumTable=function(){this.checksumTable=[];for(var i=0;i<256;i++){var r=i<<24;for(var j=0;j<8;j++){r=(r&2147483648)!=0?r<<1^79764919:r<<1}this.checksumTable[i]=r&4294967295}};OggOpusEncoder.prototype.setOpusControl=function(control,value){var location=this._malloc(4);this.HEAP32[location>>2]=value;this._opus_encoder_ctl(this.encoder,control,location);this._free(location)};OggOpusEncoder.prototype.initCodec=function(){var errLocation=this._malloc(4);this.encoder=this._opus_encoder_create(this.config.encoderSampleRate,this.config.numberOfChannels,this.config.encoderApplication,errLocation);this._free(errLocation);if(this.config.encoderBitRate){this.setOpusControl(4002,this.config.encoderBitRate)}if(this.config.encoderComplexity){this.setOpusControl(4010,this.config.encoderComplexity)}this.encoderSamplesPerChannel=this.config.encoderSampleRate*this.config.encoderFrameSize/1e3;this.encoderSamplesPerChannelPointer=this._malloc(4);this.HEAP32[this.encoderSamplesPerChannelPointer>>2]=this.encoderSamplesPerChannel;this.encoderBufferLength=this.encoderSamplesPerChannel*this.config.numberOfChannels;this.encoderBufferPointer=this._malloc(this.encoderBufferLength*4);this.encoderBuffer=this.HEAPF32.subarray(this.encoderBufferPointer>>2,(this.encoderBufferPointer>>2)+this.encoderBufferLength);this.encoderOutputMaxLength=4e3;this.encoderOutputPointer=this._malloc(this.encoderOutputMaxLength);this.encoderOutputBuffer=this.HEAPU8.subarray(this.encoderOutputPointer,this.encoderOutputPointer+this.encoderOutputMaxLength)};OggOpusEncoder.prototype.initResampler=function(){var errLocation=this._malloc(4);this.resampler=this._speex_resampler_init(this.config.numberOfChannels,this.config.originalSampleRate,this.config.encoderSampleRate,this.config.resampleQuality,errLocation);this._free(errLocation);this.resampleBufferIndex=0;this.resampleSamplesPerChannel=this.config.originalSampleRate*this.config.encoderFrameSize/1e3;this.resampleSamplesPerChannelPointer=this._malloc(4);this.HEAP32[this.resampleSamplesPerChannelPointer>>2]=this.resampleSamplesPerChannel;this.resampleBufferLength=this.resampleSamplesPerChannel*this.config.numberOfChannels;this.resampleBufferPointer=this._malloc(this.resampleBufferLength*4);this.resampleBuffer=this.HEAPF32.subarray(this.resampleBufferPointer>>2,(this.resampleBufferPointer>>2)+this.resampleBufferLength)};OggOpusEncoder.prototype.interleave=function(buffers){for(var i=0;i=0){if(this.segmentTableIndex===255){exportPages.push(this.generatePage());this.headerType=1}var segmentLength=Math.min(packetLength,255);this.segmentTable[this.segmentTableIndex++]=segmentLength;this.segmentData.set(this.encoderOutputBuffer.subarray(packetIndex,packetIndex+segmentLength),this.segmentDataIndex);this.segmentDataIndex+=segmentLength;packetIndex+=segmentLength;packetLength-=255}this.granulePosition+=48*this.config.encoderFrameSize;if(this.segmentTableIndex===255){exportPages.push(this.generatePage());this.headerType=0}return exportPages};if(typeof registerProcessor==="function"){class EncoderWorklet extends AudioWorkletProcessor{constructor(){super();this.continueProcess=true;this.port.onmessage=(({data:data})=>{if(this.encoder){switch(data["command"]){case"getHeaderPages":this.postPage(this.encoder.generateIdPage());this.postPage(this.encoder.generateCommentPage());break;case"done":this.encoder.encodeFinalFrame().forEach(pageData=>this.postPage(pageData));this.encoder.destroy();delete this.encoder;this.port.postMessage({message:"done"});break;case"flush":this.postPage(this.encoder.flush());this.port.postMessage({message:"flushed"});break;default:}}switch(data["command"]){case"close":this.continueProcess=false;break;case"init":this.encoder=new OggOpusEncoder(data,Module);this.port.postMessage({message:"ready"});break;default:}})}process(inputs){if(this.encoder&&inputs[0]&&inputs[0].length&&inputs[0][0]&&inputs[0][0].length){this.encoder.encode(inputs[0]).forEach(pageData=>this.postPage(pageData))}return this.continueProcess}postPage(pageData){if(pageData){this.port.postMessage(pageData,[pageData.page.buffer])}}}registerProcessor("encoder-worklet",EncoderWorklet)}else{var encoder;var postPageGlobal=pageData=>{if(pageData){postMessage(pageData,[pageData.page.buffer])}};onmessage=(({data:data})=>{if(encoder){switch(data["command"]){case"encode":encoder.encode(data["buffers"]).forEach(pageData=>postPageGlobal(pageData));break;case"getHeaderPages":postPageGlobal(encoder.generateIdPage());postPageGlobal(encoder.generateCommentPage());break;case"done":encoder.encodeFinalFrame().forEach(pageData=>postPageGlobal(pageData));encoder.destroy();encoder=null;postMessage({message:"done"});break;case"flush":postPageGlobal(encoder.flush());postMessage({message:"flushed"});break;default:}}switch(data["command"]){case"close":close();break;case"init":encoder=new OggOpusEncoder(data,Module);postMessage({message:"ready"});break;default:}})}var module=module||{};module.exports={Module:Module,OggOpusEncoder:OggOpusEncoder}; diff --git a/main/manager-web/public/index.html b/main/manager-web/public/index.html index 40f0613c..23f19907 100644 --- a/main/manager-web/public/index.html +++ b/main/manager-web/public/index.html @@ -1,17 +1,33 @@ - - - - - - 小智-智控台 - - - -

- - - + + + + + + + + <%= process.env.VUE_APP_TITLE %> + + <% if (htmlWebpackPlugin.options.cdn) { %> + <% for (var i in htmlWebpackPlugin.options.cdn.css) { %> + + <% } %> + <% } %> + + + + +
+ + <% if (htmlWebpackPlugin.options.cdn) { %> + <% for (var i in htmlWebpackPlugin.options.cdn.js) { %> + + <% } %> + <% } %> + + + \ No newline at end of file diff --git a/main/manager-web/src/App.vue b/main/manager-web/src/App.vue index 9c7e6db7..85e03471 100644 --- a/main/manager-web/src/App.vue +++ b/main/manager-web/src/App.vue @@ -28,5 +28,5 @@ nav { } - \ No newline at end of file diff --git a/main/manager-web/src/apis/api.js b/main/manager-web/src/apis/api.js index 2f789925..97ab1e74 100755 --- a/main/manager-web/src/apis/api.js +++ b/main/manager-web/src/apis/api.js @@ -7,7 +7,7 @@ import admin from './module/admin.js' * 如果你想调用8002端口,就用'/xiaozhi-esp32-api/api/v1',请与vue.config.js的devServer配置相结合,方便跨域请求 * */ -const DEV_API_SERVICE = 'https://apifoxmock.com/m1/5931378-5618560-default' +// const DEV_API_SERVICE = 'https://2662r3426b.vicp.fun/xiaozhi-esp32-api' // 8002开发完成完成后使用这个 // const DEV_API_SERVICE = '/xiaozhi-esp32-api' @@ -16,7 +16,7 @@ const DEV_API_SERVICE = 'https://apifoxmock.com/m1/5931378-5618560-default' * @returns {string} */ export function getServiceUrl() { - return DEV_API_SERVICE + return '/xiaozhi-esp32-api' } diff --git a/main/manager-web/src/apis/httpRequest.js b/main/manager-web/src/apis/httpRequest.js index 98f47bf7..4d8093d3 100755 --- a/main/manager-web/src/apis/httpRequest.js +++ b/main/manager-web/src/apis/httpRequest.js @@ -105,11 +105,12 @@ function httpHandlerError(info, callBack) { /** 请求成功,退出该函数 可以根据项目需求来判断是否请求成功。这里判断的是status为200的时候是成功 */ let networkError = false if (info.status === 200) { - if (info.data.code === 'success' || info.data.code === 0 || info.data.code === undefined) { return networkError }else if (info.data.code === 401) { - goToPage(Constant.PAGE.LOGIN, true) + console.log('触发 401,清除 Token 并跳转登录页'); + store.commit('clearAuth'); + window.location.href = '/login'; return true } else { showDanger(info.data.msg) diff --git a/main/manager-web/src/apis/module/admin.js b/main/manager-web/src/apis/module/admin.js index 52468d6b..977437ab 100644 --- a/main/manager-web/src/apis/module/admin.js +++ b/main/manager-web/src/apis/module/admin.js @@ -5,16 +5,19 @@ import {getServiceUrl} from '../api' export default { // 用户列表 getUserList(callback) { - RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/admin/users`) + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/admin/users`) .method('GET') .success((res) => { RequestService.clearRequestTime() callback(res) }) - .fail(() => { + .fail((err) => { + console.error('请求失败:', err) RequestService.reAjaxFun(() => { - this.getList() + this.getUserList(callback) }) - }).send() - }, + }) + .send() + } } diff --git a/main/manager-web/src/apis/module/user.js b/main/manager-web/src/apis/module/user.js index 66fefdbc..5ce20941 100755 --- a/main/manager-web/src/apis/module/user.js +++ b/main/manager-web/src/apis/module/user.js @@ -138,8 +138,8 @@ export default { .url(`${getServiceUrl()}/api/v1/user/change-password`) .method('PUT') .data({ - old_password: oldPassword, - new_password: newPassword, + password: oldPassword, + newPassword: newPassword, }) .success((res) => { RequestService.clearRequestTime(); @@ -186,7 +186,6 @@ export default { }, // 已绑设备 getAgentBindDevices(agentId, callback) { - console.log("77777777777777777777777") RequestService.sendRequest() .url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agentId}`) .method('GET') @@ -219,7 +218,6 @@ export default { }, // 绑定设备 bindDevice(agentId, code, callback) { - console.log("32323234343434344340000") RequestService.sendRequest() .url(`${getServiceUrl()}/api/v1/user/agent/device/bind/${agentId}`) .method('POST') @@ -229,10 +227,26 @@ export default { callback(res); }) .fail((err) => { - // console.error('绑定设备失败:', err); - // RequestService.reAjaxFun(() => { - // this.bindDevice(agentId, code, callback); - // }); + console.error('绑定设备失败:', err); + RequestService.reAjaxFun(() => { + this.bindDevice(agentId, code, callback); + }); }).send(); }, + // 新增方法:获取智能体模板 + getAgentTemplate(templateName, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/user/agent/templateId`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime(); + callback(res); + }) + .fail((err) => { + console.error('获取模板失败:', err); + RequestService.reAjaxFun(() => { + this.getAgentTemplate(templateName, callback); + }); + }).send(); + }, } diff --git a/main/manager-web/src/assets/header/model_config.png b/main/manager-web/src/assets/header/model_config.png new file mode 100644 index 00000000..407e0a48 Binary files /dev/null and b/main/manager-web/src/assets/header/model_config.png differ diff --git a/main/manager-web/src/assets/header/robot.png b/main/manager-web/src/assets/header/robot.png new file mode 100644 index 00000000..a1d7f7c5 Binary files /dev/null and b/main/manager-web/src/assets/header/robot.png differ diff --git a/main/manager-web/src/assets/header/user_management.png b/main/manager-web/src/assets/header/user_management.png new file mode 100644 index 00000000..ce633674 Binary files /dev/null and b/main/manager-web/src/assets/header/user_management.png differ diff --git a/main/manager-web/src/assets/login/background.png b/main/manager-web/src/assets/login/background.png index e81d6ecc..4c9c7693 100644 Binary files a/main/manager-web/src/assets/login/background.png and b/main/manager-web/src/assets/login/background.png differ diff --git a/main/manager-web/src/assets/model/inner_conf.png b/main/manager-web/src/assets/model/inner_conf.png new file mode 100644 index 00000000..d750d05a Binary files /dev/null and b/main/manager-web/src/assets/model/inner_conf.png differ diff --git a/main/manager-web/src/assets/model/model.png b/main/manager-web/src/assets/model/model.png index e7b6c257..c7515f4e 100644 Binary files a/main/manager-web/src/assets/model/model.png and b/main/manager-web/src/assets/model/model.png differ diff --git a/main/manager-web/src/assets/model/output_conf.png b/main/manager-web/src/assets/model/output_conf.png new file mode 100644 index 00000000..f09b121e Binary files /dev/null and b/main/manager-web/src/assets/model/output_conf.png differ diff --git a/main/manager-web/src/assets/welcome/background.png b/main/manager-web/src/assets/welcome/background.png index b39cbebb..d8841e1a 100644 Binary files a/main/manager-web/src/assets/welcome/background.png and b/main/manager-web/src/assets/welcome/background.png differ diff --git a/main/manager-web/src/components/ActivateDeviceDialog.vue b/main/manager-web/src/components/ActivateDeviceDialog.vue new file mode 100644 index 00000000..59384e79 --- /dev/null +++ b/main/manager-web/src/components/ActivateDeviceDialog.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/main/manager-web/src/components/AddDeviceDialog.vue b/main/manager-web/src/components/AddDeviceDialog.vue index 6c99a038..129ed156 100644 --- a/main/manager-web/src/components/AddDeviceDialog.vue +++ b/main/manager-web/src/components/AddDeviceDialog.vue @@ -44,9 +44,6 @@ export default { }, methods: { confirm() { - // console.log(this.agentId) - // console.log("=========") - // console.log(this.$route.query.agentId) if (!/^\d{6}$/.test(this.deviceCode)) { this.$message.error('请输入6位数字验证码'); return; diff --git a/main/manager-web/src/components/AddWisdomBodyDialog.vue b/main/manager-web/src/components/AddWisdomBodyDialog.vue index cca026ef..f143a522 100644 --- a/main/manager-web/src/components/AddWisdomBodyDialog.vue +++ b/main/manager-web/src/components/AddWisdomBodyDialog.vue @@ -2,7 +2,7 @@
- +
添加智慧体
diff --git a/main/manager-web/src/components/ChangePasswordDialog.vue b/main/manager-web/src/components/ChangePasswordDialog.vue index 19c20fd6..5d1217ef 100644 --- a/main/manager-web/src/components/ChangePasswordDialog.vue +++ b/main/manager-web/src/components/ChangePasswordDialog.vue @@ -1,57 +1,59 @@ \ No newline at end of file diff --git a/main/manager-web/src/main.js b/main/manager-web/src/main.js index 2b6531df..d12bf731 100644 --- a/main/manager-web/src/main.js +++ b/main/manager-web/src/main.js @@ -5,6 +5,7 @@ import store from './store' import 'normalize.css/normalize.css' // A modern alternative to CSS resets import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; +import './styles/global.scss' Vue.use(ElementUI); Vue.config.productionTip = false diff --git a/main/manager-web/src/router/index.js b/main/manager-web/src/router/index.js index 6bc58823..007e33aa 100644 --- a/main/manager-web/src/router/index.js +++ b/main/manager-web/src/router/index.js @@ -62,6 +62,13 @@ const routes = [ return import('../views/ModelConfig.vue') } }, + { + path: '/test', + name: 'TestServer', + component: function () { + return import('../views/test.vue') + } + }, ] @@ -69,4 +76,22 @@ const router = new VueRouter({ routes }) +// 需要登录才能访问的路由 +const protectedRoutes = ['home', 'RoleConfig', 'DeviceManagement', 'UserManagement', 'ModelConfig'] + +// 路由守卫 +router.beforeEach((to, from, next) => { + // 检查是否是需要保护的路由 + if (protectedRoutes.includes(to.name)) { + // 从localStorage获取token + const token = localStorage.getItem('token') + if (!token) { + // 未登录,跳转到登录页 + next({ name: 'login', query: { redirect: to.fullPath } }) + return + } + } + next() +}) + export default router diff --git a/main/manager-web/src/store/index.js b/main/manager-web/src/store/index.js index 0f810894..d0292a63 100644 --- a/main/manager-web/src/store/index.js +++ b/main/manager-web/src/store/index.js @@ -6,7 +6,8 @@ Vue.use(Vuex) export default new Vuex.Store({ state: { - token: '' + token: '', + userInfo: {} // 添加用户信息存储 }, getters: { getToken(state) { @@ -14,16 +15,34 @@ export default new Vuex.Store({ state.token = localStorage.getItem('token') } return state.token + }, + getUserInfo(state) { + return state.userInfo } }, mutations: { setToken(state, token) { state.token = token - localStorage.token = token + localStorage.setItem('token', token) + }, + setUserInfo(state, userInfo) { + state.userInfo = userInfo + }, + clearAuth(state) { + state.token = '' + state.userInfo = {} + localStorage.removeItem('token') } }, actions: { + // 添加 logout action + logout({ commit }) { + return new Promise((resolve) => { + commit('clearAuth') + window.location.href = '/login'; + }) + } }, modules: { } -}) +}) \ No newline at end of file diff --git a/main/manager-web/src/styles/global.scss b/main/manager-web/src/styles/global.scss new file mode 100644 index 00000000..dfc8e51b --- /dev/null +++ b/main/manager-web/src/styles/global.scss @@ -0,0 +1,14 @@ +// 覆盖 autofill 样式 +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +textarea:-webkit-autofill, +textarea:-webkit-autofill:hover, +textarea:-webkit-autofill:focus, +select:-webkit-autofill, +select:-webkit-autofill:hover, +select:-webkit-autofill:focus { + -webkit-box-shadow: 0 0 0px 1000px transparent inset; + transition: background-color 5000s ease-in-out 0s; + background-color: transparent; +} \ No newline at end of file diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index 4c6aed4c..5dd107f1 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -3,19 +3,22 @@
- +

模型配置

- + 语音设置 - + + 导入配置 - + + 导出配置
+
@@ -61,12 +64,12 @@
- + - + @@ -82,10 +85,10 @@ - +