diff --git a/.gitignore b/.gitignore index 0d196cecf..625190ea5 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,8 @@ streamis-appconn/target /streamis-jobmanager/streamis-job-log/job-log-collector/xspark-streamis-log-collector/target/ /streamis-jobmanager/streamis-job-log/streamis-job-log-common/target/ /streamis-jobmanager/streamis-job-log/streamis-job-log-server/target/ +/streamis-jobmanager/streamis-job-errorcode/target/ +/streamis-jobmanager/streamis-job-audit-log/target/ + +**/._* +**/.flattened-pom.xml diff --git a/README-ZH.md b/README-ZH.md index 977101b75..aa31ce6f8 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -52,7 +52,7 @@ Dimension节点、Transform节点、Sink节点 和 [Visualis](https://github.com ## 依赖的生态组件 -| 依赖的应用工具 | 描述 | Streamis 兼容版本 | +| 依赖的应用工具 | 描述 | Streamis 兼容版本 | |--------------|---------------------------------------------------------------|---------------------------------------------| | [DataSphereStudio](https://github.com/WeBankFinTech/DataSphereStudio) | 数据应用开发管理集成框架。以工作流式的图形化拖拽开发体验,将满足从数据交换、脱敏清洗、分析挖掘、质量检测、可视化展现、定时调度到数据输出应用等,数据应用开发全流程场景需求。 | >= DSS1.1.2(已发布) | | [Linkis](https://github.com/apache/incubator-linkis) | 计算中间件 Apache Linkis,通过提供 REST/WebSocket/JDBC/SDK 等标准接口,上层应用可以方便地连接访问 MySQL/Spark/Hive/Presto/Flink 等底层引擎。 | >= Linkis1.4.0(已发布) | diff --git a/README.md b/README.md index e9a4753f6..6073a826f 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ The Dimension node, Transform node, Sink node and [Visualis](https://github.com/ ## Depended ecosystems -| Depended Component | Description | Streamis compatibility | +| Depended Component | Description | Streamis compatibility | | -------------- | -------------------------------------------------------------- |------------------------------| | [DataSphereStudio](https://github.com/WeBankFinTech/DataSphereStudio) | Data application development management framework. With a unified UI, the workflow-like graphical drag-and-drop development experience meets the entire lifecycle of data application development from data import, desensitization cleaning, data analysis, data mining, quality inspection, visualization, scheduling to data output applications, etc. | >= DSS1.1.2 (Released) | | [Linkis](https://github.com/apache/linkis) | Apache Linkis, builds a layer of computation middleware, by using standard interfaces such as REST/WS/JDBC provided by Linkis, the upper applications can easily access the underlying engines such as MySQL/Spark/Hive/Presto/Flink, etc. | >= Linkis1.4.0 (Released) | @@ -115,7 +115,7 @@ please refer to [Streamis Installation and Deployment Document](docs/en_US/0.3.0        For any questions or suggestions, please kindly submit an [issue](https://github.com/WeBankFinTech/Streamis/issues). -       You can scan the QR code below to join our WeChat group to get more immediate response. +       You can scan the QR code below to join our WeChat and QQ group to get more immediate response. ![comminicate](images/zh_CN/readme/communication.png) diff --git a/assembly/pom.xml b/assembly/pom.xml index 002ccdadc..fef17c40b 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -20,7 +20,7 @@ streamis com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/conf/config.sh b/conf/config.sh index c0c6536e4..b1a22f287 100644 --- a/conf/config.sh +++ b/conf/config.sh @@ -40,6 +40,6 @@ GATEWAY_PORT=9001 STREAMIS_SERVER_INSTALL_IP=127.0.0.1 STREAMIS_SERVER_INSTALL_PORT=9400 -STREAMIS_VERSION=0.3.0 +STREAMIS_VERSION=0.3.1 STREAMIS_FILE_NAME="STREAMIS-$STREAMIS_VERSION" \ No newline at end of file diff --git a/db/streamis_ddl.sql b/db/streamis_ddl.sql index 0ca5a47cd..5f3108bee 100644 --- a/db/streamis_ddl.sql +++ b/db/streamis_ddl.sql @@ -222,6 +222,7 @@ CREATE TABLE `linkis_stream_task` ( `submit_user` varchar(50) DEFAULT NULL, `linkis_job_id` varchar(200) DEFAULT NULL, `linkis_job_info` mediumtext, + `job_start_config` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'streamis job startup config', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='任务表'; @@ -252,9 +253,39 @@ CREATE TABLE `linkis_stream_project_privilege` ( ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='项目权限表'; +DROP TABLE IF EXISTS `linkis_stream_error_code`; + +CREATE TABLE `linkis_stream_error_code` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `error_code` varchar(50) COLLATE utf8_bin NOT NULL, + `error_desc` varchar(1024) COLLATE utf8_bin NOT NULL, + `error_regex` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `error_type` int(3) DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +DROP TABLE IF EXISTS `linkis_stream_audit_log`; + +CREATE TABLE `linkis_stream_audit_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `proxy_user` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_name` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_type` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `operate_time` datetime DEFAULT NULL, + `input_parameters` text COLLATE utf8_bin, + `output_parameters` text COLLATE utf8_bin, + `project_name` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `client_ip` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `cost_time_mills` bigint(20) NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + ALTER TABLE `linkis_stream_project` ADD create_time datetime DEFAULT NULL; ALTER TABLE `linkis_stream_project` ADD last_update_by varchar(50) DEFAULT NULL; ALTER TABLE `linkis_stream_project` ADD last_update_time datetime DEFAULT NULL; ALTER TABLE `linkis_stream_project` ADD is_deleted tinyint unsigned DEFAULT 0; - +ALTER TABLE linkis_stream_project_files ADD source varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL; SET FOREIGN_KEY_CHECKS = 1; diff --git a/db/streamis_dml.sql b/db/streamis_dml.sql index 81561d752..f9ef2c525 100644 --- a/db/streamis_dml.sql +++ b/db/streamis_dml.sql @@ -17,10 +17,455 @@ INSERT INTO `linkis_stream_job_config_def` VALUES (12,'wds.linkis.flink.alert.ru INSERT INTO `linkis_stream_job_config_def` VALUES (13,'wds.linkis.flink.alert.user','告警用户','NONE',0,'告警用户',NULL,NULL,'',1,1,NULL,NULL,'',NULL,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (14,'wds.linkis.flink.alert.level','告警级别','NONE',0,'告警级别','None',NULL,'',1,1,NULL,NULL,'',NULL,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (15,'wds.linkis.flink.alert.failure.level','失败时告警级别','NONE',0,'失败时告警级别','None',NULL,'',1,1,NULL,NULL,'',NULL,0,0); -INSERT INTO `linkis_stream_job_config_def` VALUES (16,'wds.linkis.flink.alert.failure.user','失败时告警用户','INPUT',0,'失败时告警用户','None',NULL,'',1,1,NULL,NULL,'',NULL,0,0); +INSERT INTO `linkis_stream_job_config_def` VALUES (16, 'wds.linkis.flink.alert.failure.user', '失败时告警用户', 'INPUT', 0, '失败时告警用户', 'None', NULL, '', 1, 1, NULL, '', '', 8, 0, 0); INSERT INTO `linkis_stream_job_config_def` VALUES (32,'wds.linkis.flink.authority','权限设置','NONE',0,'权限设置','None',NULL,'',1,0,NULL,NULL,'',NULL,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (33,'wds.linkis.flink.authority.visible','可见人员','INPUT',0,'可见人员','None',NULL,'',1,1,NULL,NULL,'',32,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (34,'wds.linkis.rm.yarnqueue','使用Yarn队列','INPUT',0,'使用Yarn队列','None',NULL,'',1,1,NULL,NULL,'',1,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (35,'wds.linkis.flink.app.fail-restart.switch','作业失败自动拉起开关','SELECT',1,'作业失败自动拉起开关','None',NULL,'',1,1,NULL,'OFF','ON,OFF',8,0,0); INSERT INTO `linkis_stream_job_config_def` VALUES (36,'wds.linkis.flink.app.start-auto-restore.switch','作业启动状态自恢复','SELECT',2,'作业启动状态自恢复','None',NULL,'',1,1,NULL,'ON','ON,OFF',8,0,0); -INSERT INTO `linkis_stream_job_config_def` VALUES (38, 'linkis.ec.app.manage.mode', '管理模式', 'SELECT', 3, 'EngineConn管理模式', 'None', NULL, '', 1, 1, NULL, 'attach', 'detach,attach', 8, 0, 0); +INSERT INTO `linkis_stream_job_config_def` VALUES (38, 'linkis.ec.app.manage.mode', '管理模式', 'SELECT', 3, 'EngineConn管理模式', 'None', NULL, '', 1, 1, NULL, 'detach', 'detach,attach', 8, 0, 0); + +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01001', '您的任务没有路由到后台ECM,请联系管理员', 'The em of labels', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01002', 'Linkis服务负载过高,请联系管理员扩容', 'Unexpected end of file from server', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01003', 'Linkis服务负载过高,请联系管理员扩容', 'failed to ask linkis Manager Can be retried SocketTimeoutException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01004', '引擎在启动时被Kill,请联系管理员', ' [0-9]+ Killed', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01005', '请求Yarn获取队列信息重试2次仍失败,请联系管理员', 'Failed to request external resourceClassCastException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01101', 'ECM资源不足,请联系管理员扩容', 'ECM resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01102', 'ECM 内存资源不足,请联系管理员扩容', 'ECM memory resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01103', 'ECM CPU资源不足,请联系管理员扩容', 'ECM CPU resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01004', 'ECM 实例资源不足,请联系管理员扩容', 'ECM Insufficient number of instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01005', '机器内存不足,请联系管理员扩容', 'Cannot allocate memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12001', '队列CPU资源不足,可以调整Spark执行器个数', 'Queue CPU resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12002', '队列内存资源不足,可以调整Spark执行器个数', 'Insufficient queue memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12003', '队列实例数超过限制', 'Insufficient number of queue instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12004', '全局驱动器内存使用上限,可以设置更低的驱动内存', 'Drive memory resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12005', '超出全局驱动器CPU个数上限,可以清理空闲引擎', 'Drive core resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12006', '超出引擎最大并发数上限,可以清理空闲引擎', 'Insufficient number of instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12008', '获取Yarn队列信息异常,可能是您设置的yarn队列不存在', '获取Yarn队列信息异常', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12009', '会话创建失败,%s队列不存在,请检查队列设置是否正确', 'queue (\\S+) is not exists in YARN', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12010', '集群队列内存资源不足,可以联系组内人员释放资源', 'Insufficient cluster queue memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12011', '集群队列CPU资源不足,可以联系组内人员释放资源', 'Insufficient cluster queue cpu', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12012', '集群队列实例数超过限制', 'Insufficient cluster queue instance', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12013', '资源不足导致启动引擎超时,您可以进行任务重试', 'wait for DefaultEngineConn', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12014', '请求引擎超时,可能是因为队列资源不足导致,请重试', 'wait for engineConn initial timeout', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13001', 'Java进程内存溢出,建议优化脚本内容', 'OutOfMemoryError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13002', '使用资源过大,请调优sql或者加大资源', 'Container killed by YARN for exceeding memory limits', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13003', '使用资源过大,请调优sql或者加大资源', 'read record exception', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13004', '引擎意外退出,可能是使用资源过大导致', 'failed because the engine quitted unexpectedly', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13005', 'Spark app应用退出,可能是复杂任务导致', 'Spark application has already stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13006', 'Spark context退出,可能是复杂任务导致', 'Spark application sc has already stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13007', 'Pyspark子进程意外退出,可能是复杂任务导致', 'Pyspark process has stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21001', '会话创建失败,用户%s不能提交应用到队列:%s,请联系提供队列给您的人员', 'User (\\S+) cannot submit applications to queue (\\S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21002', '创建Python解释器失败,请联系管理员', 'initialize python executor failed', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21003', '创建单机Python解释器失败,请联系管理员', 'PythonSession process cannot be initialized', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22001', '%s无权限访问,请申请开通数据表权限,请联系您的数据管理人员', 'Permission denied:\\s*user=[a-zA-Z0-9_]+,\\s*access=[A-Z]+\\s*,\\s*inode="([a-zA-Z0-9/_\\.]+)"', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22003', '所查库表无权限', 'Authorization failed:No privilege', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22004', '用户%s在机器不存在,请确认是否申请了相关权限', 'user (\\S+) does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22005', '用户在机器不存在,请确认是否申请了相关权限', 'engineConnExec.sh: Permission denied', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22006', '用户在机器不存在,请确认是否申请了相关权限', 'at com.sun.security.auth.UnixPrincipal', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22007', '用户在机器不存在,请确认是否申请了相关权限', 'LoginException: java.lang.NullPointerException: invalid null input: name', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22008', '用户在机器不存在,请确认是否申请了相关权限', 'User not known to the underlying authentication module', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22009', '用户组不存在', 'FileNotFoundException: /tmp/?', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22010', '用户组不存在', 'error looking up the name of group', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('30001', '库超过限制', 'is exceeded', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('31001', '用户主动kill任务', 'is killed by user', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('31002', '您提交的EngineTypeLabel没有对应的引擎版本', 'EngineConnPluginNotFoundException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41001', '数据库%s不存在,请检查引用的数据库是否有误', 'Database ''([a-zA-Z_0-9]+)'' not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41001', '数据库%s不存在,请检查引用的数据库是否有误', 'Database does not exist: ([a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table or view not found: ([`\\.a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table not found ''([a-zA-Z_0-9]+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table ([a-zA-Z_0-9]+) not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', 'cannot resolve ''`(.+)`'' given input columns', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', ' Invalid table alias or column reference ''(.+)'':', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', 'Column ''(.+)'' cannot be resolved', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表%s是否为分区表或分区字段有误', '([a-zA-Z_0-9]+) is not a valid partition column in table ([`\\.a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表是否为分区表或分区字段有误', 'Partition spec \\{(\\S+)\\} contains non-partition columns', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表是否为分区表或分区字段有误', 'table is not partitioned but partition spec exists:\\{(.+)\\}', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '表对应的路径不存在,请联系您的数据管理人员', 'Path does not exist: viewfs', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41005', '文件%s不存在', 'Caused by:\\s*java.io.FileNotFoundException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42001', '括号不匹配,请检查代码中括号是否前后匹配', 'extraneous input ''\\)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'expression ''(\\S+)'' is neither present in the group by', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'grouping expressions sequence is empty,\\s?and ''(\\S+)'' is not an aggregate function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'Expression not in GROUP BY key ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42003', '未知函数%s,请检查代码中引用的函数是否有误', 'Undefined function: ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42003', '未知函数%s,请检查代码中引用的函数是否有误', 'Invalid function ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42004', '字段%s存在名字冲突,请检查子查询内是否有同名字段', 'Reference ''(\\S+)'' is ambiguous', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42004', '字段%s存在名字冲突,请检查子查询内是否有同名字段', 'Ambiguous column Reference ''(\\S+)'' in subquery', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42005', '字段%s必须指定表或者子查询别名,请检查该字段来源', 'Column ''(\\S+)'' Found in more than One Tables/Subqueries', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库%s中已经存在,请删除相应表后重试', 'Table or view ''(\\S+)'' already exists in database ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'Table (\\S+) already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'Table already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'AnalysisException: (S+) already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42007', '插入目标表字段数量不匹配,请检查代码!', 'requires that the data to be inserted have the same number of columns as the target table', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42008', '数据类型不匹配,请检查代码!', 'due to data type mismatch: differing types in', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42009', '字段%s引用有误,请检查字段是否存在!', 'Invalid column reference (S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42010', '字段%s提取数据失败', 'Can''t extract value from (S+): need', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42011', '括号或者关键字不匹配,请检查代码!', 'mismatched input ''(\\S+)'' expecting', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42012', 'group by 位置2不在select列表中,请检查代码!', 'GROUP BY position (S+) is not in select list', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42013', '字段提取数据失败请检查字段类型', 'Can''t extract value from (S+): need struct type but got string', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42014', '插入数据未指定目标表字段%s,请检查代码!', 'Cannot insert into target table because column number/types are different ''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42015', '表别名%s错误,请检查代码!', 'Invalid table alias ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42016', 'UDF函数未指定参数,请检查代码!', 'UDFArgumentException Argument expected', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42017', '聚合函数%s不能写在group by 中,请检查代码!', 'aggregate functions are not allowed in GROUP BY', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42018', '您的代码有语法错误,请您修改代码之后执行', 'SemanticException Error in parsing', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42019', '表不存在,请检查引用的表是否有误', 'table not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42020', '函数使用错误,请检查您使用的函数方式', 'No matching method', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42021', '您的sql代码可能有语法错误,请检查sql代码', 'FAILED: ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42022', '您的sql代码可能有语法错误,请检查sql代码', 'org.apache.spark.sql.catalyst.parser.ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42022', '您的sql代码可能有语法错误,请检查sql代码', 'org.apache.hadoop.hive.ql.parse.ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42023', '聚合函数不能嵌套', 'aggregate function in the argument of another aggregate function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42024', '聚合函数不能嵌套', 'aggregate function parameters overlap with the aggregation', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'union 的左右查询字段不一致', 'Union can only be performed on tables', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'hql报错,union 的左右查询字段不一致', 'both sides of union should match', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'union左表和右表类型不一致', 'on first table and type', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42026', '您的建表sql不能推断出列信息', 'Unable to infer the schema', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42027', '动态分区的严格模式需要指定列,您可用通过设置set hive.exec.dynamic.partition.mode=nostrict', 'requires at least one static partition', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42028', '函数输入参数有误', 'Invalid number of arguments for function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42029', 'sql语法报错,select * 与group by无法一起使用', 'not allowed in select list when GROUP BY ordinal', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42030', 'where/having子句之外不支持引用外部查询的表达式', 'the outer query are not supported outside of WHERE', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42031', 'sql语法报错,group by 后面不能跟一个表', 'show up in the GROUP BY list', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42032', 'hql报错,窗口函数中的字段重复', 'check for circular dependencies', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42033', 'sql中出现了相同的字段', 'Found duplicate column', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42034', 'sql语法不支持', 'not supported in current context', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42035', 'hql语法报错,嵌套子查询语法问题', 'Unsupported SubQuery Expression', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42036', 'hql报错,子查询中in 用法有误', 'in definition of SubQuery', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43037', '表字段类型修改导致的转型失败,请联系修改人员', 'cannot be cast to', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43038', 'select 的表可能有误', 'Invalid call to toAttribute on unresolved object', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43039', '语法问题,请检查脚本', 'Distinct window functions are not supported', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43040', 'Presto查询一定要指定数据源和库信息', 'Schema must be specified when session schema is not set', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43001', '代码中存在NoneType空类型变量,请检查代码', '''NoneType'' object', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43002', '数组越界', 'IndexError:List index out of range', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43003', '您的代码有语法错误,请您修改代码之后执行', 'SyntaxError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43004', 'python代码变量%s未定义', 'name ''(S+)'' is not defined', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43005', 'python udf %s 未定义', 'Undefined function:s+''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43006', 'python执行不能将%s和%s两种类型进行连接', 'cannot concatenate ''(S+)'' and ''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43007', 'pyspark执行失败,可能是语法错误或stage失败', 'Py4JJavaError: An error occurred', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43008', 'python代码缩进对齐有误', 'unexpected indent', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43009', 'python代码缩进有误', 'unexpected indent', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43010', 'python代码反斜杠后面必须换行', 'unexpected character after line', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43011', '导出Excel表超过最大限制1048575', 'Invalid row number', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43012', 'python save as table未指定格式,默认用parquet保存,hive查询报错', 'parquet.io.ParquetDecodingException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43013', '索引使用错误', 'IndexError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43014', 'sql语法有问题', 'raise ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46001', '找不到导入文件地址:%s', 'java.io.FileNotFoundException: (\\S+) \\(No such file or directory\\)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46002', '导出为excel时临时文件目录权限异常', 'java.io.IOException: Permission denied(.+)at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46003', '导出文件时无法创建目录:%s', 'java.io.IOException: Mkdirs failed to create (\\S+) (.+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46004', '导入模块错误,系统没有%s模块,请联系运维人员安装', 'ImportError: No module named (S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91001', '找不到变量值,请确认您是否设置相关变量', 'not find variable substitution for', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91002', '不存在的代理用户,请检查你是否申请过平台层(bdp或者bdap)用户', 'failed to change current working directory ownership', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91003', '请检查提交用户在WTSS内是否有该代理用户的权限,代理用户中是否存在特殊字符,是否用错了代理用户,OS层面是否有该用户,系统设置里面是否设置了该用户为代理用户', '没有权限执行当前任务', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91004', '平台层不存在您的执行用户,请在ITSM申请平台层(bdp或者bdap)用户', '使用chown命令修改', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91005', '未配置代理用户,请在ITSM走WTSS用户变更单,为你的用户授权改代理用户', '请联系系统管理员为您的用户添加该代理用户', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91006', '您的用户初始化有问题,请联系管理员', 'java: No such file or directory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91007', 'JobServer中不存在您的脚本文件,请将你的脚本文件放入对应的JobServer路径中', 'Could not open input file for reading%does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43042', '文件不存在: %s', 'Init executors error. Reason: FileNotFoundException: File (\\S+) does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43043', 'Yarn应用被意外关闭', 'The YARN application unexpectedly switched to state KILLED during deployment', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43044', 'Hadoop认证失败,请联系管理员处理', 'RuntimeException: Hadoop security with Kerberos', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43045', '缓存问题,请尝试重启', 'EngineConnServer Start Failed.java.lang.NoClassDefFoundError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43046', 'hdfs资源文件下载失败,请尝试重启任务或者重新上传资源文件', 'Could not obtain block', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43047', 'ims 连接失败', 'Connection timed out (\\S+) at com.webank.ims.common', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43048', '缺少字段: %s', 'Object (\\S+) not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43049', 'topic没有权限', 'Not authorized to access topics', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43050', '请尝试同步一下物料', '应用不存在,请检查输入的appId', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43051', '文件没有权限: %s', 'FileNotFoundException: (\\S+) \\(Permission denied\\)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43052', '队列 %s 不存在', 'Queue:(\\S+) does not exist in YARN', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43053', '用户jar包没有排除flink runtime 等包', 'NoSuchFieldError: AUTH_USER', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43054', '用户程序代码错误,原因:用户Jar包启动异常,联系Jar包开发排查', '创建用户自定义方法失败', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43055', ' RCS环境应用不存在', '应用不存在,请检查输入的appId', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43056', '数据源RMB topic %S 不存在', 'RMBIllegalAccessException: Topic (\\S+) not exist ', 0); \ No newline at end of file diff --git a/db/upgrade/0.3.1/upgrade_ddl.sql b/db/upgrade/0.3.1/upgrade_ddl.sql new file mode 100644 index 000000000..420e443d6 --- /dev/null +++ b/db/upgrade/0.3.1/upgrade_ddl.sql @@ -0,0 +1,39 @@ +DROP TABLE IF EXISTS `linkis_stream_error_code`; + +CREATE TABLE `linkis_stream_error_code` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `error_code` varchar(50) COLLATE utf8_bin NOT NULL, + `error_desc` varchar(1024) COLLATE utf8_bin NOT NULL, + `error_regex` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `error_type` int(3) DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=143 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +ALTER TABLE linkis_stream_project_files ADD source varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL; + +CREATE TABLE `linkis_stream_audit_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `user` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `proxy_user` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_name` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_desc` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `api_type` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `operate_time` datetime DEFAULT NULL, + `input_parameters` text COLLATE utf8_bin, + `output_parameters` text COLLATE utf8_bin, + `project_name` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `client_ip` varchar(100) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1325 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +CREATE TABLE `linkis_stream_register_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `job_id` bigint(20) DEFAULT NULL, + `application_name` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `password` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `heartbeat_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + diff --git a/db/upgrade/0.3.1/upgrade_dml.sql b/db/upgrade/0.3.1/upgrade_dml.sql new file mode 100644 index 000000000..e666481f3 --- /dev/null +++ b/db/upgrade/0.3.1/upgrade_dml.sql @@ -0,0 +1,457 @@ +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01001', '您的任务没有路由到后台ECM,请联系管理员', 'The em of labels', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01002', 'Linkis服务负载过高,请联系管理员扩容', 'Unexpected end of file from server', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01003', 'Linkis服务负载过高,请联系管理员扩容', 'failed to ask linkis Manager Can be retried SocketTimeoutException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01004', '引擎在启动时被Kill,请联系管理员', ' [0-9]+ Killed', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01005', '请求Yarn获取队列信息重试2次仍失败,请联系管理员', 'Failed to request external resourceClassCastException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01101', 'ECM资源不足,请联系管理员扩容', 'ECM resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01102', 'ECM 内存资源不足,请联系管理员扩容', 'ECM memory resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01103', 'ECM CPU资源不足,请联系管理员扩容', 'ECM CPU resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01004', 'ECM 实例资源不足,请联系管理员扩容', 'ECM Insufficient number of instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('01005', '机器内存不足,请联系管理员扩容', 'Cannot allocate memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12001', '队列CPU资源不足,可以调整Spark执行器个数', 'Queue CPU resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12002', '队列内存资源不足,可以调整Spark执行器个数', 'Insufficient queue memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12003', '队列实例数超过限制', 'Insufficient number of queue instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12004', '全局驱动器内存使用上限,可以设置更低的驱动内存', 'Drive memory resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12005', '超出全局驱动器CPU个数上限,可以清理空闲引擎', 'Drive core resources are insufficient', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12006', '超出引擎最大并发数上限,可以清理空闲引擎', 'Insufficient number of instances', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12008', '获取Yarn队列信息异常,可能是您设置的yarn队列不存在', '获取Yarn队列信息异常', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12009', '会话创建失败,%s队列不存在,请检查队列设置是否正确', 'queue (\\S+) is not exists in YARN', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12010', '集群队列内存资源不足,可以联系组内人员释放资源', 'Insufficient cluster queue memory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12011', '集群队列CPU资源不足,可以联系组内人员释放资源', 'Insufficient cluster queue cpu', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12012', '集群队列实例数超过限制', 'Insufficient cluster queue instance', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12013', '资源不足导致启动引擎超时,您可以进行任务重试', 'wait for DefaultEngineConn', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('12014', '请求引擎超时,可能是因为队列资源不足导致,请重试', 'wait for engineConn initial timeout', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13001', 'Java进程内存溢出,建议优化脚本内容', 'OutOfMemoryError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13002', '使用资源过大,请调优sql或者加大资源', 'Container killed by YARN for exceeding memory limits', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13003', '使用资源过大,请调优sql或者加大资源', 'read record exception', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13004', '引擎意外退出,可能是使用资源过大导致', 'failed because the engine quitted unexpectedly', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13005', 'Spark app应用退出,可能是复杂任务导致', 'Spark application has already stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13006', 'Spark context退出,可能是复杂任务导致', 'Spark application sc has already stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('13007', 'Pyspark子进程意外退出,可能是复杂任务导致', 'Pyspark process has stopped', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21001', '会话创建失败,用户%s不能提交应用到队列:%s,请联系提供队列给您的人员', 'User (\\S+) cannot submit applications to queue (\\S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21002', '创建Python解释器失败,请联系管理员', 'initialize python executor failed', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('21003', '创建单机Python解释器失败,请联系管理员', 'PythonSession process cannot be initialized', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22001', '%s无权限访问,请申请开通数据表权限,请联系您的数据管理人员', 'Permission denied:\\s*user=[a-zA-Z0-9_]+,\\s*access=[A-Z]+\\s*,\\s*inode="([a-zA-Z0-9/_\\.]+)"', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22003', '所查库表无权限', 'Authorization failed:No privilege', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22004', '用户%s在机器不存在,请确认是否申请了相关权限', 'user (\\S+) does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22005', '用户在机器不存在,请确认是否申请了相关权限', 'engineConnExec.sh: Permission denied', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22006', '用户在机器不存在,请确认是否申请了相关权限', 'at com.sun.security.auth.UnixPrincipal', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22007', '用户在机器不存在,请确认是否申请了相关权限', 'LoginException: java.lang.NullPointerException: invalid null input: name', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22008', '用户在机器不存在,请确认是否申请了相关权限', 'User not known to the underlying authentication module', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22009', '用户组不存在', 'FileNotFoundException: /tmp/?', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('22010', '用户组不存在', 'error looking up the name of group', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('30001', '库超过限制', 'is exceeded', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('31001', '用户主动kill任务', 'is killed by user', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('31002', '您提交的EngineTypeLabel没有对应的引擎版本', 'EngineConnPluginNotFoundException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41001', '数据库%s不存在,请检查引用的数据库是否有误', 'Database ''([a-zA-Z_0-9]+)'' not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41001', '数据库%s不存在,请检查引用的数据库是否有误', 'Database does not exist: ([a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table or view not found: ([`\\.a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table not found ''([a-zA-Z_0-9]+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41002', '表%s不存在,请检查引用的表是否有误', 'Table ([a-zA-Z_0-9]+) not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', 'cannot resolve ''`(.+)`'' given input columns', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', ' Invalid table alias or column reference ''(.+)'':', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41003', '字段%s不存在,请检查引用的字段是否有误', 'Column ''(.+)'' cannot be resolved', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表%s是否为分区表或分区字段有误', '([a-zA-Z_0-9]+) is not a valid partition column in table ([`\\.a-zA-Z_0-9]+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表是否为分区表或分区字段有误', 'Partition spec \\{(\\S+)\\} contains non-partition columns', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '分区字段%s不存在,请检查引用的表是否为分区表或分区字段有误', 'table is not partitioned but partition spec exists:\\{(.+)\\}', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41004', '表对应的路径不存在,请联系您的数据管理人员', 'Path does not exist: viewfs', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('41005', '文件%s不存在', 'Caused by:\\s*java.io.FileNotFoundException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42001', '括号不匹配,请检查代码中括号是否前后匹配', 'extraneous input ''\\)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'expression ''(\\S+)'' is neither present in the group by', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'grouping expressions sequence is empty,\\s?and ''(\\S+)'' is not an aggregate function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42002', '非聚合函数%s必须写在group by中,请检查代码的group by语法', 'Expression not in GROUP BY key ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42003', '未知函数%s,请检查代码中引用的函数是否有误', 'Undefined function: ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42003', '未知函数%s,请检查代码中引用的函数是否有误', 'Invalid function ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42004', '字段%s存在名字冲突,请检查子查询内是否有同名字段', 'Reference ''(\\S+)'' is ambiguous', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42004', '字段%s存在名字冲突,请检查子查询内是否有同名字段', 'Ambiguous column Reference ''(\\S+)'' in subquery', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42005', '字段%s必须指定表或者子查询别名,请检查该字段来源', 'Column ''(\\S+)'' Found in more than One Tables/Subqueries', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库%s中已经存在,请删除相应表后重试', 'Table or view ''(\\S+)'' already exists in database ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'Table (\\S+) already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'Table already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42006', '表%s在数据库中已经存在,请删除相应表后重试', 'AnalysisException: (S+) already exists', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42007', '插入目标表字段数量不匹配,请检查代码!', 'requires that the data to be inserted have the same number of columns as the target table', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42008', '数据类型不匹配,请检查代码!', 'due to data type mismatch: differing types in', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42009', '字段%s引用有误,请检查字段是否存在!', 'Invalid column reference (S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42010', '字段%s提取数据失败', 'Can''t extract value from (S+): need', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42011', '括号或者关键字不匹配,请检查代码!', 'mismatched input ''(\\S+)'' expecting', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42012', 'group by 位置2不在select列表中,请检查代码!', 'GROUP BY position (S+) is not in select list', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42013', '字段提取数据失败请检查字段类型', 'Can''t extract value from (S+): need struct type but got string', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42014', '插入数据未指定目标表字段%s,请检查代码!', 'Cannot insert into target table because column number/types are different ''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42015', '表别名%s错误,请检查代码!', 'Invalid table alias ''(\\S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42016', 'UDF函数未指定参数,请检查代码!', 'UDFArgumentException Argument expected', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42017', '聚合函数%s不能写在group by 中,请检查代码!', 'aggregate functions are not allowed in GROUP BY', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42018', '您的代码有语法错误,请您修改代码之后执行', 'SemanticException Error in parsing', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42019', '表不存在,请检查引用的表是否有误', 'table not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42020', '函数使用错误,请检查您使用的函数方式', 'No matching method', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42021', '您的sql代码可能有语法错误,请检查sql代码', 'FAILED: ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42022', '您的sql代码可能有语法错误,请检查sql代码', 'org.apache.spark.sql.catalyst.parser.ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42022', '您的sql代码可能有语法错误,请检查sql代码', 'org.apache.hadoop.hive.ql.parse.ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42023', '聚合函数不能嵌套', 'aggregate function in the argument of another aggregate function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42024', '聚合函数不能嵌套', 'aggregate function parameters overlap with the aggregation', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'union 的左右查询字段不一致', 'Union can only be performed on tables', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'hql报错,union 的左右查询字段不一致', 'both sides of union should match', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42025', 'union左表和右表类型不一致', 'on first table and type', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42026', '您的建表sql不能推断出列信息', 'Unable to infer the schema', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42027', '动态分区的严格模式需要指定列,您可用通过设置set hive.exec.dynamic.partition.mode=nostrict', 'requires at least one static partition', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42028', '函数输入参数有误', 'Invalid number of arguments for function', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42029', 'sql语法报错,select * 与group by无法一起使用', 'not allowed in select list when GROUP BY ordinal', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42030', 'where/having子句之外不支持引用外部查询的表达式', 'the outer query are not supported outside of WHERE', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42031', 'sql语法报错,group by 后面不能跟一个表', 'show up in the GROUP BY list', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42032', 'hql报错,窗口函数中的字段重复', 'check for circular dependencies', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42033', 'sql中出现了相同的字段', 'Found duplicate column', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42034', 'sql语法不支持', 'not supported in current context', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42035', 'hql语法报错,嵌套子查询语法问题', 'Unsupported SubQuery Expression', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('42036', 'hql报错,子查询中in 用法有误', 'in definition of SubQuery', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43037', '表字段类型修改导致的转型失败,请联系修改人员', 'cannot be cast to', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43038', 'select 的表可能有误', 'Invalid call to toAttribute on unresolved object', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43039', '语法问题,请检查脚本', 'Distinct window functions are not supported', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43040', 'Presto查询一定要指定数据源和库信息', 'Schema must be specified when session schema is not set', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43001', '代码中存在NoneType空类型变量,请检查代码', '''NoneType'' object', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43002', '数组越界', 'IndexError:List index out of range', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43003', '您的代码有语法错误,请您修改代码之后执行', 'SyntaxError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43004', 'python代码变量%s未定义', 'name ''(S+)'' is not defined', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43005', 'python udf %s 未定义', 'Undefined function:s+''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43006', 'python执行不能将%s和%s两种类型进行连接', 'cannot concatenate ''(S+)'' and ''(S+)''', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43007', 'pyspark执行失败,可能是语法错误或stage失败', 'Py4JJavaError: An error occurred', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43008', 'python代码缩进对齐有误', 'unexpected indent', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43009', 'python代码缩进有误', 'unexpected indent', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43010', 'python代码反斜杠后面必须换行', 'unexpected character after line', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43011', '导出Excel表超过最大限制1048575', 'Invalid row number', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43012', 'python save as table未指定格式,默认用parquet保存,hive查询报错', 'parquet.io.ParquetDecodingException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43013', '索引使用错误', 'IndexError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43014', 'sql语法有问题', 'raise ParseException', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46001', '找不到导入文件地址:%s', 'java.io.FileNotFoundException: (\\S+) \\(No such file or directory\\)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46002', '导出为excel时临时文件目录权限异常', 'java.io.IOException: Permission denied(.+)at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46003', '导出文件时无法创建目录:%s', 'java.io.IOException: Mkdirs failed to create (\\S+) (.+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('46004', '导入模块错误,系统没有%s模块,请联系运维人员安装', 'ImportError: No module named (S+)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91001', '找不到变量值,请确认您是否设置相关变量', 'not find variable substitution for', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91002', '不存在的代理用户,请检查你是否申请过平台层(bdp或者bdap)用户', 'failed to change current working directory ownership', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91003', '请检查提交用户在WTSS内是否有该代理用户的权限,代理用户中是否存在特殊字符,是否用错了代理用户,OS层面是否有该用户,系统设置里面是否设置了该用户为代理用户', '没有权限执行当前任务', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91004', '平台层不存在您的执行用户,请在ITSM申请平台层(bdp或者bdap)用户', '使用chown命令修改', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91005', '未配置代理用户,请在ITSM走WTSS用户变更单,为你的用户授权改代理用户', '请联系系统管理员为您的用户添加该代理用户', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91006', '您的用户初始化有问题,请联系管理员', 'java: No such file or directory', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('91007', 'JobServer中不存在您的脚本文件,请将你的脚本文件放入对应的JobServer路径中', 'Could not open input file for reading%does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43042', '文件不存在: %s', 'Init executors error. Reason: FileNotFoundException: File (\\S+) does not exist', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43043', 'Yarn应用被意外关闭', 'The YARN application unexpectedly switched to state KILLED during deployment', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43044', 'Hadoop认证失败,请联系管理员处理', 'RuntimeException: Hadoop security with Kerberos', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43045', '缓存问题,请尝试重启', 'EngineConnServer Start Failed.java.lang.NoClassDefFoundError', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43046', 'hdfs资源文件下载失败,请尝试重启任务或者重新上传资源文件', 'Could not obtain block', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43047', 'ims 连接失败', 'Connection timed out (\\S+) at com.webank.ims.common', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43048', '缺少字段: %s', 'Object (\\S+) not found', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43049', 'topic没有权限', 'Not authorized to access topics', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43050', '请尝试同步一下物料', '应用不存在,请检查输入的appId', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43051', '文件没有权限: %s', 'FileNotFoundException: (\\S+) \\(Permission denied\\)', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43052', '队列 %s 不存在', 'Queue:(\\S+) does not exist in YARN', 0); +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43053', '用户jar包没有排除flink runtime 等包', 'NoSuchFieldError: AUTH_USER', 0); + +UPDATE linkis_stream_job_config_def +SET default_value='detach' +WHERE `key`='linkis.ec.app.manage.mode'; + + +ALTER TABLE linkis_stream_task ADD server_instance varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'streamis server instance'; + +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43051', 'streamis日志回调注册失败,请联系管理员处理', 'flink 应用请求注册streamis失败,即将退出', 0); + + +INSERT INTO linkis_stream_error_code +(error_code, error_desc, error_regex, error_type) +VALUES('43052', 'streamis日志回调注册失败,请联系管理员处理', 'ExitCodeException exitCode=200', 0); + +ALTER TABLE linkis_stream_audit_log ADD cost_time_mills bigint(20) NULL COMMENT 'cost time'; + +ALTER TABLE linkis_stream_task ADD job_start_config text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'streamis job startup config'; + + diff --git a/new-web/.commitlintrc.js b/new-web/.commitlintrc.js new file mode 100644 index 000000000..0b927b976 --- /dev/null +++ b/new-web/.commitlintrc.js @@ -0,0 +1,19 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], + rules: { + 'type-enum': [ + 2, + 'always', + ['upd', 'feat', 'fix', 'refactor', 'docs', 'chore', 'style', 'revert', 'perf'] + ], + 'type-case': [0], + 'type-empty': [0], + 'scope-empty': [0], + 'scope-case': [0], + 'subject-full-stop': [0, 'never'], + 'subject-case': [0, 'never'], + 'header-max-length': [0, 'always', 72], + // test: 避免CRLF检验 + //'linebreak-style': ['off','windows'] + } +}; diff --git a/new-web/.editorconfig b/new-web/.editorconfig new file mode 100644 index 000000000..4160ac318 --- /dev/null +++ b/new-web/.editorconfig @@ -0,0 +1,16 @@ +# http://editorconfig.org + +root = true +lib + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/new-web/.eslintrc.js b/new-web/.eslintrc.js new file mode 100644 index 000000000..2c39c81b3 --- /dev/null +++ b/new-web/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + extends: ['@webank/eslint-config-webank/vue.js'], + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)', + ], + }, + ], + rules: { + 'linebreak-style': ['error', process.platform === ['win32', 'win64'].includes(process.platform) ? 'windows' : 'unix'], + 'import/extensions': 'off', + 'import/no-unresolved': 'warn', + 'import/no-absolute-path': 'warn', + 'no-unused-vars': 'warn', + 'vue/html-closing-bracket-newline': 0, + }, + env: { + jest: true, + }, + globals: { + BASEURL: false, + }, +}; diff --git a/new-web/.fes.js b/new-web/.fes.js new file mode 100644 index 000000000..a7ba0208d --- /dev/null +++ b/new-web/.fes.js @@ -0,0 +1,45 @@ +// .fes.js 只负责管理编译时配置,只能使用plain Object +import path from 'path'; + +export default { + publicPath: './', + access: { + roles: { + noauth: ["*"], + admin: ["*"] + } + }, + monacoEditor: { + languages: ['log'] + }, + layout: false, + define: { + BASEURL: '/' + }, + alias: { + '@': path.resolve(__dirname, 'src') + }, + devServer: { + port: 8100 + }, + locale: { + legacy: false + }, + extraBabelPlugins:[ + [ + "import", + { + "libraryName": "@fesjs/fes-design", + camel2DashComponentName: false, + "customName": (name) => { + name = name.slice(1).replace(/([A-Z])/g, "-$1").toLowerCase().slice(1) + return `@fesjs/fes-design/es/${name}`; + }, + "style": (name) => { + return `${name}/style`; + } + }, + 'fes-design' + ] + ] +}; diff --git a/new-web/.fes.prod.js b/new-web/.fes.prod.js new file mode 100644 index 000000000..3d6557896 --- /dev/null +++ b/new-web/.fes.prod.js @@ -0,0 +1,7 @@ +// .fes.js 只负责管理编译时配置,只能使用plain Object +export default { + define: { + BASEURL: '/' + }, + dynamicImport: true +}; diff --git a/new-web/.gitignore b/new-web/.gitignore new file mode 100644 index 000000000..a24e9df11 --- /dev/null +++ b/new-web/.gitignore @@ -0,0 +1,10 @@ +node_modules +.DS_Store +dist +*.local +.vscode +.fes +.cache +*.zip +logs +.fes-production diff --git a/new-web/.gitlab-ci.yml b/new-web/.gitlab-ci.yml new file mode 100644 index 000000000..83b1cb9f1 --- /dev/null +++ b/new-web/.gitlab-ci.yml @@ -0,0 +1,16 @@ +include: + - project: 'mumblefe/gitlab-ci' + file: 'aomp_1.0.yml' +variables: + # aomp静态资源上传目录 + DIST_DIR: "dist" + # aomp发布模版Id + PROJECT_TPL_ID: "59000" + # aomp系统名 + PROJECT_SYS_ID: "BDP-DQM" + # 版本号 + VERSION: "{{PACKAGEJSON.version}}" + # 测试打包命令 + TEST_BUILD_CMD: "npm run prod" + # 生产打包命令 + PROD_BUILD_CMD: "npm run prod" diff --git a/new-web/.husky/commit-msg b/new-web/.husky/commit-msg new file mode 100644 index 000000000..e8511eaea --- /dev/null +++ b/new-web/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/new-web/.husky/pre-commit b/new-web/.husky/pre-commit new file mode 100644 index 000000000..36af21989 --- /dev/null +++ b/new-web/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged diff --git a/new-web/.prettierrc b/new-web/.prettierrc new file mode 100644 index 000000000..29ed0c41b --- /dev/null +++ b/new-web/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "none" +} \ No newline at end of file diff --git a/new-web/README.md b/new-web/README.md new file mode 100644 index 000000000..4a3e8a9ee --- /dev/null +++ b/new-web/README.md @@ -0,0 +1,52 @@ +# Bdp Template + +项目使用基于`vue3`的框架[FesJs](https://winixt.gitee.io/fesjs/zh/)以及[FesUI](https://fes-design.mumblefe.cn),搭配`hooks`思想组合功能 + +`注:后台接口需要在开发网中访问` + +## 本地开发: +``` +wnpm i +npm run dev +``` + +## 跨域联调 + +使用`whistle`代理 + +在whistle规则中配置如下规则并启用,在浏览器访问`http://xx.xx.xx.xx:port/web/`既可以将html代理到本地开发环境,localhost的端口需要根据实际情况替换 +``` +http://xx.xx.xx.xx:port/web/ http://localhost:8000/ +``` + +或者跨域启动浏览器(chrome 84版本及以下版本推荐) +- windows + + 旧版-在桌面新增一个chrome的快捷方式并重命名,右键属性在`快捷方式-目标`输入框中最后加入参数`--disable-web-security --user-data-dir`,关闭chrome直接双击新建的快捷方式就可以跨域打开浏览器 + + 新版-在桌面新增一个chrome的快捷方式并重命名,右键属性在`快捷方式-目标`输入框中最后加入参数`--args --disable-web-security --user-data-dir=C:\MyChromeDevUserData`,MyChromeDevUserData目录可以自定义但一定是必须的,关闭chrome直接双击新建的快捷方式就可以跨域打开浏览器 + +- mac + + 新建目录chormedata,并在终端执行命令`open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/zhuguifeng/Documents/chromedata`即可跨域打开浏览器,其中新建的目录绝对路径放在--user-data-dir的参数中 + +注意,以上参数中的`--user-data-dir`必须根据实际情况修改 + +## 代码提交规范 + +每次提交代码都会经过`eslint`的校验,开发者需要处理报告中出现的错误 + +针对提交message也需要按照规范填写,方便后面回溯记录,规范如下: + +`['upd', 'feat', 'fix', 'refactor', 'docs', 'chore', 'style', 'revert']: 提交信息` + +## @fesjs/fes-design的使用 + +- 需要全局注入组件需要在`app.js`文件中引入并且`use` +- API使用的组件直接在对应页面按需引入即可,如:`import { FMessage } from '@fesjs/fes-design';` + +## 项目结构 + +## svg filter generator + +项目中使用到了一些svg图片,需要实现hover变色的效果,svg filter的生成器地址:[https://codepen.io/sosuke/pen/Pjoqqp](https://codepen.io/sosuke/pen/Pjoqqp) diff --git a/new-web/jsconfig.json b/new-web/jsconfig.json new file mode 100644 index 000000000..8874026ae --- /dev/null +++ b/new-web/jsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"], + "@@/*": ["./src/.fes/*"] + } + }, + "include": [ + "src/**/*", + "tests/**/*", + "test/**/*", + "__test__/**/*", + "typings/**/*", + "config/**/*", + ".eslintrc.js", + ".stylelintrc.js", + ".prettierrc.js" + ], + "exclude": ["node_modules", "build", "dist", "scripts", "src/.fes/*", "webpack", "jest"] +} diff --git a/new-web/package-lock.json b/new-web/package-lock.json new file mode 100644 index 000000000..243e45cd0 --- /dev/null +++ b/new-web/package-lock.json @@ -0,0 +1,15703 @@ +{ + "name": "Streamis", + "version": "0.3.5", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "Streamis", + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "@fesjs/fes": "2.0.14", + "@fesjs/fes-design": "0.7.18", + "@fesjs/plugin-access": "2.0.3", + "@fesjs/plugin-enums": "2.0.2", + "@fesjs/plugin-icon": "2.0.6", + "@fesjs/plugin-layout": "3.0.0", + "@fesjs/plugin-locale": "3.0.3", + "@fesjs/plugin-model": "2.0.3", + "@fesjs/plugin-monaco-editor": "2.0.0-beta.7", + "@fesjs/plugin-request": "2.0.12", + "@fesjs/plugin-watermark": "2.0.3", + "@fesjs/traction-widget": "1.7.3", + "babel-plugin-syntax-jsx": "6.18.0", + "date-fns": "2.28.0", + "dayjs": "1.11.5", + "echarts": "5.2.2", + "lodash-es": "4.17.21", + "mitt": "3.0.0", + "vue": "3.2.26", + "vuex": "4.0.2" + }, + "devDependencies": { + "@commitlint/config-conventional": "15.0.0", + "@vue/compiler-sfc": "3.2.26", + "@webank/eslint-config-webank": "0.4.2", + "commitlint": "15.0.0", + "cz-conventional-changelog": "3.3.0", + "husky": "7.0.4", + "lint-staged": "12.1.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/@ampproject/remapping/download/@ampproject/remapping-2.2.0.tgz", + "integrity": "sha1-VsEzgkeA3jF0rtWraDTzAmeQFU0=", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/code-frame/download/@babel/code-frame-7.18.6.tgz", + "integrity": "sha1-OyXTjIlgC6otzCGe36iKdOssQno=", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.14", + "resolved": "http://10.107.103.115:8001/@babel/compat-data/download/@babel/compat-data-7.20.14.tgz", + "integrity": "sha1-QQb8i3VfPj7goKfCfd5d4dKyuvg=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/core/download/@babel/core-7.21.0.tgz", + "integrity": "sha1-E0Gu/cwUzMdVP8xojdiYai2v/BM=", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.19.1", + "resolved": "http://10.107.103.115:8001/@babel/eslint-parser/download/@babel/eslint-parser-7.19.1.tgz", + "integrity": "sha1-T2j2sIJUieAKJLQbahrjVBTs0vQ=", + "dev": true, + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.1", + "resolved": "http://10.107.103.115:8001/@babel/generator/download/@babel/generator-7.21.1.tgz", + "integrity": "sha1-lRzGJgV7wK8sNc0j6cZNOE3qg90=", + "dependencies": { + "@babel/types": "^7.21.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.3.2.tgz", + "integrity": "sha1-wa7cYehT8rufXf5tRELTtWWyU7k=", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha1-6qSfb4DVoz+aXdInbm1uRRvgprs=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha1-rNTt/XpWbR1R6pdd/zj9UpBpgbs=", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha1-ps0z6TYp9etHOwIarAXfYsTNCbs=", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha1-ZPSeywAgUy8ZsdAUsDvMqhq4X7k=", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "http://10.107.103.115:8001/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha1-XqebWZYqCewqzyCpY6AatNB2zMo=", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "http://10.107.103.115:8001/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha1-hhLlW+XVHwzR82tKWoOSTomIS3o=", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha1-DAzumzXSyhkEeHVoZbs1KEIvUb4=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha1-QfgijvCm8aA2uN/f7HzpT5prwJY=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/helper-function-name/download/@babel/helper-function-name-7.21.0.tgz", + "integrity": "sha1-1VKCmxDqnxIJaTBAI80GRfoAsbQ=", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha1-1NLI+0uuqlxouZzIJFxWVU+SZng=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha1-MZxqlAQxoTOJcUhRWHfS8yacO6U=", + "dependencies": { + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-module-imports/download/@babel/helper-module-imports-7.18.6.tgz", + "integrity": "sha1-Hj69u9CKrRQ3tCjFAgTbE8Wjym4=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "http://10.107.103.115:8001/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.21.2.tgz", + "integrity": "sha1-Fgyq+kl4rIwArGZjbLD6N7Ak4tI=", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha1-k2mqlD7n2kftqyy06Dis8J0pD/4=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "http://10.107.103.115:8001/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha1-0bkAB1KxjQh3z/haXDds5cMSFik=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha1-mXRYoOM1cIDlTh157DR/iozShRk=", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.20.7.tgz", + "integrity": "sha1-JD7NJyTSBxUyssitLw+fCDvK4zE=", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "http://10.107.103.115:8001/@babel/helper-simple-access/download/@babel/helper-simple-access-7.20.2.tgz", + "integrity": "sha1-CrRSaH/gws+x4rngAV3gf8LWLdk=", + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "http://10.107.103.115:8001/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha1-++TFL2BRjKuBQNdxAfDmOoojBoQ=", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha1-c2eUm8dbIMbVpdSpe7ooJK6O8HU=", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "http://10.107.103.115:8001/@babel/helper-string-parser/download/@babel/helper-string-parser-7.19.4.tgz", + "integrity": "sha1-ONOstlS0cBqbd/sGFalvd1w6nmM=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "http://10.107.103.115:8001/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha1-fuqDTPMpAf/cGn7lVeL5wn4knKI=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/helper-validator-option/download/@babel/helper-validator-option-7.21.0.tgz", + "integrity": "sha1-giTH4TrOS6/cQATaLPBk70JnMYA=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "http://10.107.103.115:8001/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.20.5.tgz", + "integrity": "sha1-deLYTUmaCrOzHDO8/lnWuKRfYuM=", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/helpers/download/@babel/helpers-7.21.0.tgz", + "integrity": "sha1-ndGE+1WZhiA3kXzcnuy4RXfcTn4=", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/highlight/download/@babel/highlight-7.18.6.tgz", + "integrity": "sha1-gRWGAek+JWN5Wty/vfXWS+Py7N8=", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.2", + "resolved": "http://10.107.103.115:8001/@babel/parser/download/@babel/parser-7.21.2.tgz", + "integrity": "sha1-2sr638bXZUwwUaZtb+VbbLLyoLM=", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha1-2luPmlgKzfvlNJTbpF6jifsJpNI=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha1-2chViSWFOaIqkBAzhTEBphmNTvE=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha1-v7cnbS1XPLZ7o3mYSiM04mK6UyY=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha1-sRD1l0GJX37CGm//aW7EYmXERqM=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha1-klkukCmxOxW+D3zmp67cKHnKRac=", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-do-expressions": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-do-expressions/download/@babel/plugin-proposal-do-expressions-7.18.6.tgz", + "integrity": "sha1-saBaKHbfLKOFVhFafs3jtMRUY6k=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-do-expressions": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha1-crz41Ah5n1R9dZKYw8J8fn+qTZQ=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.18.10", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.18.10.tgz", + "integrity": "sha1-CR9HlNvOQCfAPPTrxk0/uWt1wgY=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-default-from": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha1-X3MTqzSM2xnVkBRfkkdUDpR2EgM=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-function-bind": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-function-bind/download/@babel/plugin-proposal-function-bind-7.18.9.tgz", + "integrity": "sha1-Y11lksJFAMb3rGTK4QODreaKioo=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-function-bind": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha1-foeIwYEcOTr/digX59vx69DAXws=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha1-37yqj3tNN7Uei/tG2Upa6iu4nYM=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha1-/dlAqZp0Dld9bHU6tvu0P9uUZ+E=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha1-iZsU+6/ofwU9LF/wWzYCnGLhPHU=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha1-qmYpQO9CV3nHVTSlxB6dk27cOQo=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha1-+UANDmo+qTup73CwnnLdbaY4oss=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha1-iG9ciXjet9MPZ4suJDRrKHI00+o=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-pipeline-operator": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-pipeline-operator/download/@babel/plugin-proposal-pipeline-operator-7.18.9.tgz", + "integrity": "sha1-ZqYGZu/Zwpx+xNPizLOPnZeZQjc=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-pipeline-operator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha1-UgnefSE0V1SKmENvoogvUvS+a+o=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha1-GUlr2Yg92Dwjx9f8RdzZrQLfodw=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha1-r2E9LNXmQ2Q7Zc3tZCB7Fchct44=", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-do-expressions": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-do-expressions/download/@babel/plugin-syntax-do-expressions-7.18.6.tgz", + "integrity": "sha1-hYG67cDxKM3wKS4wA6f0Tke4c2g=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-export-default-from/download/@babel/plugin-syntax-export-default-from-7.18.6.tgz", + "integrity": "sha1-jfB2cRpIGMTOTyPmHWIrC6L/hLw=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-function-bind": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-function-bind/download/@babel/plugin-syntax-function-bind-7.18.6.tgz", + "integrity": "sha1-MhTov8cewd5jbdvAGDjCgp5WCxk=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-import-assertions/download/@babel/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha1-u1Dg1L6glXI1OQZBIJOU6HvbnMQ=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha1-qP7vY7AQFQq9l/FknsKW6EmUPKA=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-pipeline-operator": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-pipeline-operator/download/@babel/plugin-syntax-pipeline-operator-7.18.6.tgz", + "integrity": "sha1-2qRNRgu6I0eMMpoOi77kM6aB/UM=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha1-TpoM/HachWibd6LmQtJOn2l/yMc=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha1-vqMysOiy2rPa/lWhY9gidTGrBVE=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha1-3+4YYjyMsx3reWqjyoTdqc6pQ1Q=", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha1-kYe/S6MCY1udcNmGrXDwOHJiFqg=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha1-5ze5EDflGG7ha3bnrgkzWKVjTwI=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha1-9GnQsHpMWn27Ia+tnifle0cDFmU=", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha1-cEzC/RVdHJllUduCdtVbnUbk0Ko=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha1-i9pXj3FiDH3nyTr1kBVLozFBVFQ=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha1-soaz56rmx7hh5FvtCi+v1rGk/vg=", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha1-aH8V7jza1thRkesqNyxFKOqgrg4=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha1-QhxwX0UhiIxl6R/dGvlRv+/U2s0=", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha1-bvilCyROtqC9utDHxhh35OMAl8E=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha1-zDVPgjTmKWiUbGGkbWNlRA/HZOA=", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha1-cnlv2++A5W+6PGppnVTw3lV0RLw=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha1-rJ/cGhGGIKxJt+el0twXehv+6I4=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha1-PazMqOTMMJ8Dw6DEtB3Esm9VIUo=", + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.21.2", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha1-b/UHDnHjGS7yt+OYIKBvt44wWOc=", + "dependencies": { + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha1-Rn7Gu6a2pQY07qYcnCMmVNikaW4=", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha1-gdODLWA0t1tU5ighuljyjtCqtLk=", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha1-YmKY3WLqUdRSw75YsoXSMZW6aag=", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha1-0Sjzdq4gBHfzfE3fzHIqihsyRqg=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha1-+zxszdFZObb/eTmUS1GXHdw1kSw=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha1-DuNJ6dG8lueOOzenr0I6QHinCD8=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha1-4iSYkDpINEjpTgMum7ucXMv8k6M=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha1-V82liMf/t/T4SDzIO9zqAqkH8E0=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha1-savY6/jtql9/5ru40hM9I7am92o=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.21.0.tgz", + "integrity": "sha1-KohPKVVtCmjNPRUtzJ5scd+27ug=", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha1-bW33mD1nsZUom+JJCePxKo9mTck=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha1-wtg+C5nTv4PgexGZXuJL98oJQB4=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha1-xnBusrFSQCjjF3IDOVg60PRErcw=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha1-BOxvEKzaqBhGaJ1j+uEX3ZwkOl4=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha1-yM6mgmPkWt3NavyQkUKfgJJXYsA=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha1-8JVqFTZ547N3rlt/AUNCcVHkyEg=", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha1-Hs+w7ag9CbvLd8CZcMLdVYMqokY=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "http://10.107.103.115:8001/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha1-GUMXIl2MIBu64QM2T/6eLOo2zco=", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "http://10.107.103.115:8001/@babel/preset-env/download/@babel/preset-env-7.20.2.tgz", + "integrity": "sha1-mxZCqke7n0Oob5YwAReA2rf4ZQY=", + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "http://10.107.103.115:8001/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz", + "integrity": "sha1-75Odbn8miCfhhBY43G/5VRXhFdk=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/preset-typescript/download/@babel/preset-typescript-7.21.0.tgz", + "integrity": "sha1-vLvKUT6CE2kf5dSyPZJR4B8A6/8=", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.18.9", + "resolved": "http://10.107.103.115:8001/@babel/register/download/@babel/register-7.18.9.tgz", + "integrity": "sha1-GIiyS8KNXMQcQS/rAV6f9rluQ5w=", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "http://10.107.103.115:8001/@babel/runtime/download/@babel/runtime-7.21.0.tgz", + "integrity": "sha1-W1XJ05Tl/PMEkJqLAMB9whe1ZnM=", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "http://10.107.103.115:8001/@babel/template/download/@babel/template-7.20.7.tgz", + "integrity": "sha1-oVCQwoOag7AqqZbAtJlABYQf1ag=", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.2", + "resolved": "http://10.107.103.115:8001/@babel/traverse/download/@babel/traverse-7.21.2.tgz", + "integrity": "sha1-rH4fJ2WHUIkugV5grpDzgqRtjnU=", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.2", + "resolved": "http://10.107.103.115:8001/@babel/types/download/@babel/types-7.21.2.tgz", + "integrity": "sha1-kiRvbgD5F1WJPCh2rWU9twyDENE=", + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/config-conventional/download/@commitlint/config-conventional-15.0.0.tgz", + "integrity": "sha1-O/Gt8xnjtDHeErqC3DmVJAOLLY8=", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/ensure": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/ensure/download/@commitlint/ensure-15.0.0.tgz", + "integrity": "sha1-BqY3OOI5OXCghbQo5s+A+h/nb0g=", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/execute-rule/download/@commitlint/execute-rule-15.0.0.tgz", + "integrity": "sha1-a/95Yt846J/5/bwAq9ebiEnH6fk=", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/format": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/format/download/@commitlint/format-15.0.0.tgz", + "integrity": "sha1-EJNRgJE96ThL6kySF/TGxe4QCrM=", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/@commitlint/format/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/format/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/is-ignored/download/@commitlint/is-ignored-15.0.0.tgz", + "integrity": "sha1-OCv59vjYEPL/xZzMUn9DierdeUk=", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "semver": "7.3.5" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.3.5", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "node_modules/@commitlint/lint": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/lint/download/@commitlint/lint-15.0.0.tgz", + "integrity": "sha1-qTuIlvslsFqy7QJG02X0kIZUWI0=", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^15.0.0", + "@commitlint/parse": "^15.0.0", + "@commitlint/rules": "^15.0.0", + "@commitlint/types": "^15.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/load/download/@commitlint/load-15.0.0.tgz", + "integrity": "sha1-W9ORwTh6r+krVM8qhrdqUij89O8=", + "dev": true, + "dependencies": { + "@commitlint/execute-rule": "^15.0.0", + "@commitlint/resolve-extends": "^15.0.0", + "@commitlint/types": "^15.0.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", + "chalk": "^4.0.0", + "cosmiconfig": "^7.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/load/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/load/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/load/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/@commitlint/load/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/message": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/message/download/@commitlint/message-15.0.0.tgz", + "integrity": "sha1-mKOKyhs82Zag/NvZrWfpA532Cwo=", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/parse": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/parse/download/@commitlint/parse-15.0.0.tgz", + "integrity": "sha1-ysd7dRR0i40B0AwOZ9XlTGlcMCw=", + "dev": true, + "dependencies": { + "@commitlint/types": "^15.0.0", + "conventional-changelog-angular": "^5.0.11", + "conventional-commits-parser": "^3.2.2" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/read": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/read/download/@commitlint/read-15.0.0.tgz", + "integrity": "sha1-2oOfO01JsFWGqc0mZsyMSja57JE=", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^15.0.0", + "@commitlint/types": "^15.0.0", + "fs-extra": "^10.0.0", + "git-raw-commits": "^2.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/resolve-extends/download/@commitlint/resolve-extends-15.0.0.tgz", + "integrity": "sha1-uvISJ+KsUs71Ruw13Wcy6bC25Xw=", + "dev": true, + "dependencies": { + "import-fresh": "^3.0.0", + "lodash": "^4.17.19", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/rules/download/@commitlint/rules-15.0.0.tgz", + "integrity": "sha1-MmNwq8AESS/LVUMZjR1VsU4l48g=", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^15.0.0", + "@commitlint/message": "^15.0.0", + "@commitlint/to-lines": "^15.0.0", + "@commitlint/types": "^15.0.0", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/rules/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@commitlint/rules/node_modules/execa": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/execa/download/execa-5.1.1.tgz", + "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/rules/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/get-stream/download/get-stream-6.0.1.tgz", + "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/rules/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/is-stream/download/is-stream-2.0.1.tgz", + "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/npm-run-path/download/npm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/node_modules/path-key": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/node_modules/which": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/to-lines/download/@commitlint/to-lines-15.0.0.tgz", + "integrity": "sha1-uGrJjzGWiJkOzC4JIn+t9ZG2XJI=", + "dev": true, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/top-level/download/@commitlint/top-level-15.0.0.tgz", + "integrity": "sha1-Rn7IN36B38kW4aIKJ1WIYr4aQlQ=", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/top-level/node_modules/find-up": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/find-up/download/find-up-5.0.0.tgz", + "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/top-level/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/locate-path/download/locate-path-6.0.0.tgz", + "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/p-limit/download/p-limit-3.1.0.tgz", + "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/top-level/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/p-locate/download/p-locate-5.0.0.tgz", + "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/top-level/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/types/download/@commitlint/types-15.0.0.tgz", + "integrity": "sha1-Rvp72j5jQMrz46LkFby3j/AZXu0=", + "dev": true, + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@commitlint/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/@commitlint/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "http://10.107.103.115:8001/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.7.tgz", + "integrity": "sha1-HVcr+74Ut3BOC6Dzm3SBW4SHDXA=", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/@endemolshinegroup/cosmiconfig-typescript-loader/download/@endemolshinegroup/cosmiconfig-typescript-loader-3.0.2.tgz", + "integrity": "sha1-7qRjWCjd43KDiwkJaT69mq/uwi0=", + "dev": true, + "dependencies": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "cosmiconfig": ">=6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "http://10.107.103.115:8001/@eslint/eslintrc/download/@eslint/eslintrc-0.4.3.tgz", + "integrity": "sha1-nkKYHvA1vrPdSa3ResuW6P9vOUw=", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "http://10.107.103.115:8001/globals/download/globals-13.20.0.tgz", + "integrity": "sha1-6idqHlCP/U8WEoiPnRutHicXv4I=", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "http://10.107.103.115:8001/ignore/download/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@fesjs/compiler": { + "version": "2.0.5", + "resolved": "http://10.107.103.115:8001/@fesjs/compiler/download/@fesjs/compiler-2.0.5.tgz", + "integrity": "sha1-Wpj5SXvVH1IEXhhOzdxB8VwtWhA=", + "dependencies": { + "@babel/core": "^7.16.7", + "@babel/preset-env": "^7.15.0", + "@babel/register": "^7.15.3", + "@fesjs/utils": "^2.0.4", + "commander": "^7.0.0", + "dotenv": "8.2.0", + "joi": "17.3.0", + "readline": "^1.3.0", + "set-value": "3.0.2", + "tapable": "^2.2.0" + } + }, + "node_modules/@fesjs/fes": { + "version": "2.0.14", + "resolved": "http://10.107.103.115:8001/@fesjs/fes/download/@fesjs/fes-2.0.14.tgz", + "integrity": "sha1-05bMwWz6MfM9+nXJgkMJoX9+Wys=", + "dependencies": { + "@fesjs/compiler": "^2.0.3", + "@fesjs/preset-built-in": "^2.0.13", + "@fesjs/runtime": "^2.0.2", + "@fesjs/utils": "^2.0.3", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "fes": "bin/fes.js" + }, + "engines": { + "node": "^10.12.0 || ^12.0.0 || >= 14.0.0" + } + }, + "node_modules/@fesjs/fes-design": { + "version": "0.7.18", + "resolved": "http://10.107.103.115:8001/@fesjs/fes-design/download/@fesjs/fes-design-0.7.18.tgz", + "integrity": "sha1-zK0Wou8Tn/QjrgwYV2JS5tcw8ws=", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@floating-ui/dom": "^0.4.2", + "@juggle/resize-observer": "^3.3.1", + "@types/lodash-es": "^4.17.5", + "@types/normalize-wheel": "^1.0.0", + "@vue/shared": "^3.2.24", + "@vueuse/core": "^9.6.0", + "async-validator": "^4.0.7", + "csstype": "^3.0.10", + "date-fns": "^2.28.0", + "lodash-es": "^4.17.21", + "normalize-wheel": "^1.0.1", + "stickybits": "^3.7.9" + }, + "peerDependencies": { + "vue": "^3.2.24" + } + }, + "node_modules/@fesjs/plugin-access": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-access/download/@fesjs/plugin-access-2.0.3.tgz", + "integrity": "sha1-gYNLEzuSZWGYvw0qXc8WaYL2FeU=", + "dependencies": { + "@fesjs/utils": "^2.0.3", + "lodash-es": "^4.17.15" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-enums": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-enums/download/@fesjs/plugin-enums-2.0.2.tgz", + "integrity": "sha1-BU3pxJmJjy0lEUox+XowZpf02HY=", + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-icon": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-icon/download/@fesjs/plugin-icon-2.0.6.tgz", + "integrity": "sha1-cMvu0j4XVyE3dCpdckFeav6437k=", + "dependencies": { + "svgo": "^2.3.1" + }, + "peerDependencies": { + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-layout": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-layout/download/@fesjs/plugin-layout-3.0.0.tgz", + "integrity": "sha1-UdVwarWbDAO72enT45g7aIQMVUk=", + "dependencies": { + "@fesjs/utils": "^2.0.3" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "@fesjs/fes-design": "^0.1.10", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-locale": { + "version": "3.0.3", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-locale/download/@fesjs/plugin-locale-3.0.3.tgz", + "integrity": "sha1-9i+fnLIQkCNE7kebyaj+xzO/TXU=", + "dependencies": { + "@fesjs/utils": "^2.0.3", + "vue-i18n": "^9.0.0" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "@fesjs/fes-design": "^0.1.10", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-model": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-model/download/@fesjs/plugin-model-2.0.3.tgz", + "integrity": "sha1-6ru02crL71g8HDBJofuOWVJqPkA=", + "dependencies": { + "@fesjs/utils": "^2.0.3" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-monaco-editor": { + "version": "2.0.0-beta.7", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-monaco-editor/download/@fesjs/plugin-monaco-editor-2.0.0-beta.7.tgz", + "integrity": "sha1-anhnbhPiOQWD8ksGuSQO3YE3r1s=", + "dependencies": { + "@fesjs/utils": "^2.0.4", + "lodash-es": "^4.17.15", + "monaco-editor": "^0.20.0", + "monaco-editor-webpack-plugin": "^1.9.1" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.2.37" + } + }, + "node_modules/@fesjs/plugin-request": { + "version": "2.0.12", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-request/download/@fesjs/plugin-request-2.0.12.tgz", + "integrity": "sha1-Ro33sQ3GtGva+6Zdz63wcV74HR4=", + "dependencies": { + "@fesjs/compiler": "^2.0.4", + "@fesjs/utils": "^2.0.3", + "axios": "0.21.1" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/plugin-watermark": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/@fesjs/plugin-watermark/download/@fesjs/plugin-watermark-2.0.3.tgz", + "integrity": "sha1-2YCpPwuHU5HRJmlC86xA4VoGjjU=", + "dependencies": { + "@fesjs/utils": "^2.0.4", + "lodash-es": "^4.17.15" + }, + "peerDependencies": { + "@fesjs/fes": "^2.0.0", + "vue": "^3.0.5" + } + }, + "node_modules/@fesjs/preset-built-in": { + "version": "2.1.8", + "resolved": "http://10.107.103.115:8001/@fesjs/preset-built-in/download/@fesjs/preset-built-in-2.1.8.tgz", + "integrity": "sha1-n2TwS0oLRBJ4AzjV9dUbhb7RWQ4=", + "dependencies": { + "@babel/core": "^7.12.13", + "@babel/plugin-proposal-do-expressions": "^7.12.13", + "@babel/plugin-proposal-export-default-from": "^7.12.13", + "@babel/plugin-proposal-function-bind": "^7.12.13", + "@babel/plugin-proposal-pipeline-operator": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.13", + "@babel/preset-env": "^7.12.13", + "@babel/preset-typescript": "^7.15.0", + "@fesjs/compiler": "^2.0.5", + "@fesjs/utils": "^2.0.4", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@vue/babel-plugin-jsx": "^1.0.2", + "@vue/compiler-sfc": "^3.2.37", + "autoprefixer": "^10.2.4", + "babel-loader": "^8.2.2", + "babel-plugin-import": "1.13.3", + "body-parser": "^1.19.0", + "cli-highlight": "^2.1.4", + "cliui": "7.0.4", + "connect-history-api-fallback": "^1.6.0", + "cookie-parser": "^1.4.5", + "copy-webpack-plugin": "^10.2.4", + "core-js": "^3.27.0", + "css-loader": "^5.0.1", + "css-minimizer-webpack-plugin": "^3.0.0", + "envinfo": "^7.7.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "get-folder-size": "^2.0.1", + "html-webpack-plugin": "^5.0.0", + "html-webpack-tags-plugin": "^3.0.0", + "less": "3.9.0", + "less-loader": "^8.0.0", + "mini-css-extract-plugin": "^1.3.5", + "mockjs": "^1.1.0", + "postcss": "8.3.0", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^4.2.0", + "postcss-safe-parser": "^5.0.2", + "qs": "^6.10.2", + "raw-loader": "^4.0.2", + "style-loader": "^2.0.0", + "url-loader": "^4.1.1", + "vue-loader": "^16.1.2", + "webpack": "^5.24.2", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^3.11.2", + "webpackbar": "^5.0.0-3" + }, + "peerDependencies": { + "core-js": "^3.27.0" + } + }, + "node_modules/@fesjs/preset-built-in/node_modules/@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.47.tgz", + "integrity": "sha1-G9w29s3BZD9y4sOX6xo5j1AErT0=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@fesjs/runtime": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/@fesjs/runtime/download/@fesjs/runtime-2.0.3.tgz", + "integrity": "sha1-lE7hEDXDnF7S6uHEjAbITTLhCiE=", + "dependencies": { + "vue-router": "^4.0.1" + }, + "peerDependencies": { + "vue": "^3.2.37" + } + }, + "node_modules/@fesjs/traction-widget": { + "version": "1.7.3", + "resolved": "http://10.107.103.115:8001/@fesjs/traction-widget/download/@fesjs/traction-widget-1.7.3.tgz", + "integrity": "sha1-Qu+LhyJkAKfgKwrsiOGJdT4knW8=", + "dependencies": { + "@fesjs/fes-design": "0.8.7" + } + }, + "node_modules/@fesjs/traction-widget/node_modules/@fesjs/fes-design": { + "version": "0.8.7", + "resolved": "http://10.107.103.115:8001/@fesjs/fes-design/download/@fesjs/fes-design-0.8.7.tgz", + "integrity": "sha1-Iy+4MKYf1oHVcjoT9ut3+7gp/r4=", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@floating-ui/dom": "^1.2.9", + "@juggle/resize-observer": "^3.3.1", + "@types/lodash-es": "^4.17.5", + "@vue/shared": "^3.2.24", + "@vueuse/core": "^9.6.0", + "async-validator": "^4.0.7", + "csstype": "^3.0.10", + "date-fns": "^2.28.0", + "lodash-es": "^4.17.21", + "stickybits": "^3.7.9" + }, + "peerDependencies": { + "vue": "^3.2.24" + } + }, + "node_modules/@fesjs/traction-widget/node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "http://10.107.103.115:8001/@floating-ui/core/download/@floating-ui/core-1.5.0.tgz", + "integrity": "sha1-XAXGDVri0FEBwwIcGio1DdwCf4w=", + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@fesjs/traction-widget/node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "http://10.107.103.115:8001/@floating-ui/dom/download/@floating-ui/dom-1.5.3.tgz", + "integrity": "sha1-VOUO/LQywGwjzTPeK1dRAgBUNvo=", + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@fesjs/traction-widget/node_modules/@floating-ui/utils": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/@floating-ui/utils/download/@floating-ui/utils-0.1.4.tgz", + "integrity": "sha1-GWVNECbMQQl11GRFGA5wpQibPn0=" + }, + "node_modules/@fesjs/utils": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/@fesjs/utils/download/@fesjs/utils-2.0.4.tgz", + "integrity": "sha1-rH1YmaX90lR540PTyoAztxe5rzs=", + "dependencies": { + "@babel/generator": "^7.15.0", + "@babel/parser": "^7.15.0", + "@babel/traverse": "^7.15.0", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "crequire": "^1.8.1", + "debug": "^4.3.2", + "deepmerge": "^4.2.2", + "glob": "^7.1.7", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "mustache": "^4.2.0", + "pkg-up": "^3.1.0", + "portfinder": "^1.0.28", + "resolve": "^1.20.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "yargs-parser": "^20.2.9" + } + }, + "node_modules/@fesjs/utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@fesjs/utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@fesjs/utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@fesjs/utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/@fesjs/utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/@fesjs/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@fesjs/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@fesjs/utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@fesjs/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "node_modules/@floating-ui/core": { + "version": "0.6.2", + "resolved": "http://10.107.103.115:8001/@floating-ui/core/download/@floating-ui/core-0.6.2.tgz", + "integrity": "sha1-8oE/Dl89XtevUCnhoIIgPa3wK30=" + }, + "node_modules/@floating-ui/dom": { + "version": "0.4.5", + "resolved": "http://10.107.103.115:8001/@floating-ui/dom/download/@floating-ui/dom-0.4.5.tgz", + "integrity": "sha1-LojRZkYRnMZ9RGg/de6ZhAR1u/o=", + "dependencies": { + "@floating-ui/core": "^0.6.2" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "http://10.107.103.115:8001/@hapi/hoek/download/@hapi/hoek-9.3.0.tgz", + "integrity": "sha1-g2iGnctzW+Ln9ct2R9544WeiUfs=" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/@hapi/topo/download/@hapi/topo-5.1.0.tgz", + "integrity": "sha1-3ESOMyxsbjek3AL9hLqNRLmvsBI=", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "http://10.107.103.115:8001/@humanwhocodes/config-array/download/@humanwhocodes/config-array-0.5.0.tgz", + "integrity": "sha1-FAeWfUxu7Nc4j4Os8er00Mbljvk=", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "http://10.107.103.115:8001/@humanwhocodes/object-schema/download/@humanwhocodes/object-schema-1.2.1.tgz", + "integrity": "sha1-tSBSnsIdjllFoYUd/Rwy6U45/0U=", + "dev": true + }, + "node_modules/@intlify/core-base": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/@intlify/core-base/download/@intlify/core-base-9.2.2.tgz", + "integrity": "sha1-U1M2mwXMn+Ncq5X+IK/rikSB+Tk=", + "dependencies": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/@intlify/devtools-if/download/@intlify/devtools-if-9.2.2.tgz", + "integrity": "sha1-sT2axLTi/m0ufapVZReoBh/ovTk=", + "dependencies": { + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/@intlify/message-compiler/download/@intlify/message-compiler-9.2.2.tgz", + "integrity": "sha1-5Cq2k5uK5bPSH69qRARWZ6GLuhw=", + "dependencies": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/shared": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/@intlify/shared/download/@intlify/shared-9.2.2.tgz", + "integrity": "sha1-UBG+nKK0q4b4Zgc5KG4nB/mrtKU=", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/@intlify/vue-devtools/download/@intlify/vue-devtools-9.2.2.tgz", + "integrity": "sha1-uVcBVW2vfrs6LUWqOunmQVrtgxc=", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.1.1.tgz", + "integrity": "sha1-5dLkUDBqlJHjvXfjI+ONev8xWZY=", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/@jridgewell/resolve-uri/download/@jridgewell/resolve-uri-3.1.0.tgz", + "integrity": "sha1-IgOxGMFXchrd/mnUe3BGVGMGbXg=", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/@jridgewell/set-array/download/@jridgewell/set-array-1.1.2.tgz", + "integrity": "sha1-fGz5mNbSC5FMClWpGuko/yWWXnI=", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "http://10.107.103.115:8001/@jridgewell/source-map/download/@jridgewell/source-map-0.3.2.tgz", + "integrity": "sha1-9FNRqu1FJ6KYUS7HL4EEDJmFgPs=", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.3.2.tgz", + "integrity": "sha1-wa7cYehT8rufXf5tRELTtWWyU7k=", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "http://10.107.103.115:8001/@jridgewell/sourcemap-codec/download/@jridgewell/sourcemap-codec-1.4.14.tgz", + "integrity": "sha1-rdTJjTQUcqKJGQtCTvvbCWmRuyQ=" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "http://10.107.103.115:8001/@jridgewell/trace-mapping/download/@jridgewell/trace-mapping-0.3.17.tgz", + "integrity": "sha1-eTBBJ3r5BzsJUaf+Dw2MTJjDaYU=", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "http://10.107.103.115:8001/@juggle/resize-observer/download/@juggle/resize-observer-3.4.0.tgz", + "integrity": "sha1-CNbF4gz35MwC/RgcSwwiXNMdu2A=" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "http://10.107.103.115:8001/@nicolo-ribaudo/eslint-scope-5-internals/download/@nicolo-ribaudo/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha1-2/czqWXKR7GXMXfcC7bIie3PsSk=", + "dev": true, + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "http://10.107.103.115:8001/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz", + "integrity": "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "http://10.107.103.115:8001/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz", + "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "http://10.107.103.115:8001/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz", + "integrity": "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "http://10.107.103.115:8001/@polka/url/download/@polka/url-1.0.0-next.21.tgz", + "integrity": "sha1-XeWiOFo1MJQn9gEZkrVEUU1VmqE=" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "http://10.107.103.115:8001/@sideway/address/download/@sideway/address-4.1.4.tgz", + "integrity": "sha1-A9zOvG6kf9wib309GtUSlV1Hg/A=", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/@sideway/formula/download/@sideway/formula-3.0.1.tgz", + "integrity": "sha1-gPy8uvfOAx4O8t0psb/Hw/WDYR8=" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/@sideway/pinpoint/download/@sideway/pinpoint-2.0.0.tgz", + "integrity": "sha1-z/j/rcNyrSn9P3gneusp5jLMcN8=" + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "http://10.107.103.115:8001/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha1-TU+7EQiZOqo2IRYkfD0YGIosbIU=", + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-3.0.0.tgz", + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/@trysound/sax/download/@trysound/sax-0.2.0.tgz", + "integrity": "sha1-zMqrdYr1Z2Hre/N69vA/Mm3XmK0=", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.21.1", + "resolved": "http://10.107.103.115:8001/@types/eslint/download/@types/eslint-8.21.1.tgz", + "integrity": "sha1-EQtEGiENU6tHeVEk28Ppu5k9Hnw=", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "http://10.107.103.115:8001/@types/eslint-scope/download/@types/eslint-scope-3.7.4.tgz", + "integrity": "sha1-N/wSI/B4bDlicGihLpTW5vxh3hY=", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "http://10.107.103.115:8001/@types/estree/download/@types/estree-0.0.51.tgz", + "integrity": "sha1-z9cJJKJaP9MrIY5eQg5ol+GsT0A=" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/@types/glob/download/@types/glob-7.2.0.tgz", + "integrity": "sha1-vBtb86qS8lvV3TnzXFc2G9zlsus=", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/@types/html-minifier-terser/download/@types/html-minifier-terser-6.1.0.tgz", + "integrity": "sha1-T8M6AMHQwWmHsaIM+S0gYUxVrDU=" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "http://10.107.103.115:8001/@types/json-schema/download/@types/json-schema-7.0.11.tgz", + "integrity": "sha1-1CG2xSejA398hEM/0sQingFoY9M=" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "http://10.107.103.115:8001/@types/json5/download/@types/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "http://10.107.103.115:8001/@types/lodash/download/@types/lodash-4.14.191.tgz", + "integrity": "sha1-CVEef3y6J1rNi0Gd2sjammp54vo=" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.6", + "resolved": "http://10.107.103.115:8001/@types/lodash-es/download/@types/lodash-es-4.17.6.tgz", + "integrity": "sha1-wu1MgyD/pvEbQ+uJ6eruxllmoKA=", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/@types/minimatch/download/@types/minimatch-5.1.2.tgz", + "integrity": "sha1-B1CLRXl8uB7D8nMBGwVM0HVe3co=" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "http://10.107.103.115:8001/@types/minimist/download/@types/minimist-1.2.2.tgz", + "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.14.5", + "resolved": "http://10.107.103.115:8001/@types/node/download/@types/node-18.14.5.tgz", + "integrity": "sha1-ShOmRFhiFZMD/DhYZZipOW/ECLM=" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "http://10.107.103.115:8001/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz", + "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=", + "dev": true + }, + "node_modules/@types/normalize-wheel": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/@types/normalize-wheel/download/@types/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-3xL2vVRgRMb3LTFPzVhQRHeplQM=" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/@types/parse-json/download/@types/parse-json-4.0.0.tgz", + "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "http://10.107.103.115:8001/@types/web-bluetooth/download/@types/web-bluetooth-0.0.16.tgz", + "integrity": "sha1-HRKHOo5JVnNx8qdf4+f37cpmYtg=" + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w=" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha1-DFusJ4gNI/iYlM0Daje1XvYd38E=", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/compiler-core/download/@vue/compiler-core-3.2.47.tgz", + "integrity": "sha1-PgfGhNdIl6yapZIsUgdB8wKSZ/g=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/compiler-dom/download/@vue/compiler-dom-3.2.47.tgz", + "integrity": "sha1-oLBsr373BWk55WPcqpy94weU8wU=", + "dependencies": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.26.tgz", + "integrity": "sha1-POdmd+SqWDEWVaO+qescuATSJz8=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-ssr": "3.2.26", + "@vue/reactivity-transform": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz", + "integrity": "sha1-mrkq5iTaUfe2Bk9GecLUVk9DfMg=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-dom": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-dom/download/@vue/compiler-dom-3.2.26.tgz", + "integrity": "sha1-x6e1XVCnt5gd1E/CghHfFFBIJmc=", + "dependencies": { + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.26.tgz", + "integrity": "sha1-/QSVIzQfv0q16I4l7vVm2GKJS6c=", + "dependencies": { + "@vue/compiler-dom": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/reactivity-transform": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.26.tgz", + "integrity": "sha1-bY8gpKotGXKPJd6ZlirdvnxNA+k=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/shared/download/@vue/shared-3.2.26.tgz", + "integrity": "sha1-es0WIXg1cbmoLsofBBtKCpg0gdk=" + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.47.tgz", + "integrity": "sha1-NYcsAaJzqsTWBwq52NqRirEwV+4=", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.0", + "resolved": "http://10.107.103.115:8001/@vue/devtools-api/download/@vue/devtools-api-6.5.0.tgz", + "integrity": "sha1-mLmUJe3ucLTJkmkmKPoeosHlfQc=" + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.47.tgz", + "integrity": "sha1-5F300GNw+KvykIGhav0lz/um2E4=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.47", + "resolved": "http://10.107.103.115:8001/@vue/shared/download/@vue/shared-3.2.47.tgz", + "integrity": "sha1-5ZfvdQhsbolv9UeKa/wKeqS70Uw=" + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "http://10.107.103.115:8001/@vueuse/core/download/@vueuse/core-9.13.0.tgz", + "integrity": "sha1-L2nmbRkFweTuvCSaAXWc+I6gDPQ=", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "http://10.107.103.115:8001/@vueuse/metadata/download/@vueuse/metadata-9.13.0.tgz", + "integrity": "sha1-vCWmza0bGpPDbOMBkRJNplIFOf8=" + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "http://10.107.103.115:8001/@vueuse/shared/download/@vueuse/shared-9.13.0.tgz", + "integrity": "sha1-CJ/0zE4uekAV5XqPMuSznQljU7k=", + "dependencies": { + "vue-demi": "*" + } + }, + "node_modules/@webank/eslint-config-webank": { + "version": "0.4.2", + "resolved": "http://10.107.103.115:8001/@webank/eslint-config-webank/download/@webank/eslint-config-webank-0.4.2.tgz", + "integrity": "sha1-7F2FLCflof/1clNFaOiKqw1UOPY=", + "dev": true, + "dependencies": { + "@babel/eslint-parser": "^7.13.14", + "@babel/plugin-syntax-jsx": "^7.12.13", + "confusing-browser-globals": "^1.0.10", + "eslint": "^7.26.0", + "eslint-plugin-angular": "^4.0.1", + "eslint-plugin-html": "^6.1.2", + "eslint-plugin-import": "2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-vue": "^7.16.0", + "vue-eslint-parser": "^7.10.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/ast/download/@webassemblyjs/ast-1.11.1.tgz", + "integrity": "sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc=", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha1-9sYacF8P16auyqToGY8j2dwXnk8=" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.11.1.tgz", + "integrity": "sha1-GmMZLYeI5cASgAump6RscFKI/RY=" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.11.1.tgz", + "integrity": "sha1-gyqQDrREiEzemnytRn+BUA9eWrU=" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/helper-numbers/download/@webassemblyjs/helper-numbers-1.11.1.tgz", + "integrity": "sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4=", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE=" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.11.1.tgz", + "integrity": "sha1-Ie4GWntjXzGec48N1zv72igcCXo=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.11.1.tgz", + "integrity": "sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ=", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.11.1.tgz", + "integrity": "sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU=", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.11.1.tgz", + "integrity": "sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8=" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.11.1.tgz", + "integrity": "sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.11.1.tgz", + "integrity": "sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.11.1.tgz", + "integrity": "sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.11.1.tgz", + "integrity": "sha1-hspzRTT0F+m9PGfHocddi+QfsZk=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "http://10.107.103.115:8001/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.11.1.tgz", + "integrity": "sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA=", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "http://10.107.103.115:8001/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "http://10.107.103.115:8001/accepts/download/accepts-1.3.8.tgz", + "integrity": "sha1-C/C+EltnAUrcsLCSHmLbe//hay4=", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "http://10.107.103.115:8001/acorn/download/acorn-8.8.2.tgz", + "integrity": "sha1-Gy8l2wKvllOZuXdrDCw5EnbTfEo=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "http://10.107.103.115:8001/acorn-import-assertions/download/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha1-uitZOc5iwjjbbZPYHJsRGym4Vek=", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "http://10.107.103.115:8001/acorn-jsx/download/acorn-jsx-5.3.2.tgz", + "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "http://10.107.103.115:8001/acorn-walk/download/acorn-walk-8.2.0.tgz", + "integrity": "sha1-dBIQ8uJCZFRQiFOi9E0KuDt/acE=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/aggregate-error/download/aggregate-error-3.1.0.tgz", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "http://10.107.103.115:8001/ajv/download/ajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/ajv-formats/download/ajv-formats-2.1.1.tgz", + "integrity": "sha1-bmaUAGWet0lzu/LjMycYCgmWtSA=", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz", + "integrity": "sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE=", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz", + "integrity": "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "http://10.107.103.115:8001/ajv-keywords/download/ajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "http://10.107.103.115:8001/ansi-colors/download/ansi-colors-3.2.4.tgz", + "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "http://10.107.103.115:8001/ansi-escapes/download/ansi-escapes-4.3.2.tgz", + "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "http://10.107.103.115:8001/type-fest/download/type-fest-0.21.3.tgz", + "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "http://10.107.103.115:8001/ansi-html-community/download/ansi-html-community-0.0.8.tgz", + "integrity": "sha1-afvE1sy+OD+XNpNK40w/gpDxv0E=", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-5.0.1.tgz", + "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "http://10.107.103.115:8001/anymatch/download/anymatch-3.1.3.tgz", + "integrity": "sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4=", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "http://10.107.103.115:8001/arg/download/arg-4.1.3.tgz", + "integrity": "sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "http://10.107.103.115:8001/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "http://10.107.103.115:8001/array-flatten/download/array-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/array-ify/download/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "http://10.107.103.115:8001/array-includes/download/array-includes-3.1.6.tgz", + "integrity": "sha1-np5yDhlPGYJmup4Ywp5qmw5LIl8=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-union": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/array-union/download/array-union-3.0.1.tgz", + "integrity": "sha1-2lJjDTJ/i4jPv7V3KOKvXNm2uXU=", + "engines": { + "node": ">=12" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "http://10.107.103.115:8001/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "http://10.107.103.115:8001/array.prototype.flat/download/array.prototype.flat-1.3.1.tgz", + "integrity": "sha1-/8ZXanyj78L0ahQ7nR3am0s89eI=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/asap/download/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "http://10.107.103.115:8001/asn1/download/asn1-0.2.6.tgz", + "integrity": "sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0=", + "optional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/astral-regex/download/astral-regex-2.0.0.tgz", + "integrity": "sha1-SDFDxWeu7UeFdZwIZXhtx319LjE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "http://10.107.103.115:8001/async/download/async-2.6.4.tgz", + "integrity": "sha1-cGt/9ghGZM1+rnE/b5ZUM7VQQiE=", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/async-limiter/download/async-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "http://10.107.103.115:8001/async-validator/download/async-validator-4.2.5.tgz", + "integrity": "sha1-yW6jMypSFpnQr6rO7VEKVGVsYzk=" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "http://10.107.103.115:8001/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "optional": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/at-least-node/download/at-least-node-1.0.0.tgz", + "integrity": "sha1-YCzUtG6EStTv/JKoARo8RuAjjcI=", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "http://10.107.103.115:8001/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "http://10.107.103.115:8001/autoprefixer/download/autoprefixer-10.4.13.tgz", + "integrity": "sha1-tRNrWZMCCaMh6fo9yi58TSI+g6g=", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "http://10.107.103.115:8001/available-typed-arrays/download/available-typed-arrays-1.0.5.tgz", + "integrity": "sha1-kvlWFlAQadB9EO2y/DfT4cZRI7c=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "http://10.107.103.115:8001/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "http://10.107.103.115:8001/aws4/download/aws4-1.12.0.tgz", + "integrity": "sha1-zhydFDOJZ54lOzFCQeqapc7JgNM=", + "optional": true + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "http://10.107.103.115:8001/axios/download/axios-0.21.1.tgz", + "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "http://10.107.103.115:8001/babel-loader/download/babel-loader-8.3.0.tgz", + "integrity": "sha1-Ekk26EG6T+gXZ4bW/yit0fE01qg=", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "http://10.107.103.115:8001/find-cache-dir/download/find-cache-dir-3.3.2.tgz", + "integrity": "sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks=", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/find-up/download/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/make-dir/download/make-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-import": { + "version": "1.13.3", + "resolved": "http://10.107.103.115:8001/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz", + "integrity": "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "http://10.107.103.115:8001/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha1-XRvTg20KGeG4S78tlkDMtvlRwSI=", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "http://10.107.103.115:8001/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha1-Vq2II3E36t5IWnG1L3Lb7VfGIwo=", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha1-OQ+Rw42QRzWS7UM1HoAanT4P10c=", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "http://10.107.103.115:8001/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/balanced-match/download/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "http://10.107.103.115:8001/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "http://10.107.103.115:8001/base64-js/download/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "dev": true + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "http://10.107.103.115:8001/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "http://10.107.103.115:8001/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/binary-extensions/download/binary-extensions-2.2.0.tgz", + "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "http://10.107.103.115:8001/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/bl/download/bl-4.1.0.tgz", + "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.1", + "resolved": "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz", + "integrity": "sha1-+fm19TaSAlOz0m52YOfaTM/5u2I=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "http://10.107.103.115:8001/body-parser/download/body-parser-1.20.2.tgz", + "integrity": "sha1-b+sOIcRyTQbef/ONo22tT1enR/0=", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "http://10.107.103.115:8001/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "http://10.107.103.115:8001/brace-expansion/download/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "http://10.107.103.115:8001/browserslist/download/browserslist-4.21.5.tgz", + "integrity": "sha1-dcXa5gBj7mQfl34A7dPPsvt69qc=", + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "http://10.107.103.115:8001/buffer/download/buffer-5.7.1.tgz", + "integrity": "sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/buffer-from/download/buffer-from-1.1.2.tgz", + "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "http://10.107.103.115:8001/bytes/download/bytes-3.1.2.tgz", + "integrity": "sha1-iwvuuYYFrfGxKPpDhkA8AJ4CIaU=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/set-value": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/cachedir/download/cachedir-2.3.0.tgz", + "integrity": "sha1-DHWJKgUhmPCyHHwYBNgzHt/K4Og=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/call-bind/download/call-bind-1.0.2.tgz", + "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/camel-case/download/camel-case-4.1.2.tgz", + "integrity": "sha1-lygHKpVPgFIoIlpt7qazhGHhvVo=", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "http://10.107.103.115:8001/camelcase/download/camelcase-6.3.0.tgz", + "integrity": "sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo=", + "engines": { + "node": ">=10" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "http://10.107.103.115:8001/camelcase-keys/download/camelcase-keys-6.2.2.tgz", + "integrity": "sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A=", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "http://10.107.103.115:8001/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001456", + "resolved": "http://10.107.103.115:8001/caniuse-lite/download/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha1-c07B2/pPOr5uQ1t47PQNaOjDLOQ=" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "http://10.107.103.115:8001/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "optional": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "http://10.107.103.115:8001/chardet/download/chardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "http://10.107.103.115:8001/chokidar/download/chokidar-3.5.3.tgz", + "integrity": "sha1-HPN8hwe5Mr0a8a4iwEMuKs0ZA70=", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz", + "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "http://10.107.103.115:8001/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "http://10.107.103.115:8001/clean-css/download/clean-css-5.3.2.tgz", + "integrity": "sha1-cOzH1NQRSSH10pg0n/hqMamXUiQ=", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/clean-stack/download/clean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/cli-cursor/download/cli-cursor-3.1.0.tgz", + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "http://10.107.103.115:8001/cli-highlight/download/cli-highlight-2.1.11.tgz", + "integrity": "sha1-SXNvpFLwqvT65YDjCssmgo0twb8=", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "http://10.107.103.115:8001/cli-spinners/download/cli-spinners-2.7.0.tgz", + "integrity": "sha1-+BX9MLX56qwC22BMeiMe18sveXo=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/cli-truncate/download/cli-truncate-3.1.0.tgz", + "integrity": "sha1-PyOrElNePXPoObtD5zyd5IfbE4k=", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-6.0.1.tgz", + "integrity": "sha1-MYPjj66aZdfLXlOUXNWJfQJgoGo=", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-6.2.1.tgz", + "integrity": "sha1-DmIyDPmcIa//OzASGSVGqsv7BcU=", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-9.2.2.tgz", + "integrity": "sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI=", + "dev": true + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha1-+uMWfHKedGP4RhzlErCApJJoqog=", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-5.0.0.tgz", + "integrity": "sha1-tzBjxXqpb5zYgWVLFSlNldKFxCo=", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/string-width/download/string-width-5.1.2.tgz", + "integrity": "sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q=", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-7.0.1.tgz", + "integrity": "sha1-YXQKCM42th5Q5lZT8HBg0ACXX7I=", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/cli-width/download/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "http://10.107.103.115:8001/cliui/download/cliui-7.0.4.tgz", + "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "http://10.107.103.115:8001/clone/download/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "http://10.107.103.115:8001/colord/download/colord-2.9.3.tgz", + "integrity": "sha1-T4zpGd5Fbx1cHDaMMH/iDz5Z+0M=" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "http://10.107.103.115:8001/colorette/download/colorette-1.4.0.tgz", + "integrity": "sha1-UZD7uHJ2JZqGrXAL/yxtb6o/ykA=" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "http://10.107.103.115:8001/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/commander/download/commander-7.2.0.tgz", + "integrity": "sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc=", + "engines": { + "node": ">= 10" + } + }, + "node_modules/commitizen": { + "version": "4.2.6", + "resolved": "http://10.107.103.115:8001/commitizen/download/commitizen-4.2.6.tgz", + "integrity": "sha1-w1rznhy1/C3ohRHfgC2kNE3DyoA=", + "dev": true, + "dependencies": { + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", + "dedent": "0.7.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", + "find-root": "1.1.0", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.4", + "is-utf8": "^0.2.1", + "lodash": "4.17.21", + "minimist": "1.2.6", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commitizen/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "http://10.107.103.115:8001/fs-extra/download/fs-extra-9.1.0.tgz", + "integrity": "sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0=", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/commitizen/node_modules/minimist": { + "version": "1.2.6", + "resolved": "http://10.107.103.115:8001/minimist/download/minimist-1.2.6.tgz", + "integrity": "sha1-hjelt1nqDW6YcCz7OpKDMjyTr0Q=", + "dev": true + }, + "node_modules/commitizen/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/strip-bom/download/strip-bom-4.0.0.tgz", + "integrity": "sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commitlint": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/commitlint/download/commitlint-15.0.0.tgz", + "integrity": "sha1-UeuL2qBLeA2xIgf8ViRcMqgnpjU=", + "dev": true, + "dependencies": { + "@commitlint/cli": "^15.0.0", + "@commitlint/types": "^15.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/commitlint/node_modules/@commitlint/cli": { + "version": "15.0.0", + "resolved": "http://10.107.103.115:8001/@commitlint/cli/download/@commitlint/cli-15.0.0.tgz", + "integrity": "sha1-jnjobuK2lVwaXRQOc0psFxzjZ+4=", + "dev": true, + "dependencies": { + "@commitlint/format": "^15.0.0", + "@commitlint/lint": "^15.0.0", + "@commitlint/load": "^15.0.0", + "@commitlint/read": "^15.0.0", + "@commitlint/types": "^15.0.0", + "lodash": "^4.17.19", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/commitlint/node_modules/cliui": { + "version": "8.0.1", + "resolved": "http://10.107.103.115:8001/cliui/download/cliui-8.0.1.tgz", + "integrity": "sha1-DASwddsCy/5g3I5s8vVIaxo2CKo=", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/commitlint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commitlint/node_modules/yargs": { + "version": "17.7.1", + "resolved": "http://10.107.103.115:8001/yargs/download/yargs-17.7.1.tgz", + "integrity": "sha1-NKd2RSAdGo/FITrOeHwiDqu9CWc=", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/commitlint/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-21.1.1.tgz", + "integrity": "sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU=", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/compare-func/download/compare-func-2.0.0.tgz", + "integrity": "sha1-+2XnXtvd/S5WhVTotbBf/3pR/LM=", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "http://10.107.103.115:8001/compressible/download/compressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "http://10.107.103.115:8001/compression/download/compression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "http://10.107.103.115:8001/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "http://10.107.103.115:8001/confusing-browser-globals/download/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha1-rkDptXzdORVAiigF69OlWFYI3IE=", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "http://10.107.103.115:8001/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "http://10.107.103.115:8001/consola/download/consola-2.15.3.tgz", + "integrity": "sha1-LhH5jWpL5x/3LgvfB70j4Sy2FVA=" + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "http://10.107.103.115:8001/contains-path/download/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "http://10.107.103.115:8001/content-disposition/download/content-disposition-0.5.4.tgz", + "integrity": "sha1-i4K076yCUSoCuwsdzsnSxejrW/4=", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "http://10.107.103.115:8001/content-type/download/content-type-1.0.5.tgz", + "integrity": "sha1-i3cxYmVtHRCGeEyPI6VM5tc9eRg=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "http://10.107.103.115:8001/conventional-changelog-angular/download/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha1-iWiF1juRSnDUk0tZ0v573hgysow=", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "http://10.107.103.115:8001/conventional-changelog-conventionalcommits/download/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha1-B2VJD1ZCS0b2y025E1kC1uWjbcI=", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/conventional-commit-types/download/conventional-commit-types-3.0.0.tgz", + "integrity": "sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls=", + "dev": true + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "http://10.107.103.115:8001/conventional-commits-parser/download/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha1-p9O3d1iiAqmyKT0hEqjYBSx0CXI=", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "http://10.107.103.115:8001/convert-source-map/download/convert-source-map-1.9.0.tgz", + "integrity": "sha1-f6rmI1P7QhM2bQypg1jSLoNosF8=" + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/cookie/download/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "http://10.107.103.115:8001/cookie-parser/download/cookie-parser-1.4.6.tgz", + "integrity": "sha1-OsOn01p6A7vH42UHOiYHSCQhRZQ=", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "http://10.107.103.115:8001/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "10.2.4", + "resolved": "http://10.107.103.115:8001/copy-webpack-plugin/download/copy-webpack-plugin-10.2.4.tgz", + "integrity": "sha1-bIVL4/2q4iAl2jS5ESzPgcYzCP4=", + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.20.0" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz", + "integrity": "sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE=", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/ajv-keywords/download/ajv-keywords-5.1.0.tgz", + "integrity": "sha1-adTThaRzPNvqtElkoRcKiPh/DhY=", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "http://10.107.103.115:8001/glob-parent/download/glob-parent-6.0.2.tgz", + "integrity": "sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM=", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz", + "integrity": "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-4.0.0.tgz", + "integrity": "sha1-YDMenjrnjsXRY1PEZ8NLOgodPfc=", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/core-js": { + "version": "3.28.0", + "resolved": "http://10.107.103.115:8001/core-js/download/core-js-3.28.0.tgz", + "integrity": "sha1-7YuemcJzh5/f/w7fx37nCaWADko=", + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.28.0", + "resolved": "http://10.107.103.115:8001/core-js-compat/download/core-js-compat-3.28.0.tgz", + "integrity": "sha1-wIRW2FRginJkUwoq+igfrfIOzuY=", + "dependencies": { + "browserslist": "^4.21.5" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "http://10.107.103.115:8001/cosmiconfig/download/cosmiconfig-7.1.0.tgz", + "integrity": "sha1-FEO5r6WWtnAILqRsvY9qYrhGNfY=", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/create-require/download/create-require-1.1.1.tgz", + "integrity": "sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM=", + "dev": true + }, + "node_modules/crequire": { + "version": "1.8.1", + "resolved": "http://10.107.103.115:8001/crequire/download/crequire-1.8.1.tgz", + "integrity": "sha1-rIHyBHhrXyARlOsWmM9EGxCktX0=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "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/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "http://10.107.103.115:8001/css-declaration-sorter/download/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha1-vl4dcbepkkM/scVCx6G4NeRWguw=", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "resolved": "http://10.107.103.115:8001/css-loader/download/css-loader-5.2.7.tgz", + "integrity": "sha1-m58RHt9vsr5dxiUlZEy8nCMgZK4=", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "http://10.107.103.115:8001/css-minimizer-webpack-plugin/download/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha1-q3j3gc7ZGBmS/ntuTzQi52Qph48=", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz", + "integrity": "sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE=", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/ajv-keywords/download/ajv-keywords-5.1.0.tgz", + "integrity": "sha1-adTThaRzPNvqtElkoRcKiPh/DhY=", + "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": "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz", + "integrity": "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/postcss": { + "version": "8.4.21", + "resolved": "http://10.107.103.115:8001/postcss/download/postcss-8.4.21.tgz", + "integrity": "sha1-xjm3GaV+/DGHsToddlZ1SF9BNPQ=", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-4.0.0.tgz", + "integrity": "sha1-YDMenjrnjsXRY1PEZ8NLOgodPfc=", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/source-map-js/download/source-map-js-1.0.2.tgz", + "integrity": "sha1-rbw2HZxi3zgBJefxYfccgm8eSQw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/css-select/download/css-select-4.3.0.tgz", + "integrity": "sha1-23EpsoRmYv2GKM/ElquytZ5BUps=", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "http://10.107.103.115:8001/css-tree/download/css-tree-1.1.3.tgz", + "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/css-what/download/css-what-6.1.0.tgz", + "integrity": "sha1-+17/z3bx3eosgb36pN5E55uscPQ=", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.14", + "resolved": "http://10.107.103.115:8001/cssnano/download/cssnano-5.1.14.tgz", + "integrity": "sha1-B7Cvbac2QSdv5abUV1dwLrri6wU=", + "dependencies": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.13", + "resolved": "http://10.107.103.115:8001/cssnano-preset-default/download/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha1-5zU7DFeXXRvdl6yW5o5cG4xo6ZA=", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/cssnano-utils/download/cssnano-utils-3.1.0.tgz", + "integrity": "sha1-lWhNCMkVEe38cNJjYzjKN+86aGE=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/csso/download/csso-4.2.0.tgz", + "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/csstype/download/csstype-3.1.1.tgz", + "integrity": "sha1-hBtTLEXHWO5UahHVvXt7RzyMMLk=" + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "http://10.107.103.115:8001/cz-conventional-changelog/download/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha1-kkaUfJBAQUmz/iz37pGsrTt9ItI=", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "http://10.107.103.115:8001/dargs/download/dargs-7.0.0.tgz", + "integrity": "sha1-BAFcQd4Ly2nshAUPPZvgyvjW1cw=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "http://10.107.103.115:8001/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "2.28.0", + "resolved": "http://10.107.103.115:8001/date-fns/download/date-fns-2.28.0.tgz", + "integrity": "sha1-lXDWVvX8ExQ+UMl1o7a760bNCLI=", + "engines": { + "node": ">=0.11" + } + }, + "node_modules/dayjs": { + "version": "1.11.5", + "resolved": "http://10.107.103.115:8001/dayjs/download/dayjs-1.11.5.tgz", + "integrity": "sha1-AOjMYn8jH5SZwZs4r0n1bcCsXpM=" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "http://10.107.103.115:8001/debug/download/debug-4.3.4.tgz", + "integrity": "sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU=", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/decamelize-keys/download/decamelize-keys-1.1.1.tgz", + "integrity": "sha1-BKLVI7LxjYDQFYpDuJXVbf+NGdg=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/map-obj/download/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "http://10.107.103.115:8001/decode-uri-component/download/decode-uri-component-0.2.2.tgz", + "integrity": "sha1-5p2+JdN5QRcd1UDgJMREzVGI4ek=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "http://10.107.103.115:8001/dedent/download/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/deep-equal/download/deep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/deep-is/download/deep-is-0.1.4.tgz", + "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/deepmerge/download/deepmerge-4.3.0.tgz", + "integrity": "sha1-ZUkYk+xHdW1EcZrlIODiYJIztZs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/default-gateway/download/default-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/defaults/download/defaults-1.0.4.tgz", + "integrity": "sha1-sLAgYsHiqmL/XZUo8PmLqpCXjXo=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/defaults/node_modules/clone": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/define-properties/download/define-properties-1.2.0.tgz", + "integrity": "sha1-UpiFcGcMnqzt2AZPSpkPJAWEm9U=", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "http://10.107.103.115:8001/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/depd/download/depd-2.0.0.tgz", + "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/destroy/download/destroy-1.2.0.tgz", + "integrity": "sha1-SANzVQmti+VSk0xn32FPlOZvoBU=", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/detect-file/download/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/detect-indent/download/detect-indent-6.1.0.tgz", + "integrity": "sha1-WSSF67v2s7GrK+F1yDk9BMoNV+Y=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/detect-node/download/detect-node-2.1.0.tgz", + "integrity": "sha1-yccHdaScPQO8LAbZpzvlUPl4+LE=" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "http://10.107.103.115:8001/diff/download/diff-4.0.2.tgz", + "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/dir-glob/download/dir-glob-3.0.1.tgz", + "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "http://10.107.103.115:8001/dns-packet/download/dns-packet-1.3.4.tgz", + "integrity": "sha1-40VQZYJKJQe6iGxVqJljuxB97G8=", + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "http://10.107.103.115:8001/dom-serializer/download/dom-serializer-1.4.1.tgz", + "integrity": "sha1-3l1Bsa6ikCFdxFptrorc8dMuLTA=", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/domelementtype/download/domelementtype-2.3.0.tgz", + "integrity": "sha1-XEXo6GmVJiYzHXqrMm0B2vZdWJ0=" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "http://10.107.103.115:8001/domhandler/download/domhandler-4.3.1.tgz", + "integrity": "sha1-jXkgM0FvWdaLwDpap7AYwcqJJ5w=", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "http://10.107.103.115:8001/domutils/download/domutils-2.8.0.tgz", + "integrity": "sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU=", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "http://10.107.103.115:8001/dot-case/download/dot-case-3.0.4.tgz", + "integrity": "sha1-mytnDQCkMWZ6inW6Kc0bmICc51E=", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "http://10.107.103.115:8001/dot-prop/download/dot-prop-5.3.0.tgz", + "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "http://10.107.103.115:8001/dotenv/download/dotenv-8.2.0.tgz", + "integrity": "sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=", + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "http://10.107.103.115:8001/duplexer/download/duplexer-0.1.2.tgz", + "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/eastasianwidth/download/eastasianwidth-0.2.0.tgz", + "integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "http://10.107.103.115:8001/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/echarts": { + "version": "5.2.2", + "resolved": "http://10.107.103.115:8001/echarts/download/echarts-5.2.2.tgz", + "integrity": "sha1-7DyLKhUcu6cbo8LHz5svIEfOQ3A=", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.2.1" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/tslib/download/tslib-2.3.0.tgz", + "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.302", + "resolved": "http://10.107.103.115:8001/electron-to-chromium/download/electron-to-chromium-1.4.302.tgz", + "integrity": "sha1-V3Bkb/5wUWd7SJImFEqtk4bUIPI=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "http://10.107.103.115:8001/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "http://10.107.103.115:8001/enhanced-resolve/download/enhanced-resolve-5.12.0.tgz", + "integrity": "sha1-MA4ckCKPW1cMTTW6vyY/bacVVjQ=", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "http://10.107.103.115:8001/enquirer/download/enquirer-2.3.6.tgz", + "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "http://10.107.103.115:8001/ansi-colors/download/ansi-colors-4.1.3.tgz", + "integrity": "sha1-N2ETQOsiQ+cMxgTK011jJw1IeBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/entities/download/entities-2.2.0.tgz", + "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=" + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "http://10.107.103.115:8001/envinfo/download/envinfo-7.8.1.tgz", + "integrity": "sha1-Bjd+Pl9NN5/qesWS1a2JJ+DE1HU=", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "http://10.107.103.115:8001/errno/download/errno-0.1.8.tgz", + "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "http://10.107.103.115:8001/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "http://10.107.103.115:8001/error-stack-parser/download/error-stack-parser-2.1.4.tgz", + "integrity": "sha1-IpywHNv6hEQL+pGHYoW5RoAYgoY=", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "http://10.107.103.115:8001/es-abstract/download/es-abstract-1.21.1.tgz", + "integrity": "sha1-5hBaCZlnwIN3gwoMnLWJ1XDdhsY=", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "http://10.107.103.115:8001/es-module-lexer/download/es-module-lexer-0.9.3.tgz", + "integrity": "sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk=" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/es-set-tostringtag/download/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha1-M41QL29nQwHXELgMhZLeihXwnNg=", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/es-shim-unscopables/download/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha1-cC5jIZMgHj7fhxNjXQg9N45RAkE=", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "http://10.107.103.115:8001/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/escalade/download/escalade-3.1.1.tgz", + "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "http://10.107.103.115:8001/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "http://10.107.103.115:8001/eslint/download/eslint-7.32.0.tgz", + "integrity": "sha1-xtMooUvj+wjI0dIeEsAv23oqgS0=", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "http://10.107.103.115:8001/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha1-g7N1GH1BIyShlj2E+mZDd6I+tNc=", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "http://10.107.103.115:8001/debug/download/debug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "http://10.107.103.115:8001/eslint-module-utils/download/eslint-module-utils-2.7.4.tgz", + "integrity": "sha1-Tz5BEWqvE6IHkiYeYdOi5+BYOXQ=", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "http://10.107.103.115:8001/debug/download/debug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-angular": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/eslint-plugin-angular/download/eslint-plugin-angular-4.1.0.tgz", + "integrity": "sha1-U9A9gp7f9Q1RfoH4YnguPvpZGVM=", + "dev": true + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/eslint-plugin-es/download/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha1-dafN/czdwFiZNK7rOEF18iHFeJM=", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-html": { + "version": "6.2.0", + "resolved": "http://10.107.103.115:8001/eslint-plugin-html/download/eslint-plugin-html-6.2.0.tgz", + "integrity": "sha1-cVvAC1C70NmW4o+VPCiaXr7GnUM=", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.2" + } + }, + "node_modules/eslint-plugin-html/node_modules/entities": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/entities/download/entities-3.0.1.tgz", + "integrity": "sha1-K4h8piWF6W2zkDSC0zbBAGwwAdQ=", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/eslint-plugin-html/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/htmlparser2/download/htmlparser2-7.2.0.tgz", + "integrity": "sha1-iBfN6ji7wyQ5KpCxmQkI6Bpl9aU=", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.22.1", + "resolved": "http://10.107.103.115:8001/eslint-plugin-import/download/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI=", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "http://10.107.103.115:8001/doctrine/download/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "http://10.107.103.115:8001/eslint-plugin-node/download/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha1-yVVEQW7kraJnQKMEdO78VALcZx0=", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "7.20.0", + "resolved": "http://10.107.103.115:8001/eslint-plugin-vue/download/eslint-plugin-vue-7.20.0.tgz", + "integrity": "sha1-mMIYhaa/3wcTw6kpV6Wv6q7tklM=", + "dev": true, + "dependencies": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/eslint-scope/download/eslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/eslint-utils/download/eslint-utils-2.1.0.tgz", + "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "http://10.107.103.115:8001/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz", + "integrity": "sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz", + "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "http://10.107.103.115:8001/globals/download/globals-13.20.0.tgz", + "integrity": "sha1-6idqHlCP/U8WEoiPnRutHicXv4I=", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "http://10.107.103.115:8001/ignore/download/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.8", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "http://10.107.103.115:8001/espree/download/espree-7.3.1.tgz", + "integrity": "sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y=", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "http://10.107.103.115:8001/acorn/download/acorn-7.4.1.tgz", + "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.2", + "resolved": "http://10.107.103.115:8001/esquery/download/esquery-1.4.2.tgz", + "integrity": "sha1-xtP+4F3WZYCOKthwYx8iH1YXsdE=", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "http://10.107.103.115:8001/estraverse/download/estraverse-5.3.0.tgz", + "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/esrecurse/download/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "http://10.107.103.115:8001/estraverse/download/estraverse-5.3.0.tgz", + "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/estraverse/download/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/estree-walker/download/estree-walker-2.0.2.tgz", + "integrity": "sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw=" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "http://10.107.103.115:8001/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "http://10.107.103.115:8001/eventemitter3/download/eventemitter3-4.0.7.tgz", + "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "http://10.107.103.115:8001/events/download/events-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/eventsource/download/eventsource-2.0.2.tgz", + "integrity": "sha1-dt/MApMPsv8zlSC20pDaVzqehQg=", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/execa/download/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "http://10.107.103.115:8001/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/expand-tilde/download/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "http://10.107.103.115:8001/express/download/express-4.18.2.tgz", + "integrity": "sha1-P6vggpbpMMeWwZ48UWl5OGup/Vk=", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "http://10.107.103.115:8001/body-parser/download/body-parser-1.20.1.tgz", + "integrity": "sha1-sYEqiRLBlc03Gj7l5m+qIzilxmg=", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "http://10.107.103.115:8001/cookie/download/cookie-0.5.0.tgz", + "integrity": "sha1-0fXXGt7GVYxY84mYfDZqpH6ZT4s=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "http://10.107.103.115:8001/raw-body/download/raw-body-2.5.1.tgz", + "integrity": "sha1-/hsWKLGBtwAhXl/UI4n5i3E5KFc=", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "optional": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/external-editor/download/external-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "engines": [ + "node >=0.6.0" + ], + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "http://10.107.103.115:8001/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "http://10.107.103.115:8001/fast-glob/download/fast-glob-3.2.12.tgz", + "integrity": "sha1-fznsmcLmqwMDNxQtqeDBjzevroA=", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "http://10.107.103.115:8001/fastq/download/fastq-1.13.0.tgz", + "integrity": "sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw=", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "http://10.107.103.115:8001/faye-websocket/download/faye-websocket-0.11.4.tgz", + "integrity": "sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo=", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "http://10.107.103.115:8001/figures/download/figures-3.2.0.tgz", + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/file-entry-cache/download/file-entry-cache-6.0.1.tgz", + "integrity": "sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "http://10.107.103.115:8001/file-loader/download/file-loader-6.2.0.tgz", + "integrity": "sha1-uu98+OGEDfMl5DkLRISHlIDuvk0=", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "http://10.107.103.115:8001/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/finalhandler/download/finalhandler-1.2.0.tgz", + "integrity": "sha1-fSP+VzGyB7RkDk/NAK7B+SB6ezI=", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "http://10.107.103.115:8001/find-node-modules/download/find-node-modules-2.1.3.tgz", + "integrity": "sha1-PJds/yyinulLT56vxhOYf8TA7kQ=", + "dev": true, + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/find-root/download/find-root-1.1.0.tgz", + "integrity": "sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ=", + "dev": true + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/findup-sync/download/findup-sync-4.0.0.tgz", + "integrity": "sha1-lWyc3egEBSuIG0KFEpBcSl8s3vA=", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "http://10.107.103.115:8001/flat-cache/download/flat-cache-3.0.4.tgz", + "integrity": "sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE=", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "http://10.107.103.115:8001/flatted/download/flatted-3.2.7.tgz", + "integrity": "sha1-YJ85IHy2FLidB2W0d8stQ3+/l4c=", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "http://10.107.103.115:8001/follow-redirects/download/follow-redirects-1.15.2.tgz", + "integrity": "sha1-tGCGQUS6Y/JoEJbydMTlcCbaLBM=", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "http://10.107.103.115:8001/for-each/download/for-each-0.3.3.tgz", + "integrity": "sha1-abRH6IoKXTLD5whPPxcQA0shN24=", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "http://10.107.103.115:8001/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "http://10.107.103.115:8001/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/forwarded/download/forwarded-0.2.0.tgz", + "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/fraction.js/download/fraction.js-4.2.0.tgz", + "integrity": "sha1-RI5RCaMTo1J/WjqyEZ7Ezw4OKVA=", + "engines": { + "node": "*" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "http://10.107.103.115:8001/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "http://10.107.103.115:8001/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "http://10.107.103.115:8001/fs-extra/download/fs-extra-10.1.0.tgz", + "integrity": "sha1-Aoc8+8QITd4SfqpfmQXu8jJdGr8=", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "http://10.107.103.115:8001/fsevents/download/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "http://10.107.103.115:8001/function.prototype.name/download/function.prototype.name-1.1.5.tgz", + "integrity": "sha1-zOBQX+H/uAUD5vnkbMZORqEqliE=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "http://10.107.103.115:8001/functions-have-names/download/functions-have-names-1.2.3.tgz", + "integrity": "sha1-BAT+TuK6L2B/Dg7DyAuumUEzuDQ=" + }, + "node_modules/gar": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/gar/download/gar-1.0.4.tgz", + "integrity": "sha1-93e8fbQlwFcv3rUmdhcsoa6YiLg=" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "http://10.107.103.115:8001/gensync/download/gensync-1.0.0-beta.2.tgz", + "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "http://10.107.103.115:8001/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-folder-size": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/get-folder-size/download/get-folder-size-2.0.1.tgz", + "integrity": "sha1-P+BSTdO60FJX7xMRMxQXvNAgpJc=", + "dependencies": { + "gar": "^1.0.4", + "tiny-each-async": "2.0.3" + }, + "bin": { + "get-folder-size": "bin/get-folder-size" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/get-intrinsic/download/get-intrinsic-1.2.0.tgz", + "integrity": "sha1-etHcBTXzopBLugdXcnY+UFH20F8=", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/get-stream/download/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/get-symbol-description/download/get-symbol-description-1.0.0.tgz", + "integrity": "sha1-f9uByQAQH71WTdXxowr1qtweWNY=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "http://10.107.103.115:8001/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "http://10.107.103.115:8001/git-raw-commits/download/git-raw-commits-2.0.11.tgz", + "integrity": "sha1-vDV2Y4Bx0YZV4cxg1/UkkgAI1yM=", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "http://10.107.103.115:8001/glob/download/glob-7.2.3.tgz", + "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/glob-parent/download/glob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/glob-to-regexp/download/glob-to-regexp-0.4.1.tgz", + "integrity": "sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=" + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/global-dirs/download/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/global-modules/download/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/global-prefix/download/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "http://10.107.103.115:8001/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/globalthis/download/globalthis-1.0.3.tgz", + "integrity": "sha1-WFKIKlK4DcMBsGYCc+HtCC8LbM8=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/globby": { + "version": "12.2.0", + "resolved": "http://10.107.103.115:8001/globby/download/globby-12.2.0.tgz", + "integrity": "sha1-KrgEa0+6T/bu3oNbKfZ4+Q49PCI=", + "dependencies": { + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/gopd/download/gopd-1.0.1.tgz", + "integrity": "sha1-Kf923mnax0ibfAkYpXiOVkd8Myw=", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "http://10.107.103.115:8001/graceful-fs/download/graceful-fs-4.2.10.tgz", + "integrity": "sha1-FH06AG2kyjzhRyjHrvwofDZ9emw=" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/gzip-size/download/gzip-size-6.0.0.tgz", + "integrity": "sha1-BlNn/VDCOcBnHLy61b4+LusQ5GI=", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/handle-thing/download/handle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "http://10.107.103.115:8001/har-validator/download/har-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "deprecated": "this library is no longer supported", + "optional": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/hard-rejection/download/hard-rejection-2.1.0.tgz", + "integrity": "sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/has-bigints/download/has-bigints-1.0.2.tgz", + "integrity": "sha1-CHG9Pj1RYm9soJZmaLo11WAtbqo=", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/has-property-descriptors/download/has-property-descriptors-1.0.0.tgz", + "integrity": "sha1-YQcIYAYG02lh7QTBlhk7amB/qGE=", + "dependencies": { + "get-intrinsic": "^1.1.1" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/has-proto/download/has-proto-1.0.1.tgz", + "integrity": "sha1-GIXBMFU4lYr/Rp/vN5N8InlUCOA=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/has-symbols/download/has-symbols-1.0.3.tgz", + "integrity": "sha1-u3ssQ0klHc6HsSX3vfh0qnyLOfg=", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/has-tostringtag/download/has-tostringtag-1.0.0.tgz", + "integrity": "sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU=", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/hash-sum/download/hash-sum-2.0.0.tgz", + "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=" + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "http://10.107.103.115:8001/highlight.js/download/highlight.js-10.7.3.tgz", + "integrity": "sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE=", + "engines": { + "node": "*" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz", + "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "http://10.107.103.115:8001/hosted-git-info/download/hosted-git-info-2.8.9.tgz", + "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "http://10.107.103.115:8001/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "http://10.107.103.115:8001/html-entities/download/html-entities-1.4.0.tgz", + "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/html-minifier-terser/download/html-minifier-terser-6.1.0.tgz", + "integrity": "sha1-v8gYk0zAeRj2s2afV3Ts39SPMqs=", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "http://10.107.103.115:8001/commander/download/commander-8.3.0.tgz", + "integrity": "sha1-SDfqGy2me5xhamevuw+v7lZ7ymY=", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "http://10.107.103.115:8001/html-tags/download/html-tags-3.2.0.tgz", + "integrity": "sha1-27NRjSC3JlJOTdQ945frCpVyaWE=", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "http://10.107.103.115:8001/html-webpack-plugin/download/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha1-w5EZNvV2gcH59Ni2jBWM2d/lL1A=", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/html-webpack-tags-plugin": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/html-webpack-tags-plugin/download/html-webpack-tags-plugin-3.0.2.tgz", + "integrity": "sha1-7vxmAORbNmBej5G71Jf8f09tLYw=", + "dependencies": { + "glob": "^7.2.0", + "minimatch": "^3.0.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "html-webpack-plugin": "^5.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/html-webpack-tags-plugin/node_modules/slash": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/htmlparser2/download/htmlparser2-6.1.0.tgz", + "integrity": "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "http://10.107.103.115:8001/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/http-errors/download/http-errors-2.0.0.tgz", + "integrity": "sha1-t3dKFIbvc892Z6ya4IWMASxXudM=", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "http://10.107.103.115:8001/http-parser-js/download/http-parser-js-0.5.8.tgz", + "integrity": "sha1-ryMJDZrE4kVz3m9q7MnYSki/IOM=" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "http://10.107.103.115:8001/http-proxy/download/http-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "http://10.107.103.115:8001/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "http://10.107.103.115:8001/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "http://10.107.103.115:8001/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/http-signature/download/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/human-signals/download/human-signals-2.1.0.tgz", + "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "resolved": "http://10.107.103.115:8001/husky/download/husky-7.0.4.tgz", + "integrity": "sha1-JCBIJF3EnI+xvwzHz7mN1yJTFTU=", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "http://10.107.103.115:8001/iconv-lite/download/iconv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/icss-utils/download/icss-utils-5.1.0.tgz", + "integrity": "sha1-xr5oWKvQE9do6YNmrkfiXViHsa4=", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "http://10.107.103.115:8001/ieee754/download/ieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "http://10.107.103.115:8001/ignore/download/ignore-5.2.4.tgz", + "integrity": "sha1-opHAxheP8blgvv5H/N7DAWdKYyQ=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "http://10.107.103.115:8001/image-size/download/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "http://10.107.103.115:8001/import-fresh/download/import-fresh-3.3.0.tgz", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "http://10.107.103.115:8001/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "http://10.107.103.115:8001/ini/download/ini-1.3.8.tgz", + "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "http://10.107.103.115:8001/inquirer/download/inquirer-8.2.4.tgz", + "integrity": "sha1-3b/obKL2dkmmfapvEFHBKPaE8LQ=", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/internal-ip/download/internal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/internal-slot/download/internal-slot-1.0.4.tgz", + "integrity": "sha1-hVHnuvdKemul90nPsWqmByLw1vM=", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "http://10.107.103.115:8001/ip/download/ip-1.1.8.tgz", + "integrity": "sha1-rgWUj2sHVDXtMweszgRinajNv0g=" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "http://10.107.103.115:8001/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "http://10.107.103.115:8001/is-absolute-url/download/is-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/is-arguments/download/is-arguments-1.1.1.tgz", + "integrity": "sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps=", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/is-array-buffer/download/is-array-buffer-3.0.1.tgz", + "integrity": "sha1-3rHbT8rkgwjVTvJEJwbAOTmXBSo=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "http://10.107.103.115:8001/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/is-bigint/download/is-bigint-1.0.4.tgz", + "integrity": "sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM=", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/is-boolean-object/download/is-boolean-object-1.1.2.tgz", + "integrity": "sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "http://10.107.103.115:8001/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "http://10.107.103.115:8001/is-callable/download/is-callable-1.2.7.tgz", + "integrity": "sha1-O8KoXqdC2eNiBdys3XLKH9xRsFU=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "http://10.107.103.115:8001/is-core-module/download/is-core-module-2.11.0.tgz", + "integrity": "sha1-rUyz44Y+gUUjyW8/WNJsxXD/AUQ=", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "http://10.107.103.115:8001/is-date-object/download/is-date-object-1.0.5.tgz", + "integrity": "sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8=", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "http://10.107.103.115:8001/is-glob/download/is-glob-4.0.3.tgz", + "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-interactive/download/is-interactive-1.0.0.tgz", + "integrity": "sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/is-negative-zero/download/is-negative-zero-2.0.2.tgz", + "integrity": "sha1-e/bwOigAO4s5Zd46wm9mTXZfMVA=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "http://10.107.103.115:8001/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "http://10.107.103.115:8001/is-number-object/download/is-number-object-1.0.7.tgz", + "integrity": "sha1-WdUK2kxFJReE6ZBPUkbHQvB6Qvw=", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/is-obj/download/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/is-path-cwd/download/is-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/is-plain-obj/download/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/is-plain-object/download/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/is-regex/download/is-regex-1.1.4.tgz", + "integrity": "sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg=", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-shared-array-buffer/download/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha1-jyWcVztgtqMtQFihoHQwwKc0THk=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "http://10.107.103.115:8001/is-string/download/is-string-1.0.7.tgz", + "integrity": "sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0=", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/is-symbol/download/is-symbol-1.0.4.tgz", + "integrity": "sha1-ptrJO2NbBjymhyI23oiRClevE5w=", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/is-text-path/download/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "http://10.107.103.115:8001/is-typed-array/download/is-typed-array-1.1.10.tgz", + "integrity": "sha1-NqW1y0GJtXXRo+SwhTa/tIWAHj8=", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "http://10.107.103.115:8001/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz", + "integrity": "sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "http://10.107.103.115:8001/is-utf8/download/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-weakref/download/is-weakref-1.0.2.tgz", + "integrity": "sha1-lSnzg6kzggXol2XgOS78LxAPBvI=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "http://10.107.103.115:8001/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "optional": true + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/javascript-stringify/download/javascript-stringify-2.1.0.tgz", + "integrity": "sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk=" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "http://10.107.103.115:8001/jest-worker/download/jest-worker-27.5.1.tgz", + "integrity": "sha1-jRRvCQDolzsQa29zzB6ajLhvjbA=", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-8.1.1.tgz", + "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/joi": { + "version": "17.3.0", + "resolved": "http://10.107.103.115:8001/joi/download/joi-17.3.0.tgz", + "integrity": "sha1-8b5KbOKbwXFmZYGaw2HfoTn/9dI=", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/js-tokens/download/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "http://10.107.103.115:8001/js-yaml/download/js-yaml-3.14.1.tgz", + "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "http://10.107.103.115:8001/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "http://10.107.103.115:8001/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "http://10.107.103.115:8001/json-schema/download/json-schema-0.4.0.tgz", + "integrity": "sha1-995M9u+rg4666zI2R0y7paGTCrU=", + "optional": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "http://10.107.103.115:8001/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "http://10.107.103.115:8001/json5/download/json5-2.2.3.tgz", + "integrity": "sha1-eM1vGhm9wStz21rQxh79ZsHikoM=", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/jsonfile/download/jsonfile-6.1.0.tgz", + "integrity": "sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "http://10.107.103.115:8001/jsonparse/download/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "http://10.107.103.115:8001/JSONStream/download/JSONStream-1.3.5.tgz", + "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "http://10.107.103.115:8001/jsprim/download/jsprim-1.4.2.tgz", + "integrity": "sha1-cSxlUzoVyHi6WentXw4m1bd8X+s=", + "optional": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/klona/download/klona-2.0.6.tgz", + "integrity": "sha1-hb/7+BnAOy9TJwQSQgpFVe+ILiI=", + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "3.9.0", + "resolved": "http://10.107.103.115:8001/less/download/less-3.9.0.tgz", + "integrity": "sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ=", + "dependencies": { + "clone": "^2.1.2" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "8.1.1", + "resolved": "http://10.107.103.115:8001/less-loader/download/less-loader-8.1.1.tgz", + "integrity": "sha1-q6vpElgEV60ApDGBRqrFtT4CP0I=", + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz", + "integrity": "sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY=", + "optional": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/levn/download/levn-0.4.1.tgz", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "http://10.107.103.115:8001/lilconfig/download/lilconfig-2.0.6.tgz", + "integrity": "sha1-MqOEVYvVivPUxuB33RrR05e8adQ=", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "http://10.107.103.115:8001/lines-and-columns/download/lines-and-columns-1.2.4.tgz", + "integrity": "sha1-7KKE910pZQeTCdwK2SVauy68FjI=" + }, + "node_modules/lint-staged": { + "version": "12.1.2", + "resolved": "http://10.107.103.115:8001/lint-staged/download/lint-staged-12.1.2.tgz", + "integrity": "sha1-kMVxkn4TcfwTPnIGcd15ieq1P3Q=", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.16", + "commander": "^8.3.0", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "lilconfig": "2.0.4", + "listr2": "^3.13.3", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "object-inspect": "^1.11.0", + "string-argv": "^0.3.1", + "supports-color": "^9.0.2", + "yaml": "^1.10.2" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lint-staged/node_modules/colorette": { + "version": "2.0.19", + "resolved": "http://10.107.103.115:8001/colorette/download/colorette-2.0.19.tgz", + "integrity": "sha1-zfBE9HrUGg9LVrOg1bTm4aLVp5g=", + "dev": true + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "8.3.0", + "resolved": "http://10.107.103.115:8001/commander/download/commander-8.3.0.tgz", + "integrity": "sha1-SDfqGy2me5xhamevuw+v7lZ7ymY=", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/lint-staged/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/execa/download/execa-5.1.1.tgz", + "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/get-stream/download/get-stream-6.0.1.tgz", + "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/is-stream/download/is-stream-2.0.1.tgz", + "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/lilconfig/download/lilconfig-2.0.4.tgz", + "integrity": "sha1-9FB9BD1wWLOAtqj1y3vNSzTO4II=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/npm-run-path/download/npm-run-path-4.0.1.tgz", + "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "9.3.1", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-9.3.1.tgz", + "integrity": "sha1-NOStPHHJo52uMlTsxGybdOieFaY=", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/lint-staged/node_modules/which": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "http://10.107.103.115:8001/listr2/download/listr2-3.14.0.tgz", + "integrity": "sha1-IxAcxi4Tdf1YNrJIJ20dK1H9vp4=", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/cli-truncate/download/cli-truncate-2.1.0.tgz", + "integrity": "sha1-w54ovwXtzeW+O5iZKiLe7Vork8c=", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.19", + "resolved": "http://10.107.103.115:8001/colorette/download/colorette-2.0.19.tgz", + "integrity": "sha1-zfBE9HrUGg9LVrOg1bTm4aLVp5g=", + "dev": true + }, + "node_modules/listr2/node_modules/p-map": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/p-map/download/p-map-4.0.0.tgz", + "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-3.0.0.tgz", + "integrity": "sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/parse-json/download/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/loader-runner/download/loader-runner-4.3.0.tgz", + "integrity": "sha1-wbShY7mfYUgwNTsWdV5xSawjFOE=", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/loader-utils/download/loader-utils-2.0.4.tgz", + "integrity": "sha1-i1yzi1w0qaAY7h/A5qBm0d/MUow=", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/locate-path/download/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "http://10.107.103.115:8001/lodash/download/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "http://10.107.103.115:8001/lodash-es/download/lodash-es-4.17.21.tgz", + "integrity": "sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "http://10.107.103.115:8001/lodash.debounce/download/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "http://10.107.103.115:8001/lodash.get/download/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "http://10.107.103.115:8001/lodash.map/download/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "http://10.107.103.115:8001/lodash.merge/download/lodash.merge-4.6.2.tgz", + "integrity": "sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "http://10.107.103.115:8001/lodash.truncate/download/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "http://10.107.103.115:8001/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/log-symbols/download/log-symbols-4.1.0.tgz", + "integrity": "sha1-P727lbRoOsn8eFER55LlWNSr1QM=", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/log-update/download/log-update-4.0.0.tgz", + "integrity": "sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE=", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "http://10.107.103.115:8001/loglevel/download/loglevel-1.8.1.tgz", + "integrity": "sha1-XGIfg9W0jFSuk7YVY1P1VZYzd7Q=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/longest/download/longest-2.0.1.tgz", + "integrity": "sha1-eB4YMpaqlPbU2RbcM10NF676I/g=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/lower-case/download/lower-case-2.0.2.tgz", + "integrity": "sha1-b6I3xj29xKgsoP2ILkci3F5jTig=", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "http://10.107.103.115:8001/magic-string/download/magic-string-0.25.9.tgz", + "integrity": "sha1-3n+fr5HvihyR0CwuUxTIJ3283Rw=", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/make-dir/download/make-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "http://10.107.103.115:8001/make-error/download/make-error-1.3.6.tgz", + "integrity": "sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=", + "dev": true + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "http://10.107.103.115:8001/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/map-obj/download/map-obj-4.3.0.tgz", + "integrity": "sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "http://10.107.103.115:8001/mdn-data/download/mdn-data-2.0.14.tgz", + "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "http://10.107.103.115:8001/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "http://10.107.103.115:8001/meow/download/meow-8.1.2.tgz", + "integrity": "sha1-vL5FvaDuFynTUMA8/8g5WjbE6Jc=", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/find-up/download/find-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/hosted-git-info/download/hosted-git-info-4.1.0.tgz", + "integrity": "sha1-gnuChn6f8cjQxNnVOIA5fSyG0iQ=", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/locate-path/download/locate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-3.0.3.tgz", + "integrity": "sha1-28w+LaWVCaCYNCKITNFy7v36Ul4=", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/p-locate/download/p-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "http://10.107.103.115:8001/read-pkg/download/read-pkg-5.2.0.tgz", + "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "http://10.107.103.115:8001/read-pkg-up/download/read-pkg-up-7.0.1.tgz", + "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "http://10.107.103.115:8001/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "http://10.107.103.115:8001/hosted-git-info/download/hosted-git-info-2.8.9.tgz", + "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=", + "dev": true + }, + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "http://10.107.103.115:8001/type-fest/download/type-fest-0.6.0.tgz", + "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "7.3.8", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "http://10.107.103.115:8001/type-fest/download/type-fest-0.18.1.tgz", + "integrity": "sha1-20vBUaSiz07r+a3V23VQjbbMhB8=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/merge/download/merge-2.1.1.tgz", + "integrity": "sha1-We9L9+Cz6HkYZDboSBwGpsFiypg=", + "dev": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "http://10.107.103.115:8001/merge2/download/merge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "http://10.107.103.115:8001/micromatch/download/micromatch-4.0.5.tgz", + "integrity": "sha1-vImZp8u/d83InxMvbkZwUbSQkMY=", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "http://10.107.103.115:8001/mime/download/mime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "http://10.107.103.115:8001/mime-db/download/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "http://10.107.103.115:8001/mime-types/download/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/mimic-fn/download/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/min-indent/download/min-indent-1.0.1.tgz", + "integrity": "sha1-pj9oFnOzBXH76LwlaGrnRu76mGk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.6.2", + "resolved": "http://10.107.103.115:8001/mini-css-extract-plugin/download/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha1-gxcrT9gS+PxKCdb20W+ST1OZDKg=", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "http://10.107.103.115:8001/minimatch/download/minimatch-3.1.2.tgz", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "http://10.107.103.115:8001/minimist/download/minimist-1.2.8.tgz", + "integrity": "sha1-waRk52kzAuCCoHXO4MBXdBrEdyw=" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "http://10.107.103.115:8001/minimist-options/download/minimist-options-4.1.0.tgz", + "integrity": "sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk=", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/mitt/download/mitt-3.0.0.tgz", + "integrity": "sha1-ae+b1cgP9vV0c+jYkybQHEFL4L0=" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "http://10.107.103.115:8001/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mockjs": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/mockjs/download/mockjs-1.1.0.tgz", + "integrity": "sha1-5qDDeOkZBtuv8gkRzAJzs8fXWwY=", + "dependencies": { + "commander": "*" + }, + "bin": { + "random": "bin/random" + } + }, + "node_modules/monaco-editor": { + "version": "0.20.0", + "resolved": "http://10.107.103.115:8001/monaco-editor/download/monaco-editor-0.20.0.tgz", + "integrity": "sha1-XVAJNDpVASRCbLTZZaTSejSLTeo=" + }, + "node_modules/monaco-editor-webpack-plugin": { + "version": "1.9.1", + "resolved": "http://10.107.103.115:8001/monaco-editor-webpack-plugin/download/monaco-editor-webpack-plugin-1.9.1.tgz", + "integrity": "sha1-60u7HF5b+1VFQcGuFULnTCqfQ/0=", + "dependencies": { + "loader-utils": "^1.2.3" + }, + "peerDependencies": { + "monaco-editor": "0.19.x || 0.20.x", + "webpack": "^4.5.0" + } + }, + "node_modules/monaco-editor-webpack-plugin/node_modules/json5": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/json5/download/json5-1.0.2.tgz", + "integrity": "sha1-Y9mNYPIbMTt3xNbaGL+mnYDh1ZM=", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/monaco-editor-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "http://10.107.103.115:8001/loader-utils/download/loader-utils-1.4.2.tgz", + "integrity": "sha1-KalX86Y5c4g+toTxD/09FR/sAaM=", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/mrmime/download/mrmime-1.0.1.tgz", + "integrity": "sha1-X5DIJfrUvdQdyRTv9dGoz9ryTyc=", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "http://10.107.103.115:8001/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/mustache/download/mustache-4.2.0.tgz", + "integrity": "sha1-5YkjJNYKEuycKnM1ntylKXK/b2Q=", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "http://10.107.103.115:8001/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "http://10.107.103.115:8001/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "http://10.107.103.115:8001/nan/download/nan-2.17.0.tgz", + "integrity": "sha1-wBUKI2ihgvAz6apRlex26kGhmcs=", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "http://10.107.103.115:8001/nanoid/download/nanoid-3.3.4.tgz", + "integrity": "sha1-cwtn480J4t6s8DwCfIHJ2dvF6Ks=", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "http://10.107.103.115:8001/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "http://10.107.103.115:8001/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "http://10.107.103.115:8001/negotiator/download/negotiator-0.6.3.tgz", + "integrity": "sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "http://10.107.103.115:8001/neo-async/download/neo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "http://10.107.103.115:8001/nice-try/download/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "http://10.107.103.115:8001/no-case/download/no-case-3.0.4.tgz", + "integrity": "sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0=", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "http://10.107.103.115:8001/node-forge/download/node-forge-0.10.0.tgz", + "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.8", + "resolved": "http://10.107.103.115:8001/node-releases/download/node-releases-2.0.8.tgz", + "integrity": "sha1-DzSc3I/Po5qSrAvpvEi3cGKSua4=" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "http://10.107.103.115:8001/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/normalize-url/download/normalize-url-6.1.0.tgz", + "integrity": "sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo=", + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/normalize-wheel/download/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/nth-check/download/nth-check-2.1.1.tgz", + "integrity": "sha1-yeq0KO/842zWuSySS9sADvHx7R0=", + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "http://10.107.103.115:8001/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "http://10.107.103.115:8001/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "http://10.107.103.115:8001/object-inspect/download/object-inspect-1.12.3.tgz", + "integrity": "sha1-umLf/WfuJWyMCG365p4BbNHxmLk=" + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "http://10.107.103.115:8001/object-is/download/object-is-1.1.5.tgz", + "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "http://10.107.103.115:8001/object.assign/download/object.assign-4.1.4.tgz", + "integrity": "sha1-lnPHx8NRq4xNC1FvQ0Pr9N+3eZ8=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "http://10.107.103.115:8001/object.values/download/object.values-1.1.6.tgz", + "integrity": "sha1-SruqceukfWNYnUAoVvkIJD7qmx0=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "http://10.107.103.115:8001/on-finished/download/on-finished-2.4.1.tgz", + "integrity": "sha1-WMjEQRblSEWtV/FKsQsDUzGErD8=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "http://10.107.103.115:8001/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/onetime/download/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "http://10.107.103.115:8001/opener/download/opener-1.5.2.tgz", + "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "http://10.107.103.115:8001/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "http://10.107.103.115:8001/optionator/download/optionator-0.9.1.tgz", + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "http://10.107.103.115:8001/ora/download/ora-5.4.1.tgz", + "integrity": "sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/p-limit/download/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/p-locate/download/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/p-retry/download/p-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "http://10.107.103.115:8001/param-case/download/param-case-3.0.4.tgz", + "integrity": "sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU=", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "http://10.107.103.115:8001/parse-json/download/parse-json-5.2.0.tgz", + "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/parse-passwd/download/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/parse5/download/parse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/parse5/download/parse5-6.0.1.tgz", + "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "http://10.107.103.115:8001/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "http://10.107.103.115:8001/pascal-case/download/pascal-case-3.1.2.tgz", + "integrity": "sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs=", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/path-key/download/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "http://10.107.103.115:8001/path-parse/download/path-parse-1.0.7.tgz", + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "http://10.107.103.115:8001/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/path-type/download/path-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/picocolors/download/picocolors-1.0.0.tgz", + "integrity": "sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw=" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "http://10.107.103.115:8001/picomatch/download/picomatch-2.3.1.tgz", + "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=", + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "http://10.107.103.115:8001/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "http://10.107.103.115:8001/pirates/download/pirates-4.0.5.tgz", + "integrity": "sha1-/uw1LqXDJo+yOjfHAqsWmfNaXzs=", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/pkg-up/download/pkg-up-3.1.0.tgz", + "integrity": "sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU=", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "http://10.107.103.115:8001/portfinder/download/portfinder-1.0.32.tgz", + "integrity": "sha1-L+G55YOJcSQp3CvqW+shRhRsf4E=", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "http://10.107.103.115:8001/debug/download/debug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz", + "integrity": "sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY=", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "http://10.107.103.115:8001/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.3.0", + "resolved": "http://10.107.103.115:8001/postcss/download/postcss-8.3.0.tgz", + "integrity": "sha1-sacT9hcspCfj8F7xMD3otlaDMl8=", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "http://10.107.103.115:8001/postcss-calc/download/postcss-calc-8.2.4.tgz", + "integrity": "sha1-d7nCm/y+igf/ZpPchwUIKIiXOaU=", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "http://10.107.103.115:8001/postcss-colormin/download/postcss-colormin-5.3.0.tgz", + "integrity": "sha1-PO6eXKYrLCfoT85jr/wM+1kBlWo=", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "http://10.107.103.115:8001/postcss-convert-values/download/postcss-convert-values-5.1.3.tgz", + "integrity": "sha1-BJmLubprZaoxA11mmmrzQsX505M=", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/postcss-discard-comments/download/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha1-jfXoHSklryeAB1hAwVJvBmDlNpY=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-discard-duplicates/download/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha1-nrT+hFZwak7r1tO3t3fQe60D6Eg=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-discard-empty/download/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha1-5XdiND/39QP+U/ylU9GNfww2nGw=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-discard-overridden/download/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha1-foxbUzJXR+nZATG7iGNSgvtKJ24=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "http://10.107.103.115:8001/postcss-flexbugs-fixes/download/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha1-ICjhRTEwdPyavidst8oU5UAetJ0=", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/postcss-loader/download/postcss-loader-4.3.0.tgz", + "integrity": "sha1-LE3pZXzU8Hr1q0K9YKZzAE2huMw=", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.8", + "resolved": "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz", + "integrity": "sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g=", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=" + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "http://10.107.103.115:8001/postcss-merge-longhand/download/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha1-JKG99ALZ7w5w9Wjzm9wDRNVo+xY=", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.3", + "resolved": "http://10.107.103.115:8001/postcss-merge-rules/download/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha1-j5dnnmfMjQhnemUZr8pB7fIiCJQ=", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-minify-font-values/download/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha1-8d8AFKcmCD0mDTvYXXOF+4nR8Bs=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-minify-gradients/download/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha1-8f4bT0mBNKUGgkDC8l1G/NI2uiw=", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "http://10.107.103.115:8001/postcss-minify-params/download/postcss-minify-params-5.1.4.tgz", + "integrity": "sha1-wGpseHEosyCLOMk2TPxAyKpdc1I=", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "http://10.107.103.115:8001/postcss-minify-selectors/download/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha1-1OfmtGFHuBF+qTJakVqAHV/mVsY=", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha1-zaHwR8CugMl9vijD52pDuIAldB0=", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha1-67tU+uFZjuz99pGgKz/zs5ClpRw=", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY=", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz", + "integrity": "sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw=", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-normalize-charset/download/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha1-kwLeCykJS1LCWemyz43Ah5h58O0=", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-normalize-display-values/download/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha1-cqu65YCBlg6e3XIA/PIauDJcPag=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-normalize-positions/download/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha1-75cnnYlAh7WTJbRcR/HoY9rvu5I=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha1-6euWgFIE9HZt9m/QntLhNUVCD7I=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-normalize-string/download/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha1-QRlhFp4HMIyCwfjFXz6KM3dX4ig=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha1-1WFEEPjwsjiOnyQKpgEbpvUtr7s=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-normalize-unicode/download/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha1-9nKX/KP+p/F+DSyqQHaa/Eh6oDA=", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-normalize-url/download/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha1-7Z2IyoLiGr75n3Q0V9NymgQq3Nw=", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-normalize-whitespace/download/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha1-CKGg0f+henzG7+HmydqWnMRJPPo=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "http://10.107.103.115:8001/postcss-ordered-values/download/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha1-tv0r0Q+TeyPYa8gpxp53Ms526jg=", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-reduce-initial/download/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha1-wYt9+4iu4ksfjkk2VBwprb01Ik4=", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-reduce-transforms/download/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha1-Mztw53WLgC890N3+mLscz++Wtuk=", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-safe-parser": { + "version": "5.0.2", + "resolved": "http://10.107.103.115:8001/postcss-safe-parser/download/postcss-safe-parser-5.0.2.tgz", + "integrity": "sha1-RZ3Sffa8K6ZGCIJLo55F2s9ehS0=", + "dependencies": { + "postcss": "^8.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "http://10.107.103.115:8001/postcss-selector-parser/download/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha1-LkHcObetdARuFhUYUYXNCxfQyNw=", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/postcss-svgo/download/postcss-svgo-5.1.0.tgz", + "integrity": "sha1-CjF0AM7XifIzoogm53Uj8VhX2A0=", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/postcss-unique-selectors/download/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha1-qfJz0erNCemqYIj0sFB7GLG1QbY=", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "http://10.107.103.115:8001/postcss-value-parser/download/postcss-value-parser-4.2.0.tgz", + "integrity": "sha1-cjwJkgg2um0+WvAZ+SvAlxwC5RQ=" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "http://10.107.103.115:8001/prelude-ls/download/prelude-ls-1.2.1.tgz", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/pretty-error/download/pretty-error-4.0.0.tgz", + "integrity": "sha1-kKcD9G3XI0rbRtD4SCPp0cuPENY=", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/pretty-time/download/pretty-time-1.1.0.tgz", + "integrity": "sha1-/7dCmvq7hTXDRqNOQYc63z103Q4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "http://10.107.103.115:8001/promise/download/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "http://10.107.103.115:8001/proxy-addr/download/proxy-addr-2.0.7.tgz", + "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "http://10.107.103.115:8001/psl/download/psl-1.9.0.tgz", + "integrity": "sha1-0N8qE38AeUVl/K87LADNCfjVpac=", + "optional": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/punycode/download/punycode-2.3.0.tgz", + "integrity": "sha1-9n+mfJTaj00M//mBruQRgGQZm48=", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "http://10.107.103.115:8001/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "http://10.107.103.115:8001/qs/download/qs-6.11.0.tgz", + "integrity": "sha1-/Q2WNEb3pl4TZ+AavYVClFPww3o=", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/querystring/download/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "http://10.107.103.115:8001/querystringify/download/querystringify-2.2.0.tgz", + "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "http://10.107.103.115:8001/queue-microtask/download/queue-microtask-1.2.3.tgz", + "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "http://10.107.103.115:8001/quick-lru/download/quick-lru-4.0.1.tgz", + "integrity": "sha1-W4h48ROlgheEjGSCAmxz4bpXcn8=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "http://10.107.103.115:8001/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "http://10.107.103.115:8001/raw-body/download/raw-body-2.5.2.tgz", + "integrity": "sha1-mf69g7kOCJdQh+jx+UGaFJNmtoo=", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "http://10.107.103.115:8001/raw-loader/download/raw-loader-4.0.2.tgz", + "integrity": "sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY=", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/find-up/download/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/p-limit/download/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/p-locate/download/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "http://10.107.103.115:8001/readable-stream/download/readable-stream-2.3.8.tgz", + "integrity": "sha1-kRJegEK7obmIf0k0X2J3Anzovps=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "http://10.107.103.115:8001/readdirp/download/readdirp-3.6.0.tgz", + "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/readline/download/readline-1.3.0.tgz", + "integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=" + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/redent/download/redent-3.0.0.tgz", + "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "http://10.107.103.115:8001/regenerate/download/regenerate-1.4.2.tgz", + "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "http://10.107.103.115:8001/regenerate-unicode-properties/download/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha1-fDGSyrbdJOIctEYeXd190k+oN0w=", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "http://10.107.103.115:8001/regenerator-runtime/download/regenerator-runtime-0.13.11.tgz", + "integrity": "sha1-9tyj587sIFkNB62nhWNqkM3KF/k=" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "http://10.107.103.115:8001/regenerator-transform/download/regenerator-transform-0.15.1.tgz", + "integrity": "sha1-9sTpn8G0WR94DbJYYyjk2anY3FY=", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "http://10.107.103.115:8001/regexp.prototype.flags/download/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha1-h8qzD4D2ZmAYGju3v1mBqHKzZ6w=", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "http://10.107.103.115:8001/regexpp/download/regexpp-3.2.0.tgz", + "integrity": "sha1-BCWido2PI7rXDKS5BGH6LxIT4bI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.2", + "resolved": "http://10.107.103.115:8001/regexpu-core/download/regexpu-core-5.2.2.tgz", + "integrity": "sha1-Pk5dEhA7ZHSHEcOq1pk013GOdfw=", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "http://10.107.103.115:8001/regjsgen/download/regjsgen-0.7.1.tgz", + "integrity": "sha1-7l7zDhjT8Jt8Npt258I3PtJVRvY=" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "http://10.107.103.115:8001/regjsparser/download/regjsparser-0.9.1.tgz", + "integrity": "sha1-Jy0FqhDHwfZwlbH/Ct2uhEL8Vwk=", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "http://10.107.103.115:8001/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "http://10.107.103.115:8001/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/renderkid/download/renderkid-3.0.0.tgz", + "integrity": "sha1-X9gj5NaVHTc1jsyaWLHwaDa2Joo=", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/repeat-element/download/repeat-element-1.1.4.tgz", + "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "http://10.107.103.115:8001/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "http://10.107.103.115:8001/request/download/request-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "optional": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "http://10.107.103.115:8001/qs/download/qs-6.5.3.tgz", + "integrity": "sha1-Ou7/yRln7241wOSI70b7KWq3aq0=", + "optional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "http://10.107.103.115:8001/require-from-string/download/require-from-string-2.0.2.tgz", + "integrity": "sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "http://10.107.103.115:8001/resolve/download/resolve-1.22.1.tgz", + "integrity": "sha1-J8suu1P5GrtJRwqSi7p1WAZqwXc=", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/resolve-cwd/download/resolve-cwd-3.0.0.tgz", + "integrity": "sha1-DwB18bslRHZs9zumpuKt/ryxPy0=", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz", + "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/resolve-dir/download/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/resolve-global/download/resolve-global-1.0.0.tgz", + "integrity": "sha1-oqed9K8so/Sb93753azTItrRklU=", + "dev": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "http://10.107.103.115:8001/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/restore-cursor/download/restore-cursor-3.1.0.tgz", + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "http://10.107.103.115:8001/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "http://10.107.103.115:8001/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/rfdc/download/rfdc-1.3.0.tgz", + "integrity": "sha1-0LfEQasnINBdxM8m4ByJYx2doIs=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/rimraf/download/rimraf-3.0.2.tgz", + "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "http://10.107.103.115:8001/run-async/download/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/run-parallel/download/run-parallel-1.2.0.tgz", + "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "http://10.107.103.115:8001/rxjs/download/rxjs-7.8.0.tgz", + "integrity": "sha1-kKk4hiqCiI/0xzWYEaWV4U4eCaQ=", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/safe-regex-test/download/safe-regex-test-1.0.0.tgz", + "integrity": "sha1-eTuHTVJOs2QNGHOq0DWW2y1PIpU=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "http://10.107.103.115:8001/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-2.7.1.tgz", + "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "node_modules/selfsigned": { + "version": "1.10.14", + "resolved": "http://10.107.103.115:8001/selfsigned/download/selfsigned-1.10.14.tgz", + "integrity": "sha1-7lHYTZ3OzGHgfkq6NPIpq1JcFXQ=", + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "http://10.107.103.115:8001/semver/download/semver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "http://10.107.103.115:8001/send/download/send-0.18.0.tgz", + "integrity": "sha1-ZwFnzGVLBfWqSnZ/kRO7NxvHBr4=", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/serialize-javascript/download/serialize-javascript-6.0.1.tgz", + "integrity": "sha1-sgbvsnw9oLCra1L0jRcLeZZFjlw=", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "http://10.107.103.115:8001/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "http://10.107.103.115:8001/http-errors/download/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "http://10.107.103.115:8001/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "http://10.107.103.115:8001/serve-static/download/serve-static-1.15.0.tgz", + "integrity": "sha1-+q7wjP/goaYvYMrQxOUTz/CslUA=", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-value": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/set-value/download/set-value-3.0.2.tgz", + "integrity": "sha1-dOjs0CPDPQ93GZ1BVAmkDyHmG5A=", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/setprototypeof/download/setprototypeof-1.2.0.tgz", + "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/side-channel/download/side-channel-1.0.4.tgz", + "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "http://10.107.103.115:8001/signal-exit/download/signal-exit-3.0.7.tgz", + "integrity": "sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk=" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "http://10.107.103.115:8001/sirv/download/sirv-1.0.19.tgz", + "integrity": "sha1-HXOXmzjH/pH8uknIUoDaqcI2O0k=", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/slash/download/slash-4.0.0.tgz", + "integrity": "sha1-JCI3IXbExsWt214q2oha+YSzlqc=", + "engines": { + "node": ">=12" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-4.0.0.tgz", + "integrity": "sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "http://10.107.103.115:8001/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "http://10.107.103.115:8001/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "http://10.107.103.115:8001/sockjs/download/sockjs-0.3.24.tgz", + "integrity": "sha1-ybyJlfM6ERvqA5XsMKoyBr21zM4=", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.6.1", + "resolved": "http://10.107.103.115:8001/sockjs-client/download/sockjs-client-1.6.1.tgz", + "integrity": "sha1-NQuO2kLW1S3cAww5lDNkwR3K2AY=", + "dependencies": { + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "http://10.107.103.115:8001/debug/download/debug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "http://10.107.103.115:8001/uuid/download/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "http://10.107.103.115:8001/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "http://10.107.103.115:8001/source-map-js/download/source-map-js-0.6.2.tgz", + "integrity": "sha1-C7XeYxtBz72mz7qL0FqA79/SOF4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "http://10.107.103.115:8001/source-map-resolve/download/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "http://10.107.103.115:8001/source-map-support/download/source-map-support-0.5.21.tgz", + "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "http://10.107.103.115:8001/source-map-url/download/source-map-url-0.4.1.tgz", + "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "http://10.107.103.115:8001/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", + "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/spdx-correct/download/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "http://10.107.103.115:8001/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz", + "integrity": "sha1-UMDYxAoU7Bv0Sbrmmg6kaFqdn5U=", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "http://10.107.103.115:8001/spdy/download/spdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.1", + "resolved": "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz", + "integrity": "sha1-+fm19TaSAlOz0m52YOfaTM/5u2I=", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/split2/download/split2-3.2.2.tgz", + "integrity": "sha1-vyzyo32DgxLCSciSBv16F90SNl8=", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.1", + "resolved": "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz", + "integrity": "sha1-+fm19TaSAlOz0m52YOfaTM/5u2I=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "http://10.107.103.115:8001/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "http://10.107.103.115:8001/sshpk/download/sshpk-1.17.0.tgz", + "integrity": "sha1-V4CC2S1P5hKxMAdJblQ/oPvL5MU=", + "optional": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "http://10.107.103.115:8001/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "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" + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "http://10.107.103.115:8001/stackframe/download/stackframe-1.3.4.tgz", + "integrity": "sha1-uIGgBMjBSaXo7+831RsW5BKUMxA=" + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "http://10.107.103.115:8001/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/statuses/download/statuses-2.0.1.tgz", + "integrity": "sha1-VcsADM8dSHKL0jxoWgY5mM8aG2M=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.3.2", + "resolved": "http://10.107.103.115:8001/std-env/download/std-env-3.3.2.tgz", + "integrity": "sha1-ryc0OwAWFgFVNCkheDJ7ICue6VU=" + }, + "node_modules/stickybits": { + "version": "3.7.11", + "resolved": "http://10.107.103.115:8001/stickybits/download/stickybits-3.7.11.tgz", + "integrity": "sha1-RgnzqR70IJmHwaRbMT5faCski/Y=" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "http://10.107.103.115:8001/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "http://10.107.103.115:8001/string-argv/download/string-argv-0.3.1.tgz", + "integrity": "sha1-leL77AQnrhkYSTX4FtdKqkxcGdo=", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "http://10.107.103.115:8001/string-width/download/string-width-4.2.3.tgz", + "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "http://10.107.103.115:8001/string.prototype.trimend/download/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha1-xKJ/oCbZedecBPFzl/JQpGKURTM=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "http://10.107.103.115:8001/string.prototype.trimstart/download/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha1-6Qq2aqjkAH2S71kbvzzUIsVr3PQ=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-6.0.1.tgz", + "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/strip-final-newline/download/strip-final-newline-2.0.0.tgz", + "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/strip-indent/download/strip-indent-3.0.0.tgz", + "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/strip-json-comments/download/strip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/style-loader/download/style-loader-2.0.0.tgz", + "integrity": "sha1-lmlgL9RpB0DqrsE3eZoDrdu8OTw=", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "http://10.107.103.115:8001/stylehacks/download/stylehacks-5.1.1.tgz", + "integrity": "sha1-eTSjTrWdcVIUn6adbp5W8vw0vMk=", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/svg-tags/download/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "http://10.107.103.115:8001/svgo/download/svgo-2.8.0.tgz", + "integrity": "sha1-T/gMzmcQ3CeV8MfHQQHmdkz8zSQ=", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "http://10.107.103.115:8001/table/download/table-6.8.1.tgz", + "integrity": "sha1-6itxNZ/gOwF6X7wpYgRHEVgIC98=", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz", + "integrity": "sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE=", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz", + "integrity": "sha1-rnvLNlard6c7pcSb9lTzjmtoYOI=", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "http://10.107.103.115:8001/tapable/download/tapable-2.2.1.tgz", + "integrity": "sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA=", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.5", + "resolved": "http://10.107.103.115:8001/terser/download/terser-5.16.5.tgz", + "integrity": "sha1-HChcoGVfRn+Srxu6tGq3LRywjlo=", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "http://10.107.103.115:8001/terser-webpack-plugin/download/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha1-VZCuwxqjxvdxzhsazKYGOeqzGVw=", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "http://10.107.103.115:8001/commander/download/commander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "http://10.107.103.115:8001/text-extensions/download/text-extensions-1.9.0.tgz", + "integrity": "sha1-GFPkX+45yUXOb2w2stZZtaq8KiY=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "http://10.107.103.115:8001/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "http://10.107.103.115:8001/thenify/download/thenify-3.3.1.tgz", + "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "http://10.107.103.115:8001/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "http://10.107.103.115:8001/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "http://10.107.103.115:8001/through2/download/through2-4.0.2.tgz", + "integrity": "sha1-p846wqeosLlmyA58SfBITDsjl2Q=", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "3.6.1", + "resolved": "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz", + "integrity": "sha1-+fm19TaSAlOz0m52YOfaTM/5u2I=", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/thunky/download/thunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=" + }, + "node_modules/tiny-each-async": { + "version": "2.0.3", + "resolved": "http://10.107.103.115:8001/tiny-each-async/download/tiny-each-async-2.0.3.tgz", + "integrity": "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "http://10.107.103.115:8001/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "http://10.107.103.115:8001/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "http://10.107.103.115:8001/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "http://10.107.103.115:8001/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/toidentifier/download/toidentifier-1.0.1.tgz", + "integrity": "sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "http://10.107.103.115:8001/totalist/download/totalist-1.1.0.tgz", + "integrity": "sha1-pNZaPlRlF3AePlw3pHpwrJf+Vt8=", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "http://10.107.103.115:8001/tough-cookie/download/tough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "optional": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/trim-newlines/download/trim-newlines-3.0.1.tgz", + "integrity": "sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "http://10.107.103.115:8001/ts-node/download/ts-node-9.1.1.tgz", + "integrity": "sha1-UamkUKPpWUAb2l8ASnLVS5NtN20=", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "http://10.107.103.115:8001/tsconfig-paths/download/tsconfig-paths-3.14.1.tgz", + "integrity": "sha1-ugc0WZ6Oo2yGJ5jpILzxYyd7E3o=", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/json5/download/json5-1.0.2.tgz", + "integrity": "sha1-Y9mNYPIbMTt3xNbaGL+mnYDh1ZM=", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "http://10.107.103.115:8001/tslib/download/tslib-2.5.0.tgz", + "integrity": "sha1-Qr/thvV4eutB0DGGbI9AJCng/d8=" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "http://10.107.103.115:8001/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "http://10.107.103.115:8001/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "http://10.107.103.115:8001/type-check/download/type-check-0.4.0.tgz", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "http://10.107.103.115:8001/type-fest/download/type-fest-0.20.2.tgz", + "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "http://10.107.103.115:8001/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "http://10.107.103.115:8001/typed-array-length/download/typed-array-length-1.0.4.tgz", + "integrity": "sha1-idg3heXECYvscuCLMZZR8OrJwbs=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "http://10.107.103.115:8001/typescript/download/typescript-4.9.5.tgz", + "integrity": "sha1-CVl5+bzA0J2jJNWNA86Pg3TL5lo=", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/unbox-primitive/download/unbox-primitive-1.0.2.tgz", + "integrity": "sha1-KQMgIQV9Xmzb0IxRKcIm3/jtb54=", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw=", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM=", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha1-y1//3NFqBRJPWksL98N3Agisu+A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g=", + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/set-value": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/universalify/download/universalify-2.0.0.tgz", + "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/unset-value/download/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "http://10.107.103.115:8001/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "http://10.107.103.115:8001/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "http://10.107.103.115:8001/upath/download/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "http://10.107.103.115:8001/update-browserslist-db/download/update-browserslist-db-1.0.10.tgz", + "integrity": "sha1-D1S4dlRXJvF9AM2aJWHm2t6UP/M=", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "http://10.107.103.115:8001/uri-js/download/uri-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "http://10.107.103.115:8001/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "http://10.107.103.115:8001/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/url-loader/download/url-loader-4.1.1.tgz", + "integrity": "sha1-KFBekFyuFYzwfJLKYi1/I35wpOI=", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "http://10.107.103.115:8001/url-parse/download/url-parse-1.5.10.tgz", + "integrity": "sha1-nTwvc2wddd070r5QfcwRHx4uqcE=", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "http://10.107.103.115:8001/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "http://10.107.103.115:8001/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "http://10.107.103.115:8001/uuid/download/uuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "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.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz", + "integrity": "sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "http://10.107.103.115:8001/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "http://10.107.103.115:8001/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "http://10.107.103.115:8001/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "engines": [ + "node >=0.6.0" + ], + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vue": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/vue/download/vue-3.2.26.tgz", + "integrity": "sha1-XbV1WD7K5JXHyqXBL9WQ3/y7dj4=", + "dependencies": { + "@vue/compiler-dom": "3.2.26", + "@vue/compiler-sfc": "3.2.26", + "@vue/runtime-dom": "3.2.26", + "@vue/server-renderer": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "http://10.107.103.115:8001/vue-demi/download/vue-demi-0.13.11.tgz", + "integrity": "sha1-fZA2m9rol02HsZc1ZK05AYJBDZk=", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "7.11.0", + "resolved": "http://10.107.103.115:8001/vue-eslint-parser/download/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha1-IUtd6pYQB/z/su5luJEjB2KNDa8=", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/acorn": { + "version": "7.4.1", + "resolved": "http://10.107.103.115:8001/acorn/download/acorn-7.4.1.tgz", + "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "http://10.107.103.115:8001/espree/download/espree-6.2.1.tgz", + "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-i18n": { + "version": "9.2.2", + "resolved": "http://10.107.103.115:8001/vue-i18n/download/vue-i18n-9.2.2.tgz", + "integrity": "sha1-rrSdlCSSPHfg1kQePyHa/OzQ5mY=", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-loader": { + "version": "16.8.3", + "resolved": "http://10.107.103.115:8001/vue-loader/download/vue-loader-16.8.3.tgz", + "integrity": "sha1-1D5nXe9bqTRdbH8FkUwT2GGZcIc=", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + } + }, + "node_modules/vue-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/vue-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-router": { + "version": "4.1.6", + "resolved": "http://10.107.103.115:8001/vue-router/download/vue-router-4.1.6.tgz", + "integrity": "sha1-twMDc34StIFFeNIdaNIWGEaTdaE=", + "dependencies": { + "@vue/devtools-api": "^6.4.5" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue/node_modules/@vue/compiler-core": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz", + "integrity": "sha1-mrkq5iTaUfe2Bk9GecLUVk9DfMg=", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.26", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/vue/node_modules/@vue/compiler-dom": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-dom/download/@vue/compiler-dom-3.2.26.tgz", + "integrity": "sha1-x6e1XVCnt5gd1E/CghHfFFBIJmc=", + "dependencies": { + "@vue/compiler-core": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue/node_modules/@vue/compiler-ssr": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.26.tgz", + "integrity": "sha1-/QSVIzQfv0q16I4l7vVm2GKJS6c=", + "dependencies": { + "@vue/compiler-dom": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue/node_modules/@vue/reactivity": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/reactivity/download/@vue/reactivity-3.2.26.tgz", + "integrity": "sha1-1SkZHlgVIcPBLinvmG1MipM6D4M=", + "dependencies": { + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue/node_modules/@vue/runtime-core": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/runtime-core/download/@vue/runtime-core-3.2.26.tgz", + "integrity": "sha1-XFnMRA7Xo5ttvUwC4tIcjRmI8N4=", + "dependencies": { + "@vue/reactivity": "3.2.26", + "@vue/shared": "3.2.26" + } + }, + "node_modules/vue/node_modules/@vue/runtime-dom": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/runtime-dom/download/@vue/runtime-dom-3.2.26.tgz", + "integrity": "sha1-hNOuJYRIh0dxfC4HLV2REsDS5sI=", + "dependencies": { + "@vue/runtime-core": "3.2.26", + "@vue/shared": "3.2.26", + "csstype": "^2.6.8" + } + }, + "node_modules/vue/node_modules/@vue/server-renderer": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/server-renderer/download/@vue/server-renderer-3.2.26.tgz", + "integrity": "sha1-8WpLn7zJF0F7TOpwyZr84nATQc8=", + "dependencies": { + "@vue/compiler-ssr": "3.2.26", + "@vue/shared": "3.2.26" + }, + "peerDependencies": { + "vue": "3.2.26" + } + }, + "node_modules/vue/node_modules/@vue/shared": { + "version": "3.2.26", + "resolved": "http://10.107.103.115:8001/@vue/shared/download/@vue/shared-3.2.26.tgz", + "integrity": "sha1-es0WIXg1cbmoLsofBBtKCpg0gdk=" + }, + "node_modules/vue/node_modules/csstype": { + "version": "2.6.21", + "resolved": "http://10.107.103.115:8001/csstype/download/csstype-2.6.21.tgz", + "integrity": "sha1-LvuFt8xVyAAXxmpa18vZMf2jqQ4=" + }, + "node_modules/vuex": { + "version": "4.0.2", + "resolved": "http://10.107.103.115:8001/vuex/download/vuex-4.0.2.tgz", + "integrity": "sha1-+Jbb1b8qDpY/AMZ+m2EN50nMrMk=", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "http://10.107.103.115:8001/watchpack/download/watchpack-2.4.0.tgz", + "integrity": "sha1-+jMDI3SWLHgRP5PH8vtMVMmGKl0=", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "http://10.107.103.115:8001/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.75.0", + "resolved": "http://10.107.103.115:8001/webpack/download/webpack-5.75.0.tgz", + "integrity": "sha1-HkQEaGR7JQWGDpTJ/z5E1bWCwVI=", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "http://10.107.103.115:8001/webpack-bundle-analyzer/download/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha1-lRuKr0kfZl0q4yXYuE2iKRV7HQQ=", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "http://10.107.103.115:8001/webpack-chain/download/webpack-chain-6.5.1.tgz", + "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=", + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "http://10.107.103.115:8001/deepmerge/download/deepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "http://10.107.103.115:8001/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=", + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.6.0", + "resolved": "http://10.107.103.115:8001/mime/download/mime-2.6.0.tgz", + "integrity": "sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz", + "integrity": "sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY=", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.3", + "resolved": "http://10.107.103.115:8001/webpack-dev-server/download/webpack-dev-server-3.11.3.tgz", + "integrity": "sha1-jIa50oEr8TXTybzm8HtxjjD3w9M=", + "dependencies": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "http://10.107.103.115:8001/binary-extensions/download/binary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "http://10.107.103.115:8001/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "http://10.107.103.115:8001/camelcase/download/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "http://10.107.103.115:8001/chokidar/download/chokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "resolved": "http://10.107.103.115:8001/cliui/download/cliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-4.1.1.tgz", + "integrity": "sha1-Fk2qyHqy1vbbOimHXi0XZlgtq+0=", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=" + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "http://10.107.103.115:8001/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "http://10.107.103.115:8001/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "http://10.107.103.115:8001/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "http://10.107.103.115:8001/micromatch/download/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "http://10.107.103.115:8001/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "resolved": "http://10.107.103.115:8001/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-4.1.1.tgz", + "integrity": "sha1-Fk2qyHqy1vbbOimHXi0XZlgtq+0=", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "http://10.107.103.115:8001/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-4.1.1.tgz", + "integrity": "sha1-Fk2qyHqy1vbbOimHXi0XZlgtq+0=", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "http://10.107.103.115:8001/ws/download/ws-6.2.2.tgz", + "integrity": "sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4=", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/y18n": { + "version": "4.0.3", + "resolved": "http://10.107.103.115:8001/y18n/download/y18n-4.0.3.tgz", + "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=" + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "http://10.107.103.115:8001/yargs/download/yargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/webpack-log/download/webpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "http://10.107.103.115:8001/webpack-sources/download/webpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz", + "integrity": "sha1-vHTEtraZXB2I92qLd76nIZ4MgoE=", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "http://10.107.103.115:8001/webpack-sources/download/webpack-sources-3.2.3.tgz", + "integrity": "sha1-LU2quEUf1LJAzCcFX/agwszqDN4=", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "http://10.107.103.115:8001/webpackbar/download/webpackbar-5.0.2.tgz", + "integrity": "sha1-091GYhHHOFJ0HfyEK3VW3LwrBXA=", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/webpackbar/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/chalk": { + "version": "4.1.2", + "resolved": "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz", + "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webpackbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/webpackbar/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/webpackbar/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "engines": { + "node": ">=8" + } + }, + "node_modules/webpackbar/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "http://10.107.103.115:8001/websocket-driver/download/websocket-driver-0.7.4.tgz", + "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "http://10.107.103.115:8001/websocket-extensions/download/websocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "http://10.107.103.115:8001/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "http://10.107.103.115:8001/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "http://10.107.103.115:8001/which-typed-array/download/which-typed-array-1.1.9.tgz", + "integrity": "sha1-MHz4mAJYSM+ZXnlehCPH8zfvveY=", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "http://10.107.103.115:8001/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-7.0.0.tgz", + "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "http://10.107.103.115:8001/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "http://10.107.103.115:8001/ws/download/ws-7.5.9.tgz", + "integrity": "sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE=", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "http://10.107.103.115:8001/y18n/download/y18n-5.0.8.tgz", + "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "http://10.107.103.115:8001/yaml/download/yaml-1.10.2.tgz", + "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks=", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "http://10.107.103.115:8001/yargs/download/yargs-16.2.0.tgz", + "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-20.2.9.tgz", + "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=", + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "http://10.107.103.115:8001/yn/download/yn-3.1.1.tgz", + "integrity": "sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "http://10.107.103.115:8001/yocto-queue/download/yocto-queue-0.1.0.tgz", + "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zrender": { + "version": "5.2.1", + "resolved": "http://10.107.103.115:8001/zrender/download/zrender-5.2.1.tgz", + "integrity": "sha1-X0u9qRW6bUErCxncJDG+qtBUF7s=", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "http://10.107.103.115:8001/tslib/download/tslib-2.3.0.tgz", + "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=" + } + } +} diff --git a/new-web/package.json b/new-web/package.json new file mode 100644 index 000000000..04cc0de43 --- /dev/null +++ b/new-web/package.json @@ -0,0 +1,91 @@ +{ + "name": "Streamis", + "version": "0.3.5", + "description": "", + "scripts": { + "build": "fes build", + "prod": "FES_ENV=prod fes build", + "analyze": "ANALYZE=1 fes build", + "dev": "fes dev", + "test:unit": "fes test:unit", + "commit": "git-cz" + }, + "keywords": [ + "template", + "fes", + "fast", + "easy", + "strong" + ], + "files": [ + ".eslintrc.js", + ".gitignore", + ".fes.js", + ".fes.prod.js", + "mock.js", + "package.json", + "README.md", + "tsconfig.json", + "/src", + "/config" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/WeBankFinTech/fes.js.git", + "directory": "packages/fes-template" + }, + "author": "harrywan", + "license": "MIT", + "bugs": { + "url": "https://github.com/WeBankFinTech/fes.js/issues" + }, + "homepage": "https://github.com/WeBankFinTech/fes.js#readme", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "@commitlint/config-conventional": "15.0.0", + "@vue/compiler-sfc": "3.2.26", + "@webank/eslint-config-webank": "0.4.2", + "commitlint": "15.0.0", + "cz-conventional-changelog": "3.3.0", + "lint-staged": "12.1.2" + }, + "dependencies": { + "@fesjs/fes": "2.0.14", + "@fesjs/fes-design": "0.7.18", + "@fesjs/plugin-access": "2.0.3", + "@fesjs/plugin-enums": "2.0.2", + "@fesjs/plugin-icon": "2.0.6", + "@fesjs/plugin-layout": "3.0.0", + "@fesjs/plugin-locale": "3.0.9", + "@fesjs/plugin-model": "2.0.3", + "@fesjs/plugin-monaco-editor": "2.0.0-beta.7", + "@fesjs/plugin-request": "2.0.12", + "@fesjs/plugin-watermark": "2.0.3", + "@fesjs/traction-widget": "1.7.3", + "babel-plugin-syntax-jsx": "6.18.0", + "date-fns": "2.28.0", + "dayjs": "1.11.5", + "echarts": "5.2.2", + "lodash-es": "4.17.21", + "mitt": "3.0.0", + "vue": "3.2.26", + "vuex": "4.0.2" + }, + "private": true, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } + }, + "lint-staged": { + "*.{js,ts,jsx,tsx,vue,fes,wxa}": "eslint --fix" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged", + "commit-msg": "commitlint -E $HUSKY_GIT_PARAMS" + } + } +} diff --git a/new-web/public/index.html b/new-web/public/index.html new file mode 100644 index 000000000..0d7ac7442 --- /dev/null +++ b/new-web/public/index.html @@ -0,0 +1,12 @@ + + + + + + Streamis + + + +
+ + diff --git a/new-web/public/logo.ico b/new-web/public/logo.ico new file mode 100644 index 000000000..f67492353 Binary files /dev/null and b/new-web/public/logo.ico differ diff --git a/new-web/src/app.js b/new-web/src/app.js new file mode 100644 index 000000000..885b556a5 --- /dev/null +++ b/new-web/src/app.js @@ -0,0 +1,146 @@ +import { access, request as FRequest } from '@fesjs/fes'; +import PageLoading from '@/components/PageLoading'; +import { + FTabs, + FSwitch, + FCheckbox, + FModal, + FSpin, + FButton, + FInput, + FInputNumber, + FForm, + FTag, + FSelect, + FTable, + FPagination, + FDatePicker, + FDropdown, + FDrawer, + FCheckboxGroup, + FSelectTree, + FSelectCascader, + FTooltip, + FSpace, + FRadio, + FRadioGroup, + FEllipsis, + FMessage, +} from '@fesjs/fes-design'; +import './style/base.less'; + +// import store from '@/store'; + +export const beforeRender = { + loading: , + action: async () => { + const username = ''; + const roles = []; + // try { + // const res = await FRequest('api/v1/projector/role', {}, { method: 'GET' }); + // username = res.username; + // roles = res.roles; + // } catch (error) { + // console.error(error); + // } + + if (Array.isArray(roles) && roles.length > 0) { + access.setRole(roles[0].toLowerCase()); + } + + let role = 'noauth'; + sessionStorage.setItem('userLogin', true); + // 如果没有设置模拟账户走原来正常初始化的逻辑 + const isSimulatorMode = !!sessionStorage.getItem('simulatedUser'); + if (!isSimulatorMode) { + // 兜底处理 + if (roles.length && (roles.includes('admin') || roles.includes('ADMIN'))) { + role = 'admin'; + } + // 缓存原本的身份 + sessionStorage.setItem('firstRole', role); + // 缓存原本身份的名字 + sessionStorage.setItem('firstUserName', username); + } + access.setRole(role); + // 初始化应用的全局状态,可以通过 useModel('@@initialState') 获取,具体用法看@/components/UserCenter 文件 + return { + userName: sessionStorage.getItem('firstUserName'), + }; + }, +}; + +export function onAppCreated({ app }) { + app.use(FButton); + app.use(FTabs); + app.use(FSelect); + app.use(FSwitch); + app.use(FCheckbox); + app.use(FCheckboxGroup); + app.use(FModal); + app.use(FInput); + app.use(FInputNumber); + app.use(FForm); + app.use(FTag); + app.use(FSpin); + app.use(FTable); + app.use(FPagination); + app.use(FDatePicker); + app.use(FDropdown); + app.use(FDrawer); + app.use(FSelectTree); + app.use(FSelectCascader); + app.use(FEllipsis); + app.use(FSpace); + app.use(FTooltip); + app.use(FRadioGroup); + app.use(FRadio); + + // 引入vuex + // app.use(store); +} + +export const request = { + dataField: 'data', + baseURL: BASEURL, + withCredentials: false, + timeout: 60000, + responseDataAdaptor(data) { + const result = Object.assign({}, data); + // 5375用于判断script部分成功的情况 + // 200其他接口默认都使用这个 + result.code = ['200', 0].includes(result.status) ? '0' : result.status; + return result; + }, + errorHandler: { + 401({ + response: { + data: { + data: { redirect }, + }, + }, + }) { + const lastRedirect = sessionStorage.getItem('redirect_to_um_login'); + if ( + (!lastRedirect || +new Date() - lastRedirect > 3000) + && redirect + ) { + sessionStorage.setItem('redirect_to_um_login', +new Date()); + const splitChar = redirect.indexOf('?') > 0 ? '&' : '?'; + const redirectUrl = `${redirect}${splitChar}link=${encodeURIComponent( + window.location.href, + )}`; + console.log(redirectUrl); + window.location.href = redirectUrl; + } + }, + default(error) { + console.warn(error, error.data?.message, error.response); + // 200的时候error.data?.message + // 非200的时候error.response?.data?.message + // 重复请求err.msg + if (error && error.msg === '重复请求') return; + FMessage.error(error.data?.message || error.response?.data?.message || error.message || error.msg); + }, + }, +}; diff --git a/new-web/src/assets/images/emptyData.svg b/new-web/src/assets/images/emptyData.svg new file mode 100644 index 000000000..a09acc0d0 --- /dev/null +++ b/new-web/src/assets/images/emptyData.svg @@ -0,0 +1,9 @@ + + + 资源 10@2x + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/emptyQueryResult.svg b/new-web/src/assets/images/emptyQueryResult.svg new file mode 100644 index 000000000..08dd49617 --- /dev/null +++ b/new-web/src/assets/images/emptyQueryResult.svg @@ -0,0 +1,9 @@ + + + wecom-temp-d978c0e1e45b3ecb45c902cdbbee313b + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/arrowDown.svg b/new-web/src/assets/images/icons/arrowDown.svg new file mode 100644 index 000000000..33d34c9d6 --- /dev/null +++ b/new-web/src/assets/images/icons/arrowDown.svg @@ -0,0 +1,11 @@ + + + 02 icon/占位备份 + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/avatar.svg b/new-web/src/assets/images/icons/avatar.svg new file mode 100644 index 000000000..1756d8d56 --- /dev/null +++ b/new-web/src/assets/images/icons/avatar.svg @@ -0,0 +1,22 @@ + + + 02 icon/占位 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/dashboard.svg b/new-web/src/assets/images/icons/dashboard.svg new file mode 100644 index 000000000..5fe69e7d0 --- /dev/null +++ b/new-web/src/assets/images/icons/dashboard.svg @@ -0,0 +1,13 @@ + + + 02 icon/占位 + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/edit.svg b/new-web/src/assets/images/icons/edit.svg new file mode 100644 index 000000000..4231c6424 --- /dev/null +++ b/new-web/src/assets/images/icons/edit.svg @@ -0,0 +1,17 @@ + + + ICON/通用/line/picture备份 5 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/engine.svg b/new-web/src/assets/images/icons/engine.svg new file mode 100644 index 000000000..a1ecf4582 --- /dev/null +++ b/new-web/src/assets/images/icons/engine.svg @@ -0,0 +1,7 @@ + + + 02 icon/侧边导航/引擎配置 + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/esc.svg b/new-web/src/assets/images/icons/esc.svg new file mode 100644 index 000000000..b7572837c --- /dev/null +++ b/new-web/src/assets/images/icons/esc.svg @@ -0,0 +1,15 @@ + + + 02 icon/占位 + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/language.svg b/new-web/src/assets/images/icons/language.svg new file mode 100644 index 000000000..71c172b2e --- /dev/null +++ b/new-web/src/assets/images/icons/language.svg @@ -0,0 +1,15 @@ + + + 02 icon/占位 + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/loading.gif b/new-web/src/assets/images/icons/loading.gif new file mode 100644 index 000000000..a71814baa Binary files /dev/null and b/new-web/src/assets/images/icons/loading.gif differ diff --git a/new-web/src/assets/images/icons/projects.svg b/new-web/src/assets/images/icons/projects.svg new file mode 100644 index 000000000..5d98875c0 --- /dev/null +++ b/new-web/src/assets/images/icons/projects.svg @@ -0,0 +1,11 @@ + + + 02 icon/占位 + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/quota.svg b/new-web/src/assets/images/icons/quota.svg new file mode 100644 index 000000000..0803f3578 --- /dev/null +++ b/new-web/src/assets/images/icons/quota.svg @@ -0,0 +1,11 @@ + + + 02 icon/占位 2 + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/rules.svg b/new-web/src/assets/images/icons/rules.svg new file mode 100644 index 000000000..97bd747dc --- /dev/null +++ b/new-web/src/assets/images/icons/rules.svg @@ -0,0 +1,11 @@ + + + 02 icon/占位 3 + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/scheduleIcon.svg b/new-web/src/assets/images/icons/scheduleIcon.svg new file mode 100644 index 000000000..8f6d2533d --- /dev/null +++ b/new-web/src/assets/images/icons/scheduleIcon.svg @@ -0,0 +1,20 @@ + + + 02 icon/占位 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/simulatorUser.svg b/new-web/src/assets/images/icons/simulatorUser.svg new file mode 100644 index 000000000..73f358f17 --- /dev/null +++ b/new-web/src/assets/images/icons/simulatorUser.svg @@ -0,0 +1,15 @@ + + + 02 icon/占位 + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/tasks.svg b/new-web/src/assets/images/icons/tasks.svg new file mode 100644 index 000000000..ff03636d8 --- /dev/null +++ b/new-web/src/assets/images/icons/tasks.svg @@ -0,0 +1,20 @@ + + + 编组 14 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/icons/timingIcon.svg b/new-web/src/assets/images/icons/timingIcon.svg new file mode 100644 index 000000000..50ecd8b32 --- /dev/null +++ b/new-web/src/assets/images/icons/timingIcon.svg @@ -0,0 +1,18 @@ + + + 编组 2 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/assets/images/logo.svg b/new-web/src/assets/images/logo.svg new file mode 100644 index 000000000..f11a80a51 --- /dev/null +++ b/new-web/src/assets/images/logo.svg @@ -0,0 +1,64 @@ + + + 编组 13 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-web/src/components/PageLoading.vue b/new-web/src/components/PageLoading.vue new file mode 100644 index 000000000..4a5d46b3b --- /dev/null +++ b/new-web/src/components/PageLoading.vue @@ -0,0 +1,21 @@ + + + diff --git a/new-web/src/components/SpecialEllipsis.vue b/new-web/src/components/SpecialEllipsis.vue new file mode 100644 index 000000000..1d19c6d04 --- /dev/null +++ b/new-web/src/components/SpecialEllipsis.vue @@ -0,0 +1,67 @@ + + + + diff --git a/new-web/src/images/icon.png b/new-web/src/images/icon.png new file mode 100644 index 000000000..ff46a842d Binary files /dev/null and b/new-web/src/images/icon.png differ diff --git a/new-web/src/locales/en-US.js b/new-web/src/locales/en-US.js new file mode 100644 index 000000000..c23640b3c --- /dev/null +++ b/new-web/src/locales/en-US.js @@ -0,0 +1,15 @@ +/* eslint-disable no-template-curly-in-string */ +export default { + fesHeader: { + simulatedUser: 'Simulated User', + simulated: 'Simulated', + exit: 'Exit', + current: 'The current simulated user is ', + language: 'Language switching', + department: 'Department', + select: 'Please select the user to simulate', + exitUser: 'Exit Simulated User', + selectUser: 'Please select user', + signOut: 'Sign out', + }, +}; diff --git a/new-web/src/locales/zh-CN.js b/new-web/src/locales/zh-CN.js new file mode 100644 index 000000000..46228480f --- /dev/null +++ b/new-web/src/locales/zh-CN.js @@ -0,0 +1,15 @@ +/* eslint-disable no-template-curly-in-string */ +export default { + fesHeader: { + simulatedUser: '模拟用户', + simulated: '模拟', + exit: '退出', + current: '当前模拟用户为', + language: '语言切换', + department: '部门修改', + select: '请选择要模拟登录的用户', + exitUser: '退出模拟用户', + selectUser: '请选择用户', + signOut: '退出登录', + }, +}; diff --git a/new-web/src/pages/404.vue b/new-web/src/pages/404.vue new file mode 100644 index 000000000..b0b52bf4e --- /dev/null +++ b/new-web/src/pages/404.vue @@ -0,0 +1,3 @@ + diff --git a/new-web/src/pages/assets/index.vue b/new-web/src/pages/assets/index.vue new file mode 100644 index 000000000..2b3750221 --- /dev/null +++ b/new-web/src/pages/assets/index.vue @@ -0,0 +1,3 @@ + diff --git a/new-web/src/pages/auditLogs/api.js b/new-web/src/pages/auditLogs/api.js new file mode 100644 index 000000000..19803a095 --- /dev/null +++ b/new-web/src/pages/auditLogs/api.js @@ -0,0 +1,7 @@ +import { request as FRequest, request } from '@fesjs/fes'; +// 获取审计日志表格数据 +export function fetchAuditLog(params = {}) { + return FRequest('api/rest_j/v1/streamis/streamJobManager/audit/logs', params, { + method: 'get', + }); +} diff --git a/new-web/src/pages/auditLogs/index.vue b/new-web/src/pages/auditLogs/index.vue new file mode 100644 index 000000000..633c3e8ea --- /dev/null +++ b/new-web/src/pages/auditLogs/index.vue @@ -0,0 +1,280 @@ + + + diff --git a/new-web/src/pages/index.vue b/new-web/src/pages/index.vue new file mode 100644 index 000000000..a56c8f81d --- /dev/null +++ b/new-web/src/pages/index.vue @@ -0,0 +1,3 @@ + diff --git a/new-web/src/pages/layout.vue b/new-web/src/pages/layout.vue new file mode 100644 index 000000000..77b0eb653 --- /dev/null +++ b/new-web/src/pages/layout.vue @@ -0,0 +1,314 @@ + + + diff --git a/new-web/src/style/base.less b/new-web/src/style/base.less new file mode 100644 index 000000000..3bc84f6c0 --- /dev/null +++ b/new-web/src/style/base.less @@ -0,0 +1,142 @@ +@import '@/style/varible.less'; +*{ + box-sizing: border-box; +} +html{ + height: 100%; +} +body{ + margin: 0; + padding: 0; + color: #0F1222; + font-size: 14px; +} + +h1, h2, h3, h4, h5, h6, p { + margin: 0; + padding: 0; +} + +a { + text-decoration: none; + color: @blue-color; +} + +ul{ + padding: 0; + margin: 0; + list-style: none; +} + +#app{ + height: 100%; +} + +.wd-page{ + height: 100%; + background: #f7f8fa; + .wd-side-menus { + flex: 0 0 220px; + } +} + +.wd-content{ + flex: 1; + padding: 16px 16px 32px; + overflow-y: auto; + .wd-content-title{ + margin-bottom: 16px; + font-size: 24px; + line-height: 32px; + } + .wd-content-body{ + position: relative; + padding: 24px; + margin-bottom: 16px; + background: #FFFFFF; + border-radius: 4px; + .wd-body-title{ + margin-bottom: 24px; + font-size: 16px; + line-height: 24px; + color: #0F1222; + .upstream-switch{ + margin-left: 222px; + font-size: 14px; + font-weight: normal; + color: #646670; + } + } + .wd-table-list{ + .wd-table-row{ + display: flex; + margin-bottom: 16px; + font-weight: 400; + .wd-table-header{ + width: 72px; + color: #646670; + } + .wd-table-detail{ + .wd-table-input{ + width: 300px; + } + } + } + } + .wd-body-menus{ + position: absolute; + display: flex; + top: 24px; + right: 24px; + z-index: 10; + .wd-body-menu-item{ + display: flex; + align-items: center; + color: @blue-color; + line-height: 22px; + padding-left: 16px; + cursor: pointer; + user-select: none; + &::after{ + content: ''; + display: block; + margin-left: 16px; + width: 1px; + height: 14px; + background: #CFD0D3; + } + &:last-child{ + &::after{ + display: none; + } + } + } + } + } + .wd-project-header { + display: flex; + align-items: center; + padding-bottom: 16px; + .back, .edit { + color: #93949B; + height: 24px; + width: 24px; + transform: scale(1.8); + display: flex; + align-items: center; + justify-content: center; + } + .name-ctn{ + // flex: 1; + // //通过设置宽度为0让整个name容器的宽度由flex自己分配控制 + // width: 0; + min-width: 0; + } + .name { + font-size: 24px; + color: #0F1222; + margin: 0 12px; + // width: 600px; + } + } +} \ No newline at end of file diff --git a/new-web/src/style/mixins.less b/new-web/src/style/mixins.less new file mode 100644 index 000000000..9ced4c5fc --- /dev/null +++ b/new-web/src/style/mixins.less @@ -0,0 +1,5 @@ +.divider-line() { + margin: 8px 0 24px 0; + height: 1px; + background-color: rgba(15, 18, 34, 0.06); +} diff --git a/new-web/src/style/varible.less b/new-web/src/style/varible.less new file mode 100644 index 000000000..6816cf6e9 --- /dev/null +++ b/new-web/src/style/varible.less @@ -0,0 +1,38 @@ +// 黑色 +@black-color:#0F1222; +// 蓝色 +@blue-color: #5384FF; +// 红色 +@red-color: #F75F56; +// 橙色 +@orange-color: #FF9540; +// 黄色 +@yellow-color: #FBC731; +// 绿色 +@green-color: #00CB91; +// 提示文案颜色 +@tips-color: rgba(15, 18, 34, 0.30); +// 禁用色 +@disabled-color: rgba(15, 18, 34, 0.65); +// 占位符字体颜色 +@placeholder-color: #CFD0D3; +// 表单label颜色 +@label-color: #646670; + +// 成功的颜色 +@success-color: @green-color; +// 警告的颜色 +@warn-color: #FF953B; +// 失败的颜色 +@fail-color: @red-color; + +// 字体大小 + +// 常规 +@font-regular-size: 14px; + + +// 字体粗细 + +// 常规 +@font-regular-weight: 400; diff --git a/new-web/tsconfig.json b/new-web/tsconfig.json new file mode 100644 index 000000000..ea930c0b5 --- /dev/null +++ b/new-web/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "outDir": "build/dist", + "module": "esnext", + "target": "esnext", + "lib": ["esnext", "dom"], + "sourceMap": true, + "baseUrl": ".", + "jsx": "preserve", + "allowSyntheticDefaultImports": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "suppressImplicitAnyIndexErrors": true, + "noUnusedLocals": true, + "allowJs": true, + "skipLibCheck": true, + "experimentalDecorators": true, + "strict": true, + "paths": { + "@/*": ["./src/*"], + "@@/*": ["./src/.fes/*"] + } + }, + "include": [ + "src/**/*", + "tests/**/*", + "test/**/*", + "__test__/**/*", + "typings/**/*", + "config/**/*", + ".eslintrc.js", + ".stylelintrc.js", + ".prettierrc.js" + ], + "exclude": ["node_modules", "build", "dist", "scripts", "src/.fes/*", "webpack", "jest"] +} diff --git a/new-web/yarn.lock b/new-web/yarn.lock new file mode 100644 index 000000000..bb6499121 --- /dev/null +++ b/new-web/yarn.lock @@ -0,0 +1,9344 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "http://10.107.103.115:8001/@ampproject/remapping/download/@ampproject/remapping-2.2.0.tgz" + integrity sha1-VsEzgkeA3jF0rtWraDTzAmeQFU0= + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/code-frame/download/@babel/code-frame-7.18.6.tgz" + integrity sha1-OyXTjIlgC6otzCGe36iKdOssQno= + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "http://10.107.103.115:8001/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz" + integrity sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8= + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": + version "7.20.14" + resolved "http://10.107.103.115:8001/@babel/compat-data/download/@babel/compat-data-7.20.14.tgz" + integrity sha1-QQb8i3VfPj7goKfCfd5d4dKyuvg= + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.12.0", "@babel/core@^7.12.13", "@babel/core@^7.13.0", "@babel/core@^7.16.7", "@babel/core@^7.4.0-0", "@babel/core@>=7.11.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/core/download/@babel/core-7.21.0.tgz" + integrity sha1-E0Gu/cwUzMdVP8xojdiYai2v/BM= + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.0" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.21.0" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.0" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/eslint-parser@^7.13.14": + version "7.19.1" + resolved "http://10.107.103.115:8001/@babel/eslint-parser/download/@babel/eslint-parser-7.19.1.tgz" + integrity sha1-T2j2sIJUieAKJLQbahrjVBTs0vQ= + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/generator@^7.15.0", "@babel/generator@^7.21.0", "@babel/generator@^7.21.1": + version "7.21.1" + resolved "http://10.107.103.115:8001/@babel/generator/download/@babel/generator-7.21.1.tgz" + integrity sha1-lRzGJgV7wK8sNc0j6cZNOE3qg90= + dependencies: + "@babel/types" "^7.21.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.18.6.tgz" + integrity sha1-6qSfb4DVoz+aXdInbm1uRRvgprs= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz" + integrity sha1-rNTt/XpWbR1R6pdd/zj9UpBpgbs= + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.20.7.tgz" + integrity sha1-ps0z6TYp9etHOwIarAXfYsTNCbs= + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.7", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.21.0.tgz" + integrity sha1-ZPSeywAgUy8ZsdAUsDvMqhq4X7k= + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "http://10.107.103.115:8001/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.20.5.tgz" + integrity sha1-XqebWZYqCewqzyCpY6AatNB2zMo= + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.2.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "http://10.107.103.115:8001/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.3.tgz" + integrity sha1-hhLlW+XVHwzR82tKWoOSTomIS3o= + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.18.9.tgz" + integrity sha1-DAzumzXSyhkEeHVoZbs1KEIvUb4= + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.18.6.tgz" + integrity sha1-QfgijvCm8aA2uN/f7HzpT5prwJY= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/helper-function-name/download/@babel/helper-function-name-7.21.0.tgz" + integrity sha1-1VKCmxDqnxIJaTBAI80GRfoAsbQ= + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.18.6.tgz" + integrity sha1-1NLI+0uuqlxouZzIJFxWVU+SZng= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.21.0.tgz" + integrity sha1-MZxqlAQxoTOJcUhRWHfS8yacO6U= + dependencies: + "@babel/types" "^7.21.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-module-imports/download/@babel/helper-module-imports-7.18.6.tgz" + integrity sha1-Hj69u9CKrRQ3tCjFAgTbE8Wjym4= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.0", "@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "http://10.107.103.115:8001/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.21.2.tgz" + integrity sha1-Fgyq+kl4rIwArGZjbLD6N7Ak4tI= + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.18.6.tgz" + integrity sha1-k2mqlD7n2kftqyy06Dis8J0pD/4= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "http://10.107.103.115:8001/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.20.2.tgz" + integrity sha1-0bkAB1KxjQh3z/haXDds5cMSFik= + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.18.9.tgz" + integrity sha1-mXRYoOM1cIDlTh157DR/iozShRk= + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.20.7.tgz" + integrity sha1-JD7NJyTSBxUyssitLw+fCDvK4zE= + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "http://10.107.103.115:8001/@babel/helper-simple-access/download/@babel/helper-simple-access-7.20.2.tgz" + integrity sha1-CrRSaH/gws+x4rngAV3gf8LWLdk= + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "http://10.107.103.115:8001/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.20.0.tgz" + integrity sha1-++TFL2BRjKuBQNdxAfDmOoojBoQ= + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.18.6.tgz" + integrity sha1-c2eUm8dbIMbVpdSpe7ooJK6O8HU= + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "http://10.107.103.115:8001/@babel/helper-string-parser/download/@babel/helper-string-parser-7.19.4.tgz" + integrity sha1-ONOstlS0cBqbd/sGFalvd1w6nmM= + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "http://10.107.103.115:8001/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.19.1.tgz" + integrity sha1-fuqDTPMpAf/cGn7lVeL5wn4knKI= + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/helper-validator-option/download/@babel/helper-validator-option-7.21.0.tgz" + integrity sha1-giTH4TrOS6/cQATaLPBk70JnMYA= + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "http://10.107.103.115:8001/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.20.5.tgz" + integrity sha1-deLYTUmaCrOzHDO8/lnWuKRfYuM= + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/helpers/download/@babel/helpers-7.21.0.tgz" + integrity sha1-ndGE+1WZhiA3kXzcnuy4RXfcTn4= + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/highlight/download/@babel/highlight-7.18.6.tgz" + integrity sha1-gRWGAek+JWN5Wty/vfXWS+Py7N8= + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.15.0", "@babel/parser@^7.16.4", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": + version "7.21.2" + resolved "http://10.107.103.115:8001/@babel/parser/download/@babel/parser-7.21.2.tgz" + integrity sha1-2sr638bXZUwwUaZtb+VbbLLyoLM= + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + integrity sha1-2luPmlgKzfvlNJTbpF6jifsJpNI= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz" + integrity sha1-2chViSWFOaIqkBAzhTEBphmNTvE= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.1": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.20.7.tgz" + integrity sha1-v7cnbS1XPLZ7o3mYSiM04mK6UyY= + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.18.6.tgz" + integrity sha1-sRD1l0GJX37CGm//aW7EYmXERqM= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.20.7.tgz" + integrity sha1-klkukCmxOxW+D3zmp67cKHnKRac= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-do-expressions@^7.12.13": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-do-expressions/download/@babel/plugin-proposal-do-expressions-7.18.6.tgz" + integrity sha1-saBaKHbfLKOFVhFafs3jtMRUY6k= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-do-expressions" "^7.18.6" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.18.6.tgz" + integrity sha1-crz41Ah5n1R9dZKYw8J8fn+qTZQ= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-default-from@^7.12.13": + version "7.18.10" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-export-default-from/download/@babel/plugin-proposal-export-default-from-7.18.10.tgz" + integrity sha1-CR9HlNvOQCfAPPTrxk0/uWt1wgY= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-default-from" "^7.18.6" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.18.9.tgz" + integrity sha1-X3MTqzSM2xnVkBRfkkdUDpR2EgM= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-function-bind@^7.12.13": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-function-bind/download/@babel/plugin-proposal-function-bind-7.18.9.tgz" + integrity sha1-Y11lksJFAMb3rGTK4QODreaKioo= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-function-bind" "^7.18.6" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.18.6.tgz" + integrity sha1-foeIwYEcOTr/digX59vx69DAXws= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.20.7.tgz" + integrity sha1-37yqj3tNN7Uei/tG2Upa6iu4nYM= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + integrity sha1-/dlAqZp0Dld9bHU6tvu0P9uUZ+E= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.18.6.tgz" + integrity sha1-iZsU+6/ofwU9LF/wWzYCnGLhPHU= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.20.7.tgz" + integrity sha1-qmYpQO9CV3nHVTSlxB6dk27cOQo= + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.18.6.tgz" + integrity sha1-+UANDmo+qTup73CwnnLdbaY4oss= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.21.0.tgz" + integrity sha1-iG9ciXjet9MPZ4suJDRrKHI00+o= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-pipeline-operator@^7.12.13": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-pipeline-operator/download/@babel/plugin-proposal-pipeline-operator-7.18.9.tgz" + integrity sha1-ZqYGZu/Zwpx+xNPizLOPnZeZQjc= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-pipeline-operator" "^7.18.6" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.18.6.tgz" + integrity sha1-UgnefSE0V1SKmENvoogvUvS+a+o= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.21.0.tgz" + integrity sha1-GUlr2Yg92Dwjx9f8RdzZrQLfodw= + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.18.6.tgz" + integrity sha1-r2E9LNXmQ2Q7Zc3tZCB7Fchct44= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha1-GV34mxRrS3izv4l/16JXyEZZ1AY= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-do-expressions@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-do-expressions/download/@babel/plugin-syntax-do-expressions-7.18.6.tgz" + integrity sha1-hYG67cDxKM3wKS4wA6f0Tke4c2g= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-default-from@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-export-default-from/download/@babel/plugin-syntax-export-default-from-7.18.6.tgz" + integrity sha1-jfB2cRpIGMTOTyPmHWIrC6L/hLw= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha1-AolkqbqA28CUyRXEh618TnpmRlo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-function-bind@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-function-bind/download/@babel/plugin-syntax-function-bind-7.18.6.tgz" + integrity sha1-MhTov8cewd5jbdvAGDjCgp5WCxk= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-import-assertions/download/@babel/plugin-syntax-import-assertions-7.20.0.tgz" + integrity sha1-u1Dg1L6glXI1OQZBIJOU6HvbnMQ= + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.18.6.tgz" + integrity sha1-qP7vY7AQFQq9l/FknsKW6EmUPKA= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha1-ypHvRjA1MESLkGZSusLp/plB9pk= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-pipeline-operator@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-pipeline-operator/download/@babel/plugin-syntax-pipeline-operator-7.18.6.tgz" + integrity sha1-2qRNRgu6I0eMMpoOi77kM6aB/UM= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.20.0" + resolved "http://10.107.103.115:8001/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.20.0.tgz" + integrity sha1-TpoM/HachWibd6LmQtJOn2l/yMc= + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.20.7.tgz" + integrity sha1-vqMysOiy2rPa/lWhY9gidTGrBVE= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.20.7.tgz" + integrity sha1-3+4YYjyMsx3reWqjyoTdqc6pQ1Q= + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.18.6.tgz" + integrity sha1-kYe/S6MCY1udcNmGrXDwOHJiFqg= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.20.2": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.21.0.tgz" + integrity sha1-5ze5EDflGG7ha3bnrgkzWKVjTwI= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.20.2": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.21.0.tgz" + integrity sha1-9GnQsHpMWn27Ia+tnifle0cDFmU= + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.20.7.tgz" + integrity sha1-cEzC/RVdHJllUduCdtVbnUbk0Ko= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.20.2": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.20.7.tgz" + integrity sha1-i9pXj3FiDH3nyTr1kBVLozFBVFQ= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.18.6.tgz" + integrity sha1-soaz56rmx7hh5FvtCi+v1rGk/vg= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.18.9.tgz" + integrity sha1-aH8V7jza1thRkesqNyxFKOqgrg4= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.18.6.tgz" + integrity sha1-QhxwX0UhiIxl6R/dGvlRv+/U2s0= + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.18.8.tgz" + integrity sha1-bvilCyROtqC9utDHxhh35OMAl8E= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.18.9.tgz" + integrity sha1-zDVPgjTmKWiUbGGkbWNlRA/HZOA= + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.18.9.tgz" + integrity sha1-cnlv2++A5W+6PGppnVTw3lV0RLw= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.18.6.tgz" + integrity sha1-rJ/cGhGGIKxJt+el0twXehv+6I4= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.19.6": + version "7.20.11" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.20.11.tgz" + integrity sha1-PazMqOTMMJ8Dw6DEtB3Esm9VIUo= + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.19.6": + version "7.21.2" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.21.2.tgz" + integrity sha1-b/UHDnHjGS7yt+OYIKBvt44wWOc= + dependencies: + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + +"@babel/plugin-transform-modules-systemjs@^7.19.6": + version "7.20.11" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.20.11.tgz" + integrity sha1-Rn7Gu6a2pQY07qYcnCMmVNikaW4= + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.18.6.tgz" + integrity sha1-gdODLWA0t1tU5ighuljyjtCqtLk= + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.20.5" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.20.5.tgz" + integrity sha1-YmKY3WLqUdRSw75YsoXSMZW6aag= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.18.6.tgz" + integrity sha1-0Sjzdq4gBHfzfE3fzHIqihsyRqg= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.18.6.tgz" + integrity sha1-+zxszdFZObb/eTmUS1GXHdw1kSw= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.20.7.tgz" + integrity sha1-DuNJ6dG8lueOOzenr0I6QHinCD8= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.18.6.tgz" + integrity sha1-4iSYkDpINEjpTgMum7ucXMv8k6M= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.20.5" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.20.5.tgz" + integrity sha1-V82liMf/t/T4SDzIO9zqAqkH8E0= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.18.6.tgz" + integrity sha1-savY6/jtql9/5ru40hM9I7am92o= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.12.13": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.21.0.tgz" + integrity sha1-KohPKVVtCmjNPRUtzJ5scd+27ug= + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.18.6.tgz" + integrity sha1-bW33mD1nsZUom+JJCePxKo9mTck= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.19.0": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.20.7.tgz" + integrity sha1-wtg+C5nTv4PgexGZXuJL98oJQB4= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.18.6.tgz" + integrity sha1-xnBusrFSQCjjF3IDOVg60PRErcw= + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.18.9.tgz" + integrity sha1-BOxvEKzaqBhGaJ1j+uEX3ZwkOl4= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.18.9.tgz" + integrity sha1-yM6mgmPkWt3NavyQkUKfgJJXYsA= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.21.0.tgz" + integrity sha1-8JVqFTZ547N3rlt/AUNCcVHkyEg= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.18.10.tgz" + integrity sha1-Hs+w7ag9CbvLd8CZcMLdVYMqokY= + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "http://10.107.103.115:8001/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.18.6.tgz" + integrity sha1-GUMXIl2MIBu64QM2T/6eLOo2zco= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.12.13", "@babel/preset-env@^7.15.0": + version "7.20.2" + resolved "http://10.107.103.115:8001/@babel/preset-env/download/@babel/preset-env-7.20.2.tgz" + integrity sha1-mxZCqke7n0Oob5YwAReA2rf4ZQY= + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "http://10.107.103.115:8001/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz" + integrity sha1-75Odbn8miCfhhBY43G/5VRXhFdk= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.15.0": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/preset-typescript/download/@babel/preset-typescript-7.21.0.tgz" + integrity sha1-vLvKUT6CE2kf5dSyPZJR4B8A6/8= + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-transform-typescript" "^7.21.0" + +"@babel/register@^7.15.3": + version "7.18.9" + resolved "http://10.107.103.115:8001/@babel/register/download/@babel/register-7.18.9.tgz" + integrity sha1-GIiyS8KNXMQcQS/rAV6f9rluQ5w= + dependencies: + clone-deep "^4.0.1" + find-cache-dir "^2.0.0" + make-dir "^2.1.0" + pirates "^4.0.5" + source-map-support "^0.5.16" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4": + version "7.21.0" + resolved "http://10.107.103.115:8001/@babel/runtime/download/@babel/runtime-7.21.0.tgz" + integrity sha1-W1XJ05Tl/PMEkJqLAMB9whe1ZnM= + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.0.0", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "http://10.107.103.115:8001/@babel/template/download/@babel/template-7.20.7.tgz" + integrity sha1-oVCQwoOag7AqqZbAtJlABYQf1ag= + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.15.0", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": + version "7.21.2" + resolved "http://10.107.103.115:8001/@babel/traverse/download/@babel/traverse-7.21.2.tgz" + integrity sha1-rH4fJ2WHUIkugV5grpDzgqRtjnU= + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.21.1" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.2" + "@babel/types" "^7.21.2" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.4.4": + version "7.21.2" + resolved "http://10.107.103.115:8001/@babel/types/download/@babel/types-7.21.2.tgz" + integrity sha1-kiRvbgD5F1WJPCh2rWU9twyDENE= + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@commitlint/cli@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/cli/download/@commitlint/cli-15.0.0.tgz" + integrity sha1-jnjobuK2lVwaXRQOc0psFxzjZ+4= + dependencies: + "@commitlint/format" "^15.0.0" + "@commitlint/lint" "^15.0.0" + "@commitlint/load" "^15.0.0" + "@commitlint/read" "^15.0.0" + "@commitlint/types" "^15.0.0" + lodash "^4.17.19" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^17.0.0" + +"@commitlint/config-conventional@15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/config-conventional/download/@commitlint/config-conventional-15.0.0.tgz" + integrity sha1-O/Gt8xnjtDHeErqC3DmVJAOLLY8= + dependencies: + conventional-changelog-conventionalcommits "^4.3.1" + +"@commitlint/ensure@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/ensure/download/@commitlint/ensure-15.0.0.tgz" + integrity sha1-BqY3OOI5OXCghbQo5s+A+h/nb0g= + dependencies: + "@commitlint/types" "^15.0.0" + lodash "^4.17.19" + +"@commitlint/execute-rule@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/execute-rule/download/@commitlint/execute-rule-15.0.0.tgz" + integrity sha1-a/95Yt846J/5/bwAq9ebiEnH6fk= + +"@commitlint/format@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/format/download/@commitlint/format-15.0.0.tgz" + integrity sha1-EJNRgJE96ThL6kySF/TGxe4QCrM= + dependencies: + "@commitlint/types" "^15.0.0" + chalk "^4.0.0" + +"@commitlint/is-ignored@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/is-ignored/download/@commitlint/is-ignored-15.0.0.tgz" + integrity sha1-OCv59vjYEPL/xZzMUn9DierdeUk= + dependencies: + "@commitlint/types" "^15.0.0" + semver "7.3.5" + +"@commitlint/lint@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/lint/download/@commitlint/lint-15.0.0.tgz" + integrity sha1-qTuIlvslsFqy7QJG02X0kIZUWI0= + dependencies: + "@commitlint/is-ignored" "^15.0.0" + "@commitlint/parse" "^15.0.0" + "@commitlint/rules" "^15.0.0" + "@commitlint/types" "^15.0.0" + +"@commitlint/load@^15.0.0", "@commitlint/load@>6.1.1": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/load/download/@commitlint/load-15.0.0.tgz" + integrity sha1-W9ORwTh6r+krVM8qhrdqUij89O8= + dependencies: + "@commitlint/execute-rule" "^15.0.0" + "@commitlint/resolve-extends" "^15.0.0" + "@commitlint/types" "^15.0.0" + "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" + chalk "^4.0.0" + cosmiconfig "^7.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + typescript "^4.4.3" + +"@commitlint/message@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/message/download/@commitlint/message-15.0.0.tgz" + integrity sha1-mKOKyhs82Zag/NvZrWfpA532Cwo= + +"@commitlint/parse@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/parse/download/@commitlint/parse-15.0.0.tgz" + integrity sha1-ysd7dRR0i40B0AwOZ9XlTGlcMCw= + dependencies: + "@commitlint/types" "^15.0.0" + conventional-changelog-angular "^5.0.11" + conventional-commits-parser "^3.2.2" + +"@commitlint/read@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/read/download/@commitlint/read-15.0.0.tgz" + integrity sha1-2oOfO01JsFWGqc0mZsyMSja57JE= + dependencies: + "@commitlint/top-level" "^15.0.0" + "@commitlint/types" "^15.0.0" + fs-extra "^10.0.0" + git-raw-commits "^2.0.0" + +"@commitlint/resolve-extends@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/resolve-extends/download/@commitlint/resolve-extends-15.0.0.tgz" + integrity sha1-uvISJ+KsUs71Ruw13Wcy6bC25Xw= + dependencies: + import-fresh "^3.0.0" + lodash "^4.17.19" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/rules/download/@commitlint/rules-15.0.0.tgz" + integrity sha1-MmNwq8AESS/LVUMZjR1VsU4l48g= + dependencies: + "@commitlint/ensure" "^15.0.0" + "@commitlint/message" "^15.0.0" + "@commitlint/to-lines" "^15.0.0" + "@commitlint/types" "^15.0.0" + execa "^5.0.0" + +"@commitlint/to-lines@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/to-lines/download/@commitlint/to-lines-15.0.0.tgz" + integrity sha1-uGrJjzGWiJkOzC4JIn+t9ZG2XJI= + +"@commitlint/top-level@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/top-level/download/@commitlint/top-level-15.0.0.tgz" + integrity sha1-Rn7IN36B38kW4aIKJ1WIYr4aQlQ= + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^15.0.0": + version "15.0.0" + resolved "http://10.107.103.115:8001/@commitlint/types/download/@commitlint/types-15.0.0.tgz" + integrity sha1-Rvp72j5jQMrz46LkFby3j/AZXu0= + dependencies: + chalk "^4.0.0" + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "http://10.107.103.115:8001/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.7.tgz" + integrity sha1-HVcr+74Ut3BOC6Dzm3SBW4SHDXA= + +"@endemolshinegroup/cosmiconfig-typescript-loader@^3.0.2": + version "3.0.2" + resolved "http://10.107.103.115:8001/@endemolshinegroup/cosmiconfig-typescript-loader/download/@endemolshinegroup/cosmiconfig-typescript-loader-3.0.2.tgz" + integrity sha1-7qRjWCjd43KDiwkJaT69mq/uwi0= + dependencies: + lodash.get "^4" + make-error "^1" + ts-node "^9" + tslib "^2" + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "http://10.107.103.115:8001/@eslint/eslintrc/download/@eslint/eslintrc-0.4.3.tgz" + integrity sha1-nkKYHvA1vrPdSa3ResuW6P9vOUw= + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@fesjs/compiler@^2.0.3", "@fesjs/compiler@^2.0.4", "@fesjs/compiler@^2.0.5": + version "2.0.5" + resolved "http://10.107.103.115:8001/@fesjs/compiler/download/@fesjs/compiler-2.0.5.tgz" + integrity sha1-Wpj5SXvVH1IEXhhOzdxB8VwtWhA= + dependencies: + "@babel/core" "^7.16.7" + "@babel/preset-env" "^7.15.0" + "@babel/register" "^7.15.3" + "@fesjs/utils" "^2.0.4" + commander "^7.0.0" + dotenv "8.2.0" + joi "17.3.0" + readline "^1.3.0" + set-value "3.0.2" + tapable "^2.2.0" + +"@fesjs/fes-design@^0.1.10", "@fesjs/fes-design@0.7.18": + version "0.7.18" + resolved "http://10.107.103.115:8001/@fesjs/fes-design/download/@fesjs/fes-design-0.7.18.tgz" + integrity sha1-zK0Wou8Tn/QjrgwYV2JS5tcw8ws= + dependencies: + "@babel/runtime" "^7.16.3" + "@floating-ui/dom" "^0.4.2" + "@juggle/resize-observer" "^3.3.1" + "@types/lodash-es" "^4.17.5" + "@types/normalize-wheel" "^1.0.0" + "@vue/shared" "^3.2.24" + "@vueuse/core" "^9.6.0" + async-validator "^4.0.7" + csstype "^3.0.10" + date-fns "^2.28.0" + lodash-es "^4.17.21" + normalize-wheel "^1.0.1" + stickybits "^3.7.9" + +"@fesjs/fes-design@0.8.7": + version "0.8.7" + resolved "http://10.107.103.115:8001/@fesjs/fes-design/download/@fesjs/fes-design-0.8.7.tgz" + integrity sha1-Iy+4MKYf1oHVcjoT9ut3+7gp/r4= + dependencies: + "@babel/runtime" "^7.16.3" + "@floating-ui/dom" "^1.2.9" + "@juggle/resize-observer" "^3.3.1" + "@types/lodash-es" "^4.17.5" + "@vue/shared" "^3.2.24" + "@vueuse/core" "^9.6.0" + async-validator "^4.0.7" + csstype "^3.0.10" + date-fns "^2.28.0" + lodash-es "^4.17.21" + stickybits "^3.7.9" + +"@fesjs/fes@^2.0.0", "@fesjs/fes@2.0.14": + version "2.0.14" + resolved "http://10.107.103.115:8001/@fesjs/fes/download/@fesjs/fes-2.0.14.tgz" + integrity sha1-05bMwWz6MfM9+nXJgkMJoX9+Wys= + dependencies: + "@fesjs/compiler" "^2.0.3" + "@fesjs/preset-built-in" "^2.0.13" + "@fesjs/runtime" "^2.0.2" + "@fesjs/utils" "^2.0.3" + resolve-cwd "^3.0.0" + +"@fesjs/plugin-access@2.0.3": + version "2.0.3" + resolved "http://10.107.103.115:8001/@fesjs/plugin-access/download/@fesjs/plugin-access-2.0.3.tgz" + integrity sha1-gYNLEzuSZWGYvw0qXc8WaYL2FeU= + dependencies: + "@fesjs/utils" "^2.0.3" + lodash-es "^4.17.15" + +"@fesjs/plugin-enums@2.0.2": + version "2.0.2" + resolved "http://10.107.103.115:8001/@fesjs/plugin-enums/download/@fesjs/plugin-enums-2.0.2.tgz" + integrity sha1-BU3pxJmJjy0lEUox+XowZpf02HY= + +"@fesjs/plugin-icon@2.0.6": + version "2.0.6" + resolved "http://10.107.103.115:8001/@fesjs/plugin-icon/download/@fesjs/plugin-icon-2.0.6.tgz" + integrity sha1-cMvu0j4XVyE3dCpdckFeav6437k= + dependencies: + svgo "^2.3.1" + +"@fesjs/plugin-layout@3.0.0": + version "3.0.0" + resolved "http://10.107.103.115:8001/@fesjs/plugin-layout/download/@fesjs/plugin-layout-3.0.0.tgz" + integrity sha1-UdVwarWbDAO72enT45g7aIQMVUk= + dependencies: + "@fesjs/utils" "^2.0.3" + +"@fesjs/plugin-locale@3.0.3": + version "3.0.3" + resolved "http://10.107.103.115:8001/@fesjs/plugin-locale/download/@fesjs/plugin-locale-3.0.3.tgz" + integrity sha1-9i+fnLIQkCNE7kebyaj+xzO/TXU= + dependencies: + "@fesjs/utils" "^2.0.3" + vue-i18n "^9.0.0" + +"@fesjs/plugin-model@2.0.3": + version "2.0.3" + resolved "http://10.107.103.115:8001/@fesjs/plugin-model/download/@fesjs/plugin-model-2.0.3.tgz" + integrity sha1-6ru02crL71g8HDBJofuOWVJqPkA= + dependencies: + "@fesjs/utils" "^2.0.3" + +"@fesjs/plugin-monaco-editor@2.0.0-beta.7": + version "2.0.0-beta.7" + resolved "http://10.107.103.115:8001/@fesjs/plugin-monaco-editor/download/@fesjs/plugin-monaco-editor-2.0.0-beta.7.tgz" + integrity sha1-anhnbhPiOQWD8ksGuSQO3YE3r1s= + dependencies: + "@fesjs/utils" "^2.0.4" + lodash-es "^4.17.15" + monaco-editor "^0.20.0" + monaco-editor-webpack-plugin "^1.9.1" + +"@fesjs/plugin-request@2.0.12": + version "2.0.12" + resolved "http://10.107.103.115:8001/@fesjs/plugin-request/download/@fesjs/plugin-request-2.0.12.tgz" + integrity sha1-Ro33sQ3GtGva+6Zdz63wcV74HR4= + dependencies: + "@fesjs/compiler" "^2.0.4" + "@fesjs/utils" "^2.0.3" + axios "0.21.1" + +"@fesjs/plugin-watermark@2.0.3": + version "2.0.3" + resolved "http://10.107.103.115:8001/@fesjs/plugin-watermark/download/@fesjs/plugin-watermark-2.0.3.tgz" + integrity sha1-2YCpPwuHU5HRJmlC86xA4VoGjjU= + dependencies: + "@fesjs/utils" "^2.0.4" + lodash-es "^4.17.15" + +"@fesjs/preset-built-in@^2.0.13": + version "2.1.8" + resolved "http://10.107.103.115:8001/@fesjs/preset-built-in/download/@fesjs/preset-built-in-2.1.8.tgz" + integrity sha1-n2TwS0oLRBJ4AzjV9dUbhb7RWQ4= + dependencies: + "@babel/core" "^7.12.13" + "@babel/plugin-proposal-do-expressions" "^7.12.13" + "@babel/plugin-proposal-export-default-from" "^7.12.13" + "@babel/plugin-proposal-function-bind" "^7.12.13" + "@babel/plugin-proposal-pipeline-operator" "^7.12.13" + "@babel/plugin-transform-runtime" "^7.12.13" + "@babel/preset-env" "^7.12.13" + "@babel/preset-typescript" "^7.15.0" + "@fesjs/compiler" "^2.0.5" + "@fesjs/utils" "^2.0.4" + "@soda/friendly-errors-webpack-plugin" "^1.8.0" + "@vue/babel-plugin-jsx" "^1.0.2" + "@vue/compiler-sfc" "^3.2.37" + autoprefixer "^10.2.4" + babel-loader "^8.2.2" + babel-plugin-import "1.13.3" + body-parser "^1.19.0" + cli-highlight "^2.1.4" + cliui "7.0.4" + connect-history-api-fallback "^1.6.0" + cookie-parser "^1.4.5" + copy-webpack-plugin "^10.2.4" + core-js "^3.27.0" + css-loader "^5.0.1" + css-minimizer-webpack-plugin "^3.0.0" + envinfo "^7.7.3" + file-loader "^6.2.0" + fs-extra "^10.0.0" + get-folder-size "^2.0.1" + html-webpack-plugin "^5.0.0" + html-webpack-tags-plugin "^3.0.0" + less "3.9.0" + less-loader "^8.0.0" + mini-css-extract-plugin "^1.3.5" + mockjs "^1.1.0" + postcss "8.3.0" + postcss-flexbugs-fixes "^5.0.2" + postcss-loader "^4.2.0" + postcss-safe-parser "^5.0.2" + qs "^6.10.2" + raw-loader "^4.0.2" + style-loader "^2.0.0" + url-loader "^4.1.1" + vue-loader "^16.1.2" + webpack "^5.24.2" + webpack-bundle-analyzer "^4.4.0" + webpack-chain "^6.5.1" + webpack-dev-server "^3.11.2" + webpackbar "^5.0.0-3" + +"@fesjs/runtime@^2.0.2": + version "2.0.3" + resolved "http://10.107.103.115:8001/@fesjs/runtime/download/@fesjs/runtime-2.0.3.tgz" + integrity sha1-lE7hEDXDnF7S6uHEjAbITTLhCiE= + dependencies: + vue-router "^4.0.1" + +"@fesjs/traction-widget@1.7.3": + version "1.7.3" + resolved "http://10.107.103.115:8001/@fesjs/traction-widget/download/@fesjs/traction-widget-1.7.3.tgz" + integrity sha1-Qu+LhyJkAKfgKwrsiOGJdT4knW8= + dependencies: + "@fesjs/fes-design" "0.8.7" + +"@fesjs/utils@^2.0.3", "@fesjs/utils@^2.0.4": + version "2.0.4" + resolved "http://10.107.103.115:8001/@fesjs/utils/download/@fesjs/utils-2.0.4.tgz" + integrity sha1-rH1YmaX90lR540PTyoAztxe5rzs= + dependencies: + "@babel/generator" "^7.15.0" + "@babel/parser" "^7.15.0" + "@babel/traverse" "^7.15.0" + chalk "^4.1.2" + chokidar "^3.5.2" + crequire "^1.8.1" + debug "^4.3.2" + deepmerge "^4.2.2" + glob "^7.1.7" + lodash "^4.17.21" + mkdirp "^1.0.4" + mustache "^4.2.0" + pkg-up "^3.1.0" + portfinder "^1.0.28" + resolve "^1.20.0" + rimraf "^3.0.2" + semver "^7.3.5" + yargs-parser "^20.2.9" + +"@floating-ui/core@^0.6.2": + version "0.6.2" + resolved "http://10.107.103.115:8001/@floating-ui/core/download/@floating-ui/core-0.6.2.tgz" + integrity sha1-8oE/Dl89XtevUCnhoIIgPa3wK30= + +"@floating-ui/core@^1.4.2": + version "1.5.0" + resolved "http://10.107.103.115:8001/@floating-ui/core/download/@floating-ui/core-1.5.0.tgz" + integrity sha1-XAXGDVri0FEBwwIcGio1DdwCf4w= + dependencies: + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/dom@^0.4.2": + version "0.4.5" + resolved "http://10.107.103.115:8001/@floating-ui/dom/download/@floating-ui/dom-0.4.5.tgz" + integrity sha1-LojRZkYRnMZ9RGg/de6ZhAR1u/o= + dependencies: + "@floating-ui/core" "^0.6.2" + +"@floating-ui/dom@^1.2.9": + version "1.5.3" + resolved "http://10.107.103.115:8001/@floating-ui/dom/download/@floating-ui/dom-1.5.3.tgz" + integrity sha1-VOUO/LQywGwjzTPeK1dRAgBUNvo= + dependencies: + "@floating-ui/core" "^1.4.2" + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/utils@^0.1.3": + version "0.1.4" + resolved "http://10.107.103.115:8001/@floating-ui/utils/download/@floating-ui/utils-0.1.4.tgz" + integrity sha1-GWVNECbMQQl11GRFGA5wpQibPn0= + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "http://10.107.103.115:8001/@hapi/hoek/download/@hapi/hoek-9.3.0.tgz" + integrity sha1-g2iGnctzW+Ln9ct2R9544WeiUfs= + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "http://10.107.103.115:8001/@hapi/topo/download/@hapi/topo-5.1.0.tgz" + integrity sha1-3ESOMyxsbjek3AL9hLqNRLmvsBI= + dependencies: + "@hapi/hoek" "^9.0.0" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "http://10.107.103.115:8001/@humanwhocodes/config-array/download/@humanwhocodes/config-array-0.5.0.tgz" + integrity sha1-FAeWfUxu7Nc4j4Os8er00Mbljvk= + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "http://10.107.103.115:8001/@humanwhocodes/object-schema/download/@humanwhocodes/object-schema-1.2.1.tgz" + integrity sha1-tSBSnsIdjllFoYUd/Rwy6U45/0U= + +"@intlify/core-base@9.2.2": + version "9.2.2" + resolved "http://10.107.103.115:8001/@intlify/core-base/download/@intlify/core-base-9.2.2.tgz" + integrity sha1-U1M2mwXMn+Ncq5X+IK/rikSB+Tk= + dependencies: + "@intlify/devtools-if" "9.2.2" + "@intlify/message-compiler" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + +"@intlify/devtools-if@9.2.2": + version "9.2.2" + resolved "http://10.107.103.115:8001/@intlify/devtools-if/download/@intlify/devtools-if-9.2.2.tgz" + integrity sha1-sT2axLTi/m0ufapVZReoBh/ovTk= + dependencies: + "@intlify/shared" "9.2.2" + +"@intlify/message-compiler@9.2.2": + version "9.2.2" + resolved "http://10.107.103.115:8001/@intlify/message-compiler/download/@intlify/message-compiler-9.2.2.tgz" + integrity sha1-5Cq2k5uK5bPSH69qRARWZ6GLuhw= + dependencies: + "@intlify/shared" "9.2.2" + source-map "0.6.1" + +"@intlify/shared@9.2.2": + version "9.2.2" + resolved "http://10.107.103.115:8001/@intlify/shared/download/@intlify/shared-9.2.2.tgz" + integrity sha1-UBG+nKK0q4b4Zgc5KG4nB/mrtKU= + +"@intlify/vue-devtools@9.2.2": + version "9.2.2" + resolved "http://10.107.103.115:8001/@intlify/vue-devtools/download/@intlify/vue-devtools-9.2.2.tgz" + integrity sha1-uVcBVW2vfrs6LUWqOunmQVrtgxc= + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.1.1.tgz" + integrity sha1-5dLkUDBqlJHjvXfjI+ONev8xWZY= + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.3.2.tgz" + integrity sha1-wa7cYehT8rufXf5tRELTtWWyU7k= + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "http://10.107.103.115:8001/@jridgewell/gen-mapping/download/@jridgewell/gen-mapping-0.3.2.tgz" + integrity sha1-wa7cYehT8rufXf5tRELTtWWyU7k= + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "http://10.107.103.115:8001/@jridgewell/resolve-uri/download/@jridgewell/resolve-uri-3.1.0.tgz" + integrity sha1-IgOxGMFXchrd/mnUe3BGVGMGbXg= + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "http://10.107.103.115:8001/@jridgewell/set-array/download/@jridgewell/set-array-1.1.2.tgz" + integrity sha1-fGz5mNbSC5FMClWpGuko/yWWXnI= + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "http://10.107.103.115:8001/@jridgewell/source-map/download/@jridgewell/source-map-0.3.2.tgz" + integrity sha1-9FNRqu1FJ6KYUS7HL4EEDJmFgPs= + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "http://10.107.103.115:8001/@jridgewell/sourcemap-codec/download/@jridgewell/sourcemap-codec-1.4.14.tgz" + integrity sha1-rdTJjTQUcqKJGQtCTvvbCWmRuyQ= + +"@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "http://10.107.103.115:8001/@jridgewell/trace-mapping/download/@jridgewell/trace-mapping-0.3.17.tgz" + integrity sha1-eTBBJ3r5BzsJUaf+Dw2MTJjDaYU= + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@juggle/resize-observer@^3.3.1": + version "3.4.0" + resolved "http://10.107.103.115:8001/@juggle/resize-observer/download/@juggle/resize-observer-3.4.0.tgz" + integrity sha1-CNbF4gz35MwC/RgcSwwiXNMdu2A= + +"@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": + version "5.1.1-v1" + resolved "http://10.107.103.115:8001/@nicolo-ribaudo/eslint-scope-5-internals/download/@nicolo-ribaudo/eslint-scope-5-internals-5.1.1-v1.tgz" + integrity sha1-2/czqWXKR7GXMXfcC7bIie3PsSk= + dependencies: + eslint-scope "5.1.1" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "http://10.107.103.115:8001/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz" + integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "http://10.107.103.115:8001/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz" + integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "http://10.107.103.115:8001/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz" + integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "http://10.107.103.115:8001/@polka/url/download/@polka/url-1.0.0-next.21.tgz" + integrity sha1-XeWiOFo1MJQn9gEZkrVEUU1VmqE= + +"@sideway/address@^4.1.0": + version "4.1.4" + resolved "http://10.107.103.115:8001/@sideway/address/download/@sideway/address-4.1.4.tgz" + integrity sha1-A9zOvG6kf9wib309GtUSlV1Hg/A= + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.1" + resolved "http://10.107.103.115:8001/@sideway/formula/download/@sideway/formula-3.0.1.tgz" + integrity sha1-gPy8uvfOAx4O8t0psb/Hw/WDYR8= + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "http://10.107.103.115:8001/@sideway/pinpoint/download/@sideway/pinpoint-2.0.0.tgz" + integrity sha1-z/j/rcNyrSn9P3gneusp5jLMcN8= + +"@soda/friendly-errors-webpack-plugin@^1.8.0": + version "1.8.1" + resolved "http://10.107.103.115:8001/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.1.tgz" + integrity sha1-TU+7EQiZOqo2IRYkfD0YGIosbIU= + dependencies: + chalk "^3.0.0" + error-stack-parser "^2.0.6" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "http://10.107.103.115:8001/@trysound/sax/download/@trysound/sax-0.2.0.tgz" + integrity sha1-zMqrdYr1Z2Hre/N69vA/Mm3XmK0= + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "http://10.107.103.115:8001/@types/eslint-scope/download/@types/eslint-scope-3.7.4.tgz" + integrity sha1-N/wSI/B4bDlicGihLpTW5vxh3hY= + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.21.1" + resolved "http://10.107.103.115:8001/@types/eslint/download/@types/eslint-8.21.1.tgz" + integrity sha1-EQtEGiENU6tHeVEk28Ppu5k9Hnw= + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + version "0.0.51" + resolved "http://10.107.103.115:8001/@types/estree/download/@types/estree-0.0.51.tgz" + integrity sha1-z9cJJKJaP9MrIY5eQg5ol+GsT0A= + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "http://10.107.103.115:8001/@types/glob/download/@types/glob-7.2.0.tgz" + integrity sha1-vBtb86qS8lvV3TnzXFc2G9zlsus= + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "http://10.107.103.115:8001/@types/html-minifier-terser/download/@types/html-minifier-terser-6.1.0.tgz" + integrity sha1-T8M6AMHQwWmHsaIM+S0gYUxVrDU= + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "http://10.107.103.115:8001/@types/json-schema/download/@types/json-schema-7.0.11.tgz" + integrity sha1-1CG2xSejA398hEM/0sQingFoY9M= + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "http://10.107.103.115:8001/@types/json5/download/@types/json5-0.0.29.tgz" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/lodash-es@^4.17.5": + version "4.17.6" + resolved "http://10.107.103.115:8001/@types/lodash-es/download/@types/lodash-es-4.17.6.tgz" + integrity sha1-wu1MgyD/pvEbQ+uJ6eruxllmoKA= + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.191" + resolved "http://10.107.103.115:8001/@types/lodash/download/@types/lodash-4.14.191.tgz" + integrity sha1-CVEef3y6J1rNi0Gd2sjammp54vo= + +"@types/minimatch@*": + version "5.1.2" + resolved "http://10.107.103.115:8001/@types/minimatch/download/@types/minimatch-5.1.2.tgz" + integrity sha1-B1CLRXl8uB7D8nMBGwVM0HVe3co= + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "http://10.107.103.115:8001/@types/minimist/download/@types/minimist-1.2.2.tgz" + integrity sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w= + +"@types/node@*": + version "18.14.5" + resolved "http://10.107.103.115:8001/@types/node/download/@types/node-18.14.5.tgz" + integrity sha1-ShOmRFhiFZMD/DhYZZipOW/ECLM= + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "http://10.107.103.115:8001/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz" + integrity sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE= + +"@types/normalize-wheel@^1.0.0": + version "1.0.1" + resolved "http://10.107.103.115:8001/@types/normalize-wheel/download/@types/normalize-wheel-1.0.1.tgz" + integrity sha1-3xL2vVRgRMb3LTFPzVhQRHeplQM= + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "http://10.107.103.115:8001/@types/parse-json/download/@types/parse-json-4.0.0.tgz" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/web-bluetooth@^0.0.16": + version "0.0.16" + resolved "http://10.107.103.115:8001/@types/web-bluetooth/download/@types/web-bluetooth-0.0.16.tgz" + integrity sha1-HRKHOo5JVnNx8qdf4+f37cpmYtg= + +"@vue/babel-helper-vue-transform-on@^1.0.2": + version "1.0.2" + resolved "http://10.107.103.115:8001/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.2.tgz" + integrity sha1-m5xpHNBvyFUiGiR1w8yDHXdLx9w= + +"@vue/babel-plugin-jsx@^1.0.2": + version "1.1.1" + resolved "http://10.107.103.115:8001/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.1.1.tgz" + integrity sha1-DFusJ4gNI/iYlM0Daje1XvYd38E= + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + "@vue/babel-helper-vue-transform-on" "^1.0.2" + camelcase "^6.0.0" + html-tags "^3.1.0" + svg-tags "^1.0.0" + +"@vue/compiler-core@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/compiler-core/download/@vue/compiler-core-3.2.26.tgz" + integrity sha1-mrkq5iTaUfe2Bk9GecLUVk9DfMg= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.26" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-core@3.2.47": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/compiler-core/download/@vue/compiler-core-3.2.47.tgz" + integrity sha1-PgfGhNdIl6yapZIsUgdB8wKSZ/g= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/compiler-dom/download/@vue/compiler-dom-3.2.26.tgz" + integrity sha1-x6e1XVCnt5gd1E/CghHfFFBIJmc= + dependencies: + "@vue/compiler-core" "3.2.26" + "@vue/shared" "3.2.26" + +"@vue/compiler-dom@3.2.47": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/compiler-dom/download/@vue/compiler-dom-3.2.47.tgz" + integrity sha1-oLBsr373BWk55WPcqpy94weU8wU= + dependencies: + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/compiler-sfc@^3.2.37": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.47.tgz" + integrity sha1-G9w29s3BZD9y4sOX6xo5j1AErT0= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-ssr" "3.2.47" + "@vue/reactivity-transform" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-sfc@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.26.tgz" + integrity sha1-POdmd+SqWDEWVaO+qescuATSJz8= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.26" + "@vue/compiler-dom" "3.2.26" + "@vue/compiler-ssr" "3.2.26" + "@vue/reactivity-transform" "3.2.26" + "@vue/shared" "3.2.26" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.26.tgz" + integrity sha1-/QSVIzQfv0q16I4l7vVm2GKJS6c= + dependencies: + "@vue/compiler-dom" "3.2.26" + "@vue/shared" "3.2.26" + +"@vue/compiler-ssr@3.2.47": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/compiler-ssr/download/@vue/compiler-ssr-3.2.47.tgz" + integrity sha1-NYcsAaJzqsTWBwq52NqRirEwV+4= + dependencies: + "@vue/compiler-dom" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.4.5": + version "6.5.0" + resolved "http://10.107.103.115:8001/@vue/devtools-api/download/@vue/devtools-api-6.5.0.tgz" + integrity sha1-mLmUJe3ucLTJkmkmKPoeosHlfQc= + +"@vue/reactivity-transform@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.26.tgz" + integrity sha1-bY8gpKotGXKPJd6ZlirdvnxNA+k= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.26" + "@vue/shared" "3.2.26" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity-transform@3.2.47": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/reactivity-transform/download/@vue/reactivity-transform-3.2.47.tgz" + integrity sha1-5F300GNw+KvykIGhav0lz/um2E4= + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/reactivity/download/@vue/reactivity-3.2.26.tgz" + integrity sha1-1SkZHlgVIcPBLinvmG1MipM6D4M= + dependencies: + "@vue/shared" "3.2.26" + +"@vue/runtime-core@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/runtime-core/download/@vue/runtime-core-3.2.26.tgz" + integrity sha1-XFnMRA7Xo5ttvUwC4tIcjRmI8N4= + dependencies: + "@vue/reactivity" "3.2.26" + "@vue/shared" "3.2.26" + +"@vue/runtime-dom@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/runtime-dom/download/@vue/runtime-dom-3.2.26.tgz" + integrity sha1-hNOuJYRIh0dxfC4HLV2REsDS5sI= + dependencies: + "@vue/runtime-core" "3.2.26" + "@vue/shared" "3.2.26" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/server-renderer/download/@vue/server-renderer-3.2.26.tgz" + integrity sha1-8WpLn7zJF0F7TOpwyZr84nATQc8= + dependencies: + "@vue/compiler-ssr" "3.2.26" + "@vue/shared" "3.2.26" + +"@vue/shared@^3.2.24", "@vue/shared@3.2.47": + version "3.2.47" + resolved "http://10.107.103.115:8001/@vue/shared/download/@vue/shared-3.2.47.tgz" + integrity sha1-5ZfvdQhsbolv9UeKa/wKeqS70Uw= + +"@vue/shared@3.2.26": + version "3.2.26" + resolved "http://10.107.103.115:8001/@vue/shared/download/@vue/shared-3.2.26.tgz" + integrity sha1-es0WIXg1cbmoLsofBBtKCpg0gdk= + +"@vueuse/core@^9.6.0": + version "9.13.0" + resolved "http://10.107.103.115:8001/@vueuse/core/download/@vueuse/core-9.13.0.tgz" + integrity sha1-L2nmbRkFweTuvCSaAXWc+I6gDPQ= + dependencies: + "@types/web-bluetooth" "^0.0.16" + "@vueuse/metadata" "9.13.0" + "@vueuse/shared" "9.13.0" + vue-demi "*" + +"@vueuse/metadata@9.13.0": + version "9.13.0" + resolved "http://10.107.103.115:8001/@vueuse/metadata/download/@vueuse/metadata-9.13.0.tgz" + integrity sha1-vCWmza0bGpPDbOMBkRJNplIFOf8= + +"@vueuse/shared@9.13.0": + version "9.13.0" + resolved "http://10.107.103.115:8001/@vueuse/shared/download/@vueuse/shared-9.13.0.tgz" + integrity sha1-CJ/0zE4uekAV5XqPMuSznQljU7k= + dependencies: + vue-demi "*" + +"@webank/eslint-config-webank@0.4.2": + version "0.4.2" + resolved "http://10.107.103.115:8001/@webank/eslint-config-webank/download/@webank/eslint-config-webank-0.4.2.tgz" + integrity sha1-7F2FLCflof/1clNFaOiKqw1UOPY= + dependencies: + "@babel/eslint-parser" "^7.13.14" + "@babel/plugin-syntax-jsx" "^7.12.13" + confusing-browser-globals "^1.0.10" + eslint "^7.26.0" + eslint-plugin-angular "^4.0.1" + eslint-plugin-html "^6.1.2" + eslint-plugin-import "2.22.1" + eslint-plugin-node "^11.1.0" + eslint-plugin-vue "^7.16.0" + vue-eslint-parser "^7.10.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/ast/download/@webassemblyjs/ast-1.11.1.tgz" + integrity sha1-K/12fq4aaZb0Mv9+jX/HVnnAtqc= + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.11.1.tgz" + integrity sha1-9sYacF8P16auyqToGY8j2dwXnk8= + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.11.1.tgz" + integrity sha1-GmMZLYeI5cASgAump6RscFKI/RY= + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.11.1.tgz" + integrity sha1-gyqQDrREiEzemnytRn+BUA9eWrU= + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/helper-numbers/download/@webassemblyjs/helper-numbers-1.11.1.tgz" + integrity sha1-ZNgdohn7u6HjvRv8dPboxOEKYq4= + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.11.1.tgz" + integrity sha1-8ygkHkHnsZnQsgwY6IQpxEMyleE= + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.11.1.tgz" + integrity sha1-Ie4GWntjXzGec48N1zv72igcCXo= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.11.1.tgz" + integrity sha1-ljkp6bvQVwnn4SJDoJkYCBKZJhQ= + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.11.1.tgz" + integrity sha1-zoFLRVdOk9drrh+yZEq5zdlSeqU= + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.11.1.tgz" + integrity sha1-0fi3ZDaefG5rrjUOhU3smlnwo/8= + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.11.1.tgz" + integrity sha1-rSBuv0v5WgWM6YgKjAksXeyBk9Y= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.11.1.tgz" + integrity sha1-hsXqMEhJdZt9iMR6MvTwOa48j3Y= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.11.1.tgz" + integrity sha1-ZXtMIgL0zzs0X4pMZGHIwkGJhfI= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.11.1.tgz" + integrity sha1-hspzRTT0F+m9PGfHocddi+QfsZk= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "http://10.107.103.115:8001/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.11.1.tgz" + integrity sha1-0Mc77ajuxUJvEK6O9VzuXnCEwvA= + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "http://10.107.103.115:8001/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz" + integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "http://10.107.103.115:8001/@xtuc/long/download/@xtuc/long-4.2.2.tgz" + integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "http://10.107.103.115:8001/accepts/download/accepts-1.3.8.tgz" + integrity sha1-C/C+EltnAUrcsLCSHmLbe//hay4= + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "http://10.107.103.115:8001/acorn-import-assertions/download/acorn-import-assertions-1.8.0.tgz" + integrity sha1-uitZOc5iwjjbbZPYHJsRGym4Vek= + +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: + version "5.3.2" + resolved "http://10.107.103.115:8001/acorn-jsx/download/acorn-jsx-5.3.2.tgz" + integrity sha1-ftW7VZCLOy8bxVxq8WU7rafweTc= + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "http://10.107.103.115:8001/acorn-walk/download/acorn-walk-8.2.0.tgz" + integrity sha1-dBIQ8uJCZFRQiFOi9E0KuDt/acE= + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "http://10.107.103.115:8001/acorn/download/acorn-8.8.2.tgz" + integrity sha1-Gy8l2wKvllOZuXdrDCw5EnbTfEo= + +acorn@^7.1.1: + version "7.4.1" + resolved "http://10.107.103.115:8001/acorn/download/acorn-7.4.1.tgz" + integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= + +acorn@^7.4.0: + version "7.4.1" + resolved "http://10.107.103.115:8001/acorn/download/acorn-7.4.1.tgz" + integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo= + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/aggregate-error/download/aggregate-error-3.1.0.tgz" + integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/ajv-errors/download/ajv-errors-1.0.1.tgz" + integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/ajv-formats/download/ajv-formats-2.1.1.tgz" + integrity sha1-bmaUAGWet0lzu/LjMycYCgmWtSA= + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "http://10.107.103.115:8001/ajv-keywords/download/ajv-keywords-3.5.2.tgz" + integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/ajv-keywords/download/ajv-keywords-5.1.0.tgz" + integrity sha1-adTThaRzPNvqtElkoRcKiPh/DhY= + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1, ajv@>=5.0.0: + version "6.12.6" + resolved "http://10.107.103.115:8001/ajv/download/ajv-6.12.6.tgz" + integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0: + version "8.12.0" + resolved "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz" + integrity sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE= + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.12.0" + resolved "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz" + integrity sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE= + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.8.0, ajv@^8.8.2: + version "8.12.0" + resolved "http://10.107.103.115:8001/ajv/download/ajv-8.12.0.tgz" + integrity sha1-0aBScyPiL1NWLFZ8AJkVd9++GdE= + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "http://10.107.103.115:8001/ansi-colors/download/ansi-colors-3.2.4.tgz" + integrity sha1-46PaS/uubIapwoViXeEkojQCb78= + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "http://10.107.103.115:8001/ansi-colors/download/ansi-colors-4.1.3.tgz" + integrity sha1-N2ETQOsiQ+cMxgTK011jJw1IeBs= + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: + version "4.3.2" + resolved "http://10.107.103.115:8001/ansi-escapes/download/ansi-escapes-4.3.2.tgz" + integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= + dependencies: + type-fest "^0.21.3" + +ansi-html-community@0.0.8: + version "0.0.8" + resolved "http://10.107.103.115:8001/ansi-html-community/download/ansi-html-community-0.0.8.tgz" + integrity sha1-afvE1sy+OD+XNpNK40w/gpDxv0E= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-4.1.1.tgz" + integrity sha1-Fk2qyHqy1vbbOimHXi0XZlgtq+0= + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-5.0.1.tgz" + integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "http://10.107.103.115:8001/ansi-regex/download/ansi-regex-6.0.1.tgz" + integrity sha1-MYPjj66aZdfLXlOUXNWJfQJgoGo= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-3.2.1.tgz" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-4.3.0.tgz" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0: + version "6.2.1" + resolved "http://10.107.103.115:8001/ansi-styles/download/ansi-styles-6.2.1.tgz" + integrity sha1-DmIyDPmcIa//OzASGSVGqsv7BcU= + +any-promise@^1.0.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/any-promise/download/any-promise-1.3.0.tgz" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + +anymatch@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/anymatch/download/anymatch-2.0.0.tgz" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "http://10.107.103.115:8001/anymatch/download/anymatch-3.1.3.tgz" + integrity sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "http://10.107.103.115:8001/arg/download/arg-4.1.3.tgz" + integrity sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk= + +argparse@^1.0.7: + version "1.0.10" + resolved "http://10.107.103.115:8001/argparse/download/argparse-1.0.10.tgz" + integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/arr-diff/download/arr-diff-4.0.0.tgz" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/arr-flatten/download/arr-flatten-1.1.0.tgz" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/arr-union/download/arr-union-3.1.0.tgz" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "http://10.107.103.115:8001/array-flatten/download/array-flatten-2.1.2.tgz" + integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk= + +array-flatten@1.1.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/array-flatten/download/array-flatten-1.1.1.tgz" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-ify@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/array-ify/download/array-ify-1.0.0.tgz" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= + +array-includes@^3.1.1: + version "3.1.6" + resolved "http://10.107.103.115:8001/array-includes/download/array-includes-3.1.6.tgz" + integrity sha1-np5yDhlPGYJmup4Ywp5qmw5LIl8= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^1.0.1: + version "1.0.2" + resolved "http://10.107.103.115:8001/array-union/download/array-union-1.0.2.tgz" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/array-union/download/array-union-3.0.1.tgz" + integrity sha1-2lJjDTJ/i4jPv7V3KOKvXNm2uXU= + +array-uniq@^1.0.1: + version "1.0.3" + resolved "http://10.107.103.115:8001/array-uniq/download/array-uniq-1.0.3.tgz" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "http://10.107.103.115:8001/array-unique/download/array-unique-0.3.2.tgz" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.3.1" + resolved "http://10.107.103.115:8001/array.prototype.flat/download/array.prototype.flat-1.3.1.tgz" + integrity sha1-/8ZXanyj78L0ahQ7nR3am0s89eI= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/arrify/download/arrify-1.0.1.tgz" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@~2.0.3: + version "2.0.6" + resolved "http://10.107.103.115:8001/asap/download/asap-2.0.6.tgz" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.6" + resolved "http://10.107.103.115:8001/asn1/download/asn1-0.2.6.tgz" + integrity sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@^1.0.0, assert-plus@1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/assert-plus/download/assert-plus-1.0.0.tgz" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/assign-symbols/download/assign-symbols-1.0.0.tgz" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/astral-regex/download/astral-regex-2.0.0.tgz" + integrity sha1-SDFDxWeu7UeFdZwIZXhtx319LjE= + +async-each@^1.0.1: + version "1.0.3" + resolved "http://10.107.103.115:8001/async-each/download/async-each-1.0.3.tgz" + integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/async-limiter/download/async-limiter-1.0.1.tgz" + integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= + +async-validator@^4.0.7: + version "4.2.5" + resolved "http://10.107.103.115:8001/async-validator/download/async-validator-4.2.5.tgz" + integrity sha1-yW6jMypSFpnQr6rO7VEKVGVsYzk= + +async@^2.6.4: + version "2.6.4" + resolved "http://10.107.103.115:8001/async/download/async-2.6.4.tgz" + integrity sha1-cGt/9ghGZM1+rnE/b5ZUM7VQQiE= + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://10.107.103.115:8001/asynckit/download/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/at-least-node/download/at-least-node-1.0.0.tgz" + integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= + +atob@^2.1.2: + version "2.1.2" + resolved "http://10.107.103.115:8001/atob/download/atob-2.1.2.tgz" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +autoprefixer@^10.2.4: + version "10.4.13" + resolved "http://10.107.103.115:8001/autoprefixer/download/autoprefixer-10.4.13.tgz" + integrity sha1-tRNrWZMCCaMh6fo9yi58TSI+g6g= + dependencies: + browserslist "^4.21.4" + caniuse-lite "^1.0.30001426" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "http://10.107.103.115:8001/available-typed-arrays/download/available-typed-arrays-1.0.5.tgz" + integrity sha1-kvlWFlAQadB9EO2y/DfT4cZRI7c= + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://10.107.103.115:8001/aws-sign2/download/aws-sign2-0.7.0.tgz" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.12.0" + resolved "http://10.107.103.115:8001/aws4/download/aws4-1.12.0.tgz" + integrity sha1-zhydFDOJZ54lOzFCQeqapc7JgNM= + +axios@0.21.1: + version "0.21.1" + resolved "http://10.107.103.115:8001/axios/download/axios-0.21.1.tgz" + integrity sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg= + dependencies: + follow-redirects "^1.10.0" + +babel-loader@^8.2.2: + version "8.3.0" + resolved "http://10.107.103.115:8001/babel-loader/download/babel-loader-8.3.0.tgz" + integrity sha1-Ekk26EG6T+gXZ4bW/yit0fE01qg= + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-import@1.13.3: + version "1.13.3" + resolved "http://10.107.103.115:8001/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz" + integrity sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc= + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/runtime" "^7.0.0" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "http://10.107.103.115:8001/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.3.tgz" + integrity sha1-XRvTg20KGeG4S78tlkDMtvlRwSI= + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "http://10.107.103.115:8001/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.6.0.tgz" + integrity sha1-Vq2II3E36t5IWnG1L3Lb7VfGIwo= + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.4.1.tgz" + integrity sha1-OQ+Rw42QRzWS7UM1HoAanT4P10c= + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +babel-plugin-syntax-jsx@6.18.0: + version "6.18.0" + resolved "http://10.107.103.115:8001/babel-plugin-syntax-jsx/download/babel-plugin-syntax-jsx-6.18.0.tgz" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "http://10.107.103.115:8001/balanced-match/download/balanced-match-1.0.2.tgz" + integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= + +base@^0.11.1: + version "0.11.2" + resolved "http://10.107.103.115:8001/base/download/base-0.11.2.tgz" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "http://10.107.103.115:8001/base64-js/download/base64-js-1.5.1.tgz" + integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= + +batch@0.6.1: + version "0.6.1" + resolved "http://10.107.103.115:8001/batch/download/batch-0.6.1.tgz" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "http://10.107.103.115:8001/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "http://10.107.103.115:8001/big.js/download/big.js-5.2.2.tgz" + integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "http://10.107.103.115:8001/binary-extensions/download/binary-extensions-1.13.1.tgz" + integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/binary-extensions/download/binary-extensions-2.2.0.tgz" + integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= + +bl@^4.1.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/bl/download/bl-4.1.0.tgz" + integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@^1.19.0: + version "1.20.2" + resolved "http://10.107.103.115:8001/body-parser/download/body-parser-1.20.2.tgz" + integrity sha1-b+sOIcRyTQbef/ONo22tT1enR/0= + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@1.20.1: + version "1.20.1" + resolved "http://10.107.103.115:8001/body-parser/download/body-parser-1.20.1.tgz" + integrity sha1-sYEqiRLBlc03Gj7l5m+qIzilxmg= + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour@^3.5.0: + version "3.5.0" + resolved "http://10.107.103.115:8001/bonjour/download/bonjour-3.5.0.tgz" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/boolbase/download/boolbase-1.0.0.tgz" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "http://10.107.103.115:8001/brace-expansion/download/brace-expansion-1.1.11.tgz" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "http://10.107.103.115:8001/braces/download/braces-2.3.2.tgz" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/braces/download/braces-3.0.2.tgz" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5, "browserslist@>= 4.21.0": + version "4.21.5" + resolved "http://10.107.103.115:8001/browserslist/download/browserslist-4.21.5.tgz" + integrity sha1-dcXa5gBj7mQfl34A7dPPsvt69qc= + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "http://10.107.103.115:8001/buffer-from/download/buffer-from-1.1.2.tgz" + integrity sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U= + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "http://10.107.103.115:8001/buffer-indexof/download/buffer-indexof-1.1.1.tgz" + integrity sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow= + +buffer@^5.5.0: + version "5.7.1" + resolved "http://10.107.103.115:8001/buffer/download/buffer-5.7.1.tgz" + integrity sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA= + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bytes@3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/bytes/download/bytes-3.0.0.tgz" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.2: + version "3.1.2" + resolved "http://10.107.103.115:8001/bytes/download/bytes-3.1.2.tgz" + integrity sha1-iwvuuYYFrfGxKPpDhkA8AJ4CIaU= + +cache-base@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/cache-base/download/cache-base-1.0.1.tgz" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cachedir@2.3.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/cachedir/download/cachedir-2.3.0.tgz" + integrity sha1-DHWJKgUhmPCyHHwYBNgzHt/K4Og= + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/call-bind/download/call-bind-1.0.2.tgz" + integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/callsites/download/callsites-3.1.0.tgz" + integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + +camel-case@^4.1.2: + version "4.1.2" + resolved "http://10.107.103.115:8001/camel-case/download/camel-case-4.1.2.tgz" + integrity sha1-lygHKpVPgFIoIlpt7qazhGHhvVo= + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "http://10.107.103.115:8001/camelcase-keys/download/camelcase-keys-6.2.2.tgz" + integrity sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A= + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0: + version "5.3.1" + resolved "http://10.107.103.115:8001/camelcase/download/camelcase-5.3.1.tgz" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + +camelcase@^5.3.1: + version "5.3.1" + resolved "http://10.107.103.115:8001/camelcase/download/camelcase-5.3.1.tgz" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + +camelcase@^6.0.0: + version "6.3.0" + resolved "http://10.107.103.115:8001/camelcase/download/camelcase-6.3.0.tgz" + integrity sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/caniuse-api/download/caniuse-api-3.0.0.tgz" + integrity sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA= + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001426, caniuse-lite@^1.0.30001449: + version "1.0.30001456" + resolved "http://10.107.103.115:8001/caniuse-lite/download/caniuse-lite-1.0.30001456.tgz" + integrity sha1-c07B2/pPOr5uQ1t47PQNaOjDLOQ= + +caseless@~0.12.0: + version "0.12.0" + resolved "http://10.107.103.115:8001/caseless/download/caseless-0.12.0.tgz" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "http://10.107.103.115:8001/chalk/download/chalk-2.4.2.tgz" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/chalk/download/chalk-3.0.0.tgz" + integrity sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.1: + version "4.1.2" + resolved "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.2: + version "4.1.2" + resolved "http://10.107.103.115:8001/chalk/download/chalk-4.1.2.tgz" + integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "http://10.107.103.115:8001/chardet/download/chardet-0.7.0.tgz" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +chokidar@^2.1.8: + version "2.1.8" + resolved "http://10.107.103.115:8001/chokidar/download/chokidar-2.1.8.tgz" + integrity sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc= + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.5.2: + version "3.5.3" + resolved "http://10.107.103.115:8001/chokidar/download/chokidar-3.5.3.tgz" + integrity sha1-HPN8hwe5Mr0a8a4iwEMuKs0ZA70= + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "http://10.107.103.115:8001/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz" + integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= + +class-utils@^0.3.5: + version "0.3.6" + resolved "http://10.107.103.115:8001/class-utils/download/class-utils-0.3.6.tgz" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@^5.2.2: + version "5.3.2" + resolved "http://10.107.103.115:8001/clean-css/download/clean-css-5.3.2.tgz" + integrity sha1-cOzH1NQRSSH10pg0n/hqMamXUiQ= + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/clean-stack/download/clean-stack-2.2.0.tgz" + integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/cli-cursor/download/cli-cursor-3.1.0.tgz" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-highlight@^2.1.4: + version "2.1.11" + resolved "http://10.107.103.115:8001/cli-highlight/download/cli-highlight-2.1.11.tgz" + integrity sha1-SXNvpFLwqvT65YDjCssmgo0twb8= + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "http://10.107.103.115:8001/cli-spinners/download/cli-spinners-2.7.0.tgz" + integrity sha1-+BX9MLX56qwC22BMeiMe18sveXo= + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/cli-truncate/download/cli-truncate-2.1.0.tgz" + integrity sha1-w54ovwXtzeW+O5iZKiLe7Vork8c= + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/cli-truncate/download/cli-truncate-3.1.0.tgz" + integrity sha1-PyOrElNePXPoObtD5zyd5IfbE4k= + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/cli-width/download/cli-width-3.0.0.tgz" + integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= + +cliui@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/cliui/download/cliui-5.0.0.tgz" + integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^7.0.2, cliui@7.0.4: + version "7.0.4" + resolved "http://10.107.103.115:8001/cliui/download/cliui-7.0.4.tgz" + integrity sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "http://10.107.103.115:8001/cliui/download/cliui-8.0.1.tgz" + integrity sha1-DASwddsCy/5g3I5s8vVIaxo2CKo= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "http://10.107.103.115:8001/clone-deep/download/clone-deep-4.0.1.tgz" + integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "http://10.107.103.115:8001/clone/download/clone-1.0.4.tgz" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.2: + version "2.1.2" + resolved "http://10.107.103.115:8001/clone/download/clone-2.1.2.tgz" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/collection-visit/download/collection-visit-1.0.0.tgz" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "http://10.107.103.115:8001/color-convert/download/color-convert-1.9.3.tgz" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/color-convert/download/color-convert-2.0.1.tgz" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "http://10.107.103.115:8001/color-name/download/color-name-1.1.4.tgz" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +color-name@1.1.3: + version "1.1.3" + resolved "http://10.107.103.115:8001/color-name/download/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colord@^2.9.1: + version "2.9.3" + resolved "http://10.107.103.115:8001/colord/download/colord-2.9.3.tgz" + integrity sha1-T4zpGd5Fbx1cHDaMMH/iDz5Z+0M= + +colorette@^1.2.2: + version "1.4.0" + resolved "http://10.107.103.115:8001/colorette/download/colorette-1.4.0.tgz" + integrity sha1-UZD7uHJ2JZqGrXAL/yxtb6o/ykA= + +colorette@^2.0.16: + version "2.0.19" + resolved "http://10.107.103.115:8001/colorette/download/colorette-2.0.19.tgz" + integrity sha1-zfBE9HrUGg9LVrOg1bTm4aLVp5g= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "http://10.107.103.115:8001/combined-stream/download/combined-stream-1.0.8.tgz" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +commander@*, commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "http://10.107.103.115:8001/commander/download/commander-7.2.0.tgz" + integrity sha1-o2y1fQtQHOEI5NIFWaFQo5HZerc= + +commander@^2.20.0: + version "2.20.3" + resolved "http://10.107.103.115:8001/commander/download/commander-2.20.3.tgz" + integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= + +commander@^8.3.0: + version "8.3.0" + resolved "http://10.107.103.115:8001/commander/download/commander-8.3.0.tgz" + integrity sha1-SDfqGy2me5xhamevuw+v7lZ7ymY= + +commitizen@^4.0.3: + version "4.2.6" + resolved "http://10.107.103.115:8001/commitizen/download/commitizen-4.2.6.tgz" + integrity sha1-w1rznhy1/C3ohRHfgC2kNE3DyoA= + dependencies: + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.4" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.6" + strip-bom "4.0.0" + strip-json-comments "3.1.1" + +commitlint@15.0.0: + version "15.0.0" + resolved "http://10.107.103.115:8001/commitlint/download/commitlint-15.0.0.tgz" + integrity sha1-UeuL2qBLeA2xIgf8ViRcMqgnpjU= + dependencies: + "@commitlint/cli" "^15.0.0" + "@commitlint/types" "^15.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/commondir/download/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-func@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/compare-func/download/compare-func-2.0.0.tgz" + integrity sha1-+2XnXtvd/S5WhVTotbBf/3pR/LM= + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "http://10.107.103.115:8001/component-emitter/download/component-emitter-1.3.0.tgz" + integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + +compressible@~2.0.16: + version "2.0.18" + resolved "http://10.107.103.115:8001/compressible/download/compressible-2.0.18.tgz" + integrity sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o= + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "http://10.107.103.115:8001/compression/download/compression-1.7.4.tgz" + integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://10.107.103.115:8001/concat-map/download/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "http://10.107.103.115:8001/confusing-browser-globals/download/confusing-browser-globals-1.0.11.tgz" + integrity sha1-rkDptXzdORVAiigF69OlWFYI3IE= + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "http://10.107.103.115:8001/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz" + integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= + +consola@^2.15.3: + version "2.15.3" + resolved "http://10.107.103.115:8001/consola/download/consola-2.15.3.tgz" + integrity sha1-LhH5jWpL5x/3LgvfB70j4Sy2FVA= + +contains-path@^0.1.0: + version "0.1.0" + resolved "http://10.107.103.115:8001/contains-path/download/contains-path-0.1.0.tgz" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.4: + version "0.5.4" + resolved "http://10.107.103.115:8001/content-disposition/download/content-disposition-0.5.4.tgz" + integrity sha1-i4K076yCUSoCuwsdzsnSxejrW/4= + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "http://10.107.103.115:8001/content-type/download/content-type-1.0.5.tgz" + integrity sha1-i3cxYmVtHRCGeEyPI6VM5tc9eRg= + +conventional-changelog-angular@^5.0.11: + version "5.0.13" + resolved "http://10.107.103.115:8001/conventional-changelog-angular/download/conventional-changelog-angular-5.0.13.tgz" + integrity sha1-iWiF1juRSnDUk0tZ0v573hgysow= + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-conventionalcommits@^4.3.1: + version "4.6.3" + resolved "http://10.107.103.115:8001/conventional-changelog-conventionalcommits/download/conventional-changelog-conventionalcommits-4.6.3.tgz" + integrity sha1-B2VJD1ZCS0b2y025E1kC1uWjbcI= + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/conventional-commit-types/download/conventional-commit-types-3.0.0.tgz" + integrity sha1-fJIU5Y6uk+hd1m2/uv5+T/+iNls= + +conventional-commits-parser@^3.2.2: + version "3.2.4" + resolved "http://10.107.103.115:8001/conventional-commits-parser/download/conventional-commits-parser-3.2.4.tgz" + integrity sha1-p9O3d1iiAqmyKT0hEqjYBSx0CXI= + dependencies: + is-text-path "^1.0.1" + JSONStream "^1.0.4" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "http://10.107.103.115:8001/convert-source-map/download/convert-source-map-1.9.0.tgz" + integrity sha1-f6rmI1P7QhM2bQypg1jSLoNosF8= + +cookie-parser@^1.4.5: + version "1.4.6" + resolved "http://10.107.103.115:8001/cookie-parser/download/cookie-parser-1.4.6.tgz" + integrity sha1-OsOn01p6A7vH42UHOiYHSCQhRZQ= + dependencies: + cookie "0.4.1" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "http://10.107.103.115:8001/cookie-signature/download/cookie-signature-1.0.6.tgz" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/cookie/download/cookie-0.4.1.tgz" + integrity sha1-r9cT/ibr0hupXOth+agRblClN9E= + +cookie@0.5.0: + version "0.5.0" + resolved "http://10.107.103.115:8001/cookie/download/cookie-0.5.0.tgz" + integrity sha1-0fXXGt7GVYxY84mYfDZqpH6ZT4s= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "http://10.107.103.115:8001/copy-descriptor/download/copy-descriptor-0.1.1.tgz" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^10.2.4: + version "10.2.4" + resolved "http://10.107.103.115:8001/copy-webpack-plugin/download/copy-webpack-plugin-10.2.4.tgz" + integrity sha1-bIVL4/2q4iAl2jS5ESzPgcYzCP4= + dependencies: + fast-glob "^3.2.7" + glob-parent "^6.0.1" + globby "^12.0.2" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: + version "3.28.0" + resolved "http://10.107.103.115:8001/core-js-compat/download/core-js-compat-3.28.0.tgz" + integrity sha1-wIRW2FRginJkUwoq+igfrfIOzuY= + dependencies: + browserslist "^4.21.5" + +core-js@^3.27.0: + version "3.28.0" + resolved "http://10.107.103.115:8001/core-js/download/core-js-3.28.0.tgz" + integrity sha1-7YuemcJzh5/f/w7fx37nCaWADko= + +core-util-is@~1.0.0, core-util-is@1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/core-util-is/download/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^7.0.0, cosmiconfig@>=6: + version "7.1.0" + resolved "http://10.107.103.115:8001/cosmiconfig/download/cosmiconfig-7.1.0.tgz" + integrity sha1-FEO5r6WWtnAILqRsvY9qYrhGNfY= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "http://10.107.103.115:8001/create-require/download/create-require-1.1.1.tgz" + integrity sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM= + +crequire@^1.8.1: + version "1.8.1" + resolved "http://10.107.103.115:8001/crequire/download/crequire-1.8.1.tgz" + integrity sha1-rIHyBHhrXyARlOsWmM9EGxCktX0= + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-6.0.5.tgz" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + 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.2: + version "7.0.3" + resolved "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-7.0.3.tgz" + integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "http://10.107.103.115:8001/cross-spawn/download/cross-spawn-7.0.3.tgz" + integrity sha1-9zqFudXUHQRVUcF34ogtSshXKKY= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-declaration-sorter@^6.3.1: + version "6.3.1" + resolved "http://10.107.103.115:8001/css-declaration-sorter/download/css-declaration-sorter-6.3.1.tgz" + integrity sha1-vl4dcbepkkM/scVCx6G4NeRWguw= + +css-loader@^5.0.1: + version "5.2.7" + resolved "http://10.107.103.115:8001/css-loader/download/css-loader-5.2.7.tgz" + integrity sha1-m58RHt9vsr5dxiUlZEy8nCMgZK4= + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^3.0.0: + version "3.4.1" + resolved "http://10.107.103.115:8001/css-minimizer-webpack-plugin/download/css-minimizer-webpack-plugin-3.4.1.tgz" + integrity sha1-q3j3gc7ZGBmS/ntuTzQi52Qph48= + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "http://10.107.103.115:8001/css-select/download/css-select-4.3.0.tgz" + integrity sha1-23EpsoRmYv2GKM/ElquytZ5BUps= + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "http://10.107.103.115:8001/css-tree/download/css-tree-1.1.3.tgz" + integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0= + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1: + version "6.1.0" + resolved "http://10.107.103.115:8001/css-what/download/css-what-6.1.0.tgz" + integrity sha1-+17/z3bx3eosgb36pN5E55uscPQ= + +cssesc@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/cssesc/download/cssesc-3.0.0.tgz" + integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= + +cssnano-preset-default@^5.2.13: + version "5.2.13" + resolved "http://10.107.103.115:8001/cssnano-preset-default/download/cssnano-preset-default-5.2.13.tgz" + integrity sha1-5zU7DFeXXRvdl6yW5o5cG4xo6ZA= + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.3" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.1" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/cssnano-utils/download/cssnano-utils-3.1.0.tgz" + integrity sha1-lWhNCMkVEe38cNJjYzjKN+86aGE= + +cssnano@^5.0.6: + version "5.1.14" + resolved "http://10.107.103.115:8001/cssnano/download/cssnano-5.1.14.tgz" + integrity sha1-B7Cvbac2QSdv5abUV1dwLrri6wU= + dependencies: + cssnano-preset-default "^5.2.13" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/csso/download/csso-4.2.0.tgz" + integrity sha1-6jpWE0bo3J9UbW/r7dUBh884lSk= + dependencies: + css-tree "^1.1.2" + +csstype@^2.6.8: + version "2.6.21" + resolved "http://10.107.103.115:8001/csstype/download/csstype-2.6.21.tgz" + integrity sha1-LvuFt8xVyAAXxmpa18vZMf2jqQ4= + +csstype@^3.0.10: + version "3.1.1" + resolved "http://10.107.103.115:8001/csstype/download/csstype-3.1.1.tgz" + integrity sha1-hBtTLEXHWO5UahHVvXt7RzyMMLk= + +cz-conventional-changelog@3.3.0: + version "3.3.0" + resolved "http://10.107.103.115:8001/cz-conventional-changelog/download/cz-conventional-changelog-3.3.0.tgz" + integrity sha1-kkaUfJBAQUmz/iz37pGsrTt9ItI= + dependencies: + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" + +dargs@^7.0.0: + version "7.0.0" + resolved "http://10.107.103.115:8001/dargs/download/dargs-7.0.0.tgz" + integrity sha1-BAFcQd4Ly2nshAUPPZvgyvjW1cw= + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://10.107.103.115:8001/dashdash/download/dashdash-1.14.1.tgz" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-fns@^2.28.0, date-fns@2.28.0: + version "2.28.0" + resolved "http://10.107.103.115:8001/date-fns/download/date-fns-2.28.0.tgz" + integrity sha1-lXDWVvX8ExQ+UMl1o7a760bNCLI= + +dayjs@1.11.5: + version "1.11.5" + resolved "http://10.107.103.115:8001/dayjs/download/dayjs-1.11.5.tgz" + integrity sha1-AOjMYn8jH5SZwZs4r0n1bcCsXpM= + +debug@^2.2.0: + version "2.6.9" + resolved "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^2.3.3: + version "2.6.9" + resolved "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^2.6.9: + version "2.6.9" + resolved "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "http://10.107.103.115:8001/debug/download/debug-3.2.7.tgz" + integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o= + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.4" + resolved "http://10.107.103.115:8001/debug/download/debug-4.3.4.tgz" + integrity sha1-Exn2V5NX8jONMzfSzdSRS7XcyGU= + dependencies: + ms "2.1.2" + +debug@2.6.9: + version "2.6.9" + resolved "http://10.107.103.115:8001/debug/download/debug-2.6.9.tgz" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "http://10.107.103.115:8001/decamelize-keys/download/decamelize-keys-1.1.1.tgz" + integrity sha1-BKLVI7LxjYDQFYpDuJXVbf+NGdg= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/decamelize/download/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "http://10.107.103.115:8001/decode-uri-component/download/decode-uri-component-0.2.2.tgz" + integrity sha1-5p2+JdN5QRcd1UDgJMREzVGI4ek= + +dedent@0.7.0: + version "0.7.0" + resolved "http://10.107.103.115:8001/dedent/download/dedent-0.7.0.tgz" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/deep-equal/download/deep-equal-1.1.1.tgz" + integrity sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o= + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "http://10.107.103.115:8001/deep-is/download/deep-is-0.1.4.tgz" + integrity sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE= + +deepmerge@^1.5.2: + version "1.5.2" + resolved "http://10.107.103.115:8001/deepmerge/download/deepmerge-1.5.2.tgz" + integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M= + +deepmerge@^4.2.2: + version "4.3.0" + resolved "http://10.107.103.115:8001/deepmerge/download/deepmerge-4.3.0.tgz" + integrity sha1-ZUkYk+xHdW1EcZrlIODiYJIztZs= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/default-gateway/download/default-gateway-4.2.0.tgz" + integrity sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs= + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "http://10.107.103.115:8001/defaults/download/defaults-1.0.4.tgz" + integrity sha1-sLAgYsHiqmL/XZUo8PmLqpCXjXo= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "http://10.107.103.115:8001/define-properties/download/define-properties-1.2.0.tgz" + integrity sha1-UpiFcGcMnqzt2AZPSpkPJAWEm9U= + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "http://10.107.103.115:8001/define-property/download/define-property-0.2.5.tgz" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/define-property/download/define-property-1.0.0.tgz" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/define-property/download/define-property-2.0.2.tgz" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "http://10.107.103.115:8001/del/download/del-4.1.1.tgz" + integrity sha1-no8RciLqRKMf86FWwEm5kFKp8LQ= + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/delayed-stream/download/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "http://10.107.103.115:8001/depd/download/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +depd@2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/depd/download/depd-2.0.0.tgz" + integrity sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8= + +destroy@1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/destroy/download/destroy-1.2.0.tgz" + integrity sha1-SANzVQmti+VSk0xn32FPlOZvoBU= + +detect-file@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/detect-file/download/detect-file-1.0.0.tgz" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-indent@6.1.0: + version "6.1.0" + resolved "http://10.107.103.115:8001/detect-indent/download/detect-indent-6.1.0.tgz" + integrity sha1-WSSF67v2s7GrK+F1yDk9BMoNV+Y= + +detect-node@^2.0.4: + version "2.1.0" + resolved "http://10.107.103.115:8001/detect-node/download/detect-node-2.1.0.tgz" + integrity sha1-yccHdaScPQO8LAbZpzvlUPl4+LE= + +diff@^4.0.1: + version "4.0.2" + resolved "http://10.107.103.115:8001/diff/download/diff-4.0.2.tgz" + integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + +dir-glob@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/dir-glob/download/dir-glob-3.0.1.tgz" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/dns-equal/download/dns-equal-1.0.0.tgz" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "http://10.107.103.115:8001/dns-packet/download/dns-packet-1.3.4.tgz" + integrity sha1-40VQZYJKJQe6iGxVqJljuxB97G8= + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/dns-txt/download/dns-txt-2.0.2.tgz" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/doctrine/download/doctrine-3.0.0.tgz" + integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= + dependencies: + esutils "^2.0.2" + +doctrine@1.5.0: + version "1.5.0" + resolved "http://10.107.103.115:8001/doctrine/download/doctrine-1.5.0.tgz" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "http://10.107.103.115:8001/dom-converter/download/dom-converter-0.2.0.tgz" + integrity sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g= + dependencies: + utila "~0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "http://10.107.103.115:8001/dom-serializer/download/dom-serializer-1.4.1.tgz" + integrity sha1-3l1Bsa6ikCFdxFptrorc8dMuLTA= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/domelementtype/download/domelementtype-2.3.0.tgz" + integrity sha1-XEXo6GmVJiYzHXqrMm0B2vZdWJ0= + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.1: + version "4.3.1" + resolved "http://10.107.103.115:8001/domhandler/download/domhandler-4.3.1.tgz" + integrity sha1-jXkgM0FvWdaLwDpap7AYwcqJJ5w= + dependencies: + domelementtype "^2.2.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "http://10.107.103.115:8001/domutils/download/domutils-2.8.0.tgz" + integrity sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU= + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "http://10.107.103.115:8001/dot-case/download/dot-case-3.0.4.tgz" + integrity sha1-mytnDQCkMWZ6inW6Kc0bmICc51E= + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "http://10.107.103.115:8001/dot-prop/download/dot-prop-5.3.0.tgz" + integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + dependencies: + is-obj "^2.0.0" + +dotenv@8.2.0: + version "8.2.0" + resolved "http://10.107.103.115:8001/dotenv/download/dotenv-8.2.0.tgz" + integrity sha1-l+YZJZradQ7qPk6j4mvO6lQksWo= + +duplexer@^0.1.2: + version "0.1.2" + resolved "http://10.107.103.115:8001/duplexer/download/duplexer-0.1.2.tgz" + integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY= + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "http://10.107.103.115:8001/eastasianwidth/download/eastasianwidth-0.2.0.tgz" + integrity sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "http://10.107.103.115:8001/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +echarts@5.2.2: + version "5.2.2" + resolved "http://10.107.103.115:8001/echarts/download/echarts-5.2.2.tgz" + integrity sha1-7DyLKhUcu6cbo8LHz5svIEfOQ3A= + dependencies: + tslib "2.3.0" + zrender "5.2.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/ee-first/download/ee-first-1.1.1.tgz" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.4.284: + version "1.4.302" + resolved "http://10.107.103.115:8001/electron-to-chromium/download/electron-to-chromium-1.4.302.tgz" + integrity sha1-V3Bkb/5wUWd7SJImFEqtk4bUIPI= + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-7.0.3.tgz" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-8.0.0.tgz" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "http://10.107.103.115:8001/emoji-regex/download/emoji-regex-9.2.2.tgz" + integrity sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/emojis-list/download/emojis-list-3.0.0.tgz" + integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/encodeurl/download/encodeurl-1.0.2.tgz" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "http://10.107.103.115:8001/end-of-stream/download/end-of-stream-1.4.4.tgz" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "http://10.107.103.115:8001/enhanced-resolve/download/enhanced-resolve-5.12.0.tgz" + integrity sha1-MA4ckCKPW1cMTTW6vyY/bacVVjQ= + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5, enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": + version "2.3.6" + resolved "http://10.107.103.115:8001/enquirer/download/enquirer-2.3.6.tgz" + integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00= + dependencies: + ansi-colors "^4.1.1" + +entities@^2.0.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/entities/download/entities-2.2.0.tgz" + integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= + +entities@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/entities/download/entities-3.0.1.tgz" + integrity sha1-K4h8piWF6W2zkDSC0zbBAGwwAdQ= + +envinfo@^7.7.3: + version "7.8.1" + resolved "http://10.107.103.115:8001/envinfo/download/envinfo-7.8.1.tgz" + integrity sha1-Bjd+Pl9NN5/qesWS1a2JJ+DE1HU= + +errno@^0.1.1, errno@^0.1.3: + version "0.1.8" + resolved "http://10.107.103.115:8001/errno/download/errno-0.1.8.tgz" + integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "http://10.107.103.115:8001/error-ex/download/error-ex-1.3.2.tgz" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "http://10.107.103.115:8001/error-stack-parser/download/error-stack-parser-2.1.4.tgz" + integrity sha1-IpywHNv6hEQL+pGHYoW5RoAYgoY= + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.1" + resolved "http://10.107.103.115:8001/es-abstract/download/es-abstract-1.21.1.tgz" + integrity sha1-5hBaCZlnwIN3gwoMnLWJ1XDdhsY= + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "http://10.107.103.115:8001/es-module-lexer/download/es-module-lexer-0.9.3.tgz" + integrity sha1-bxPbAMw4QXE32vdDZvU1yOtDjxk= + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/es-set-tostringtag/download/es-set-tostringtag-2.0.1.tgz" + integrity sha1-M41QL29nQwHXELgMhZLeihXwnNg= + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/es-shim-unscopables/download/es-shim-unscopables-1.0.0.tgz" + integrity sha1-cC5jIZMgHj7fhxNjXQg9N45RAkE= + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "http://10.107.103.115:8001/es-to-primitive/download/es-to-primitive-1.2.1.tgz" + integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "http://10.107.103.115:8001/escalade/download/escalade-3.1.1.tgz" + integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= + +escape-html@~1.0.3: + version "1.0.3" + resolved "http://10.107.103.115:8001/escape-html/download/escape-html-1.0.3.tgz" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://10.107.103.115:8001/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz" + integrity sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ= + +eslint-import-resolver-node@^0.3.4: + version "0.3.7" + resolved "http://10.107.103.115:8001/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.7.tgz" + integrity sha1-g7N1GH1BIyShlj2E+mZDd6I+tNc= + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-module-utils@^2.6.0: + version "2.7.4" + resolved "http://10.107.103.115:8001/eslint-module-utils/download/eslint-module-utils-2.7.4.tgz" + integrity sha1-Tz5BEWqvE6IHkiYeYdOi5+BYOXQ= + dependencies: + debug "^3.2.7" + +eslint-plugin-angular@^4.0.1: + version "4.1.0" + resolved "http://10.107.103.115:8001/eslint-plugin-angular/download/eslint-plugin-angular-4.1.0.tgz" + integrity sha1-U9A9gp7f9Q1RfoH4YnguPvpZGVM= + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "http://10.107.103.115:8001/eslint-plugin-es/download/eslint-plugin-es-3.0.1.tgz" + integrity sha1-dafN/czdwFiZNK7rOEF18iHFeJM= + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-html@^6.1.2: + version "6.2.0" + resolved "http://10.107.103.115:8001/eslint-plugin-html/download/eslint-plugin-html-6.2.0.tgz" + integrity sha1-cVvAC1C70NmW4o+VPCiaXr7GnUM= + dependencies: + htmlparser2 "^7.1.2" + +eslint-plugin-import@2.22.1: + version "2.22.1" + resolved "http://10.107.103.115:8001/eslint-plugin-import/download/eslint-plugin-import-2.22.1.tgz" + integrity sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI= + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "http://10.107.103.115:8001/eslint-plugin-node/download/eslint-plugin-node-11.1.0.tgz" + integrity sha1-yVVEQW7kraJnQKMEdO78VALcZx0= + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-vue@^7.16.0: + version "7.20.0" + resolved "http://10.107.103.115:8001/eslint-plugin-vue/download/eslint-plugin-vue-7.20.0.tgz" + integrity sha1-mMIYhaa/3wcTw6kpV6Wv6q7tklM= + dependencies: + eslint-utils "^2.1.0" + natural-compare "^1.4.0" + semver "^6.3.0" + vue-eslint-parser "^7.10.0" + +eslint-scope@^5.1.1, eslint-scope@5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/eslint-scope/download/eslint-scope-5.1.1.tgz" + integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/eslint-utils/download/eslint-utils-2.1.0.tgz" + integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz" + integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= + +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz" + integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz" + integrity sha1-9lMoJZMFknOSyTjtROsKXJsr0wM= + +"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", eslint@^7.26.0, "eslint@^7.5.0 || ^8.0.0", eslint@>=4.19.1, eslint@>=5.0.0, eslint@>=5.16.0: + version "7.32.0" + resolved "http://10.107.103.115:8001/eslint/download/eslint-7.32.0.tgz" + integrity sha1-xtMooUvj+wjI0dIeEsAv23oqgS0= + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.2.1: + version "6.2.1" + resolved "http://10.107.103.115:8001/espree/download/espree-6.2.1.tgz" + integrity sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o= + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "http://10.107.103.115:8001/espree/download/espree-7.3.1.tgz" + integrity sha1-8t8zC3Usb1UBn4vYm3ZgA5wbu7Y= + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "http://10.107.103.115:8001/esprima/download/esprima-4.0.1.tgz" + integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + +esquery@^1.4.0: + version "1.4.2" + resolved "http://10.107.103.115:8001/esquery/download/esquery-1.4.2.tgz" + integrity sha1-xtP+4F3WZYCOKthwYx8iH1YXsdE= + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/esrecurse/download/esrecurse-4.3.0.tgz" + integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "http://10.107.103.115:8001/estraverse/download/estraverse-4.3.0.tgz" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + +estraverse@^5.1.0: + version "5.3.0" + resolved "http://10.107.103.115:8001/estraverse/download/estraverse-5.3.0.tgz" + integrity sha1-LupSkHAvJquP5TcDcP+GyWXSESM= + +estraverse@^5.2.0: + version "5.3.0" + resolved "http://10.107.103.115:8001/estraverse/download/estraverse-5.3.0.tgz" + integrity sha1-LupSkHAvJquP5TcDcP+GyWXSESM= + +estree-walker@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/estree-walker/download/estree-walker-2.0.2.tgz" + integrity sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw= + +esutils@^2.0.2: + version "2.0.3" + resolved "http://10.107.103.115:8001/esutils/download/esutils-2.0.3.tgz" + integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + +etag@~1.8.1: + version "1.8.1" + resolved "http://10.107.103.115:8001/etag/download/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "http://10.107.103.115:8001/eventemitter3/download/eventemitter3-4.0.7.tgz" + integrity sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8= + +events@^3.2.0: + version "3.3.0" + resolved "http://10.107.103.115:8001/events/download/events-3.3.0.tgz" + integrity sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA= + +eventsource@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/eventsource/download/eventsource-2.0.2.tgz" + integrity sha1-dt/MApMPsv8zlSC20pDaVzqehQg= + +execa@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/execa/download/execa-1.0.0.tgz" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "http://10.107.103.115:8001/execa/download/execa-5.1.1.tgz" + integrity sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0= + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +execa@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/execa/download/execa-5.1.1.tgz" + integrity sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0= + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "http://10.107.103.115:8001/expand-brackets/download/expand-brackets-2.1.4.tgz" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/expand-tilde/download/expand-tilde-2.0.2.tgz" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.18.2" + resolved "http://10.107.103.115:8001/express/download/express-4.18.2.tgz" + integrity sha1-P6vggpbpMMeWwZ48UWl5OGup/Vk= + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-2.0.1.tgz" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/extend-shallow/download/extend-shallow-3.0.2.tgz" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/extend/download/extend-3.0.2.tgz" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^3.0.3: + version "3.1.0" + resolved "http://10.107.103.115:8001/external-editor/download/external-editor-3.1.0.tgz" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "http://10.107.103.115:8001/extglob/download/extglob-2.0.4.tgz" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@^1.2.0, extsprintf@1.3.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/extsprintf/download/extsprintf-1.3.0.tgz" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "http://10.107.103.115:8001/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz" + integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= + +fast-glob@^3.2.7: + version "3.2.12" + resolved "http://10.107.103.115:8001/fast-glob/download/fast-glob-3.2.12.tgz" + integrity sha1-fznsmcLmqwMDNxQtqeDBjzevroA= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz" + integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "http://10.107.103.115:8001/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.13.0" + resolved "http://10.107.103.115:8001/fastq/download/fastq-1.13.0.tgz" + integrity sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw= + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3, faye-websocket@^0.11.4: + version "0.11.4" + resolved "http://10.107.103.115:8001/faye-websocket/download/faye-websocket-0.11.4.tgz" + integrity sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo= + dependencies: + websocket-driver ">=0.5.1" + +figures@^3.0.0: + version "3.2.0" + resolved "http://10.107.103.115:8001/figures/download/figures-3.2.0.tgz" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "http://10.107.103.115:8001/file-entry-cache/download/file-entry-cache-6.0.1.tgz" + integrity sha1-IRst2WWcsDlLBz5zI6w8kz1SICc= + dependencies: + flat-cache "^3.0.4" + +file-loader@*, file-loader@^6.2.0: + version "6.2.0" + resolved "http://10.107.103.115:8001/file-loader/download/file-loader-6.2.0.tgz" + integrity sha1-uu98+OGEDfMl5DkLRISHlIDuvk0= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +fill-range@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/fill-range/download/fill-range-4.0.0.tgz" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "http://10.107.103.115:8001/fill-range/download/fill-range-7.0.1.tgz" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/finalhandler/download/finalhandler-1.2.0.tgz" + integrity sha1-fSP+VzGyB7RkDk/NAK7B+SB6ezI= + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/find-cache-dir/download/find-cache-dir-2.1.0.tgz" + integrity sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc= + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "http://10.107.103.115:8001/find-cache-dir/download/find-cache-dir-3.3.2.tgz" + integrity sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks= + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-node-modules@^2.1.2: + version "2.1.3" + resolved "http://10.107.103.115:8001/find-node-modules/download/find-node-modules-2.1.3.tgz" + integrity sha1-PJds/yyinulLT56vxhOYf8TA7kQ= + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-root@1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/find-root/download/find-root-1.1.0.tgz" + integrity sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= + +find-up@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/find-up/download/find-up-2.1.0.tgz" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/find-up/download/find-up-3.0.0.tgz" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/find-up/download/find-up-4.1.0.tgz" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/find-up/download/find-up-4.1.0.tgz" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/find-up/download/find-up-5.0.0.tgz" + integrity sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw= + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/findup-sync/download/findup-sync-4.0.0.tgz" + integrity sha1-lWyc3egEBSuIG0KFEpBcSl8s3vA= + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^4.0.2" + resolve-dir "^1.0.1" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "http://10.107.103.115:8001/flat-cache/download/flat-cache-3.0.4.tgz" + integrity sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE= + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "http://10.107.103.115:8001/flatted/download/flatted-3.2.7.tgz" + integrity sha1-YJ85IHy2FLidB2W0d8stQ3+/l4c= + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.15.2" + resolved "http://10.107.103.115:8001/follow-redirects/download/follow-redirects-1.15.2.tgz" + integrity sha1-tGCGQUS6Y/JoEJbydMTlcCbaLBM= + +for-each@^0.3.3: + version "0.3.3" + resolved "http://10.107.103.115:8001/for-each/download/for-each-0.3.3.tgz" + integrity sha1-abRH6IoKXTLD5whPPxcQA0shN24= + dependencies: + is-callable "^1.1.3" + +for-in@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/for-in/download/for-in-1.0.2.tgz" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://10.107.103.115:8001/forever-agent/download/forever-agent-0.6.1.tgz" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "http://10.107.103.115:8001/form-data/download/form-data-2.3.3.tgz" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "http://10.107.103.115:8001/forwarded/download/forwarded-0.2.0.tgz" + integrity sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE= + +fraction.js@^4.2.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/fraction.js/download/fraction.js-4.2.0.tgz" + integrity sha1-RI5RCaMTo1J/WjqyEZ7Ezw4OKVA= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "http://10.107.103.115:8001/fragment-cache/download/fragment-cache-0.2.1.tgz" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "http://10.107.103.115:8001/fresh/download/fresh-0.5.2.tgz" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-extra@^10.0.0: + version "10.1.0" + resolved "http://10.107.103.115:8001/fs-extra/download/fs-extra-10.1.0.tgz" + integrity sha1-Aoc8+8QITd4SfqpfmQXu8jJdGr8= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@9.1.0: + version "9.1.0" + resolved "http://10.107.103.115:8001/fs-extra/download/fs-extra-9.1.0.tgz" + integrity sha1-WVRGDHZKjaIJS6NVS/g55rmnyG0= + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/fs.realpath/download/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/function-bind/download/function-bind-1.1.1.tgz" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "http://10.107.103.115:8001/function.prototype.name/download/function.prototype.name-1.1.5.tgz" + integrity sha1-zOBQX+H/uAUD5vnkbMZORqEqliE= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "http://10.107.103.115:8001/functions-have-names/download/functions-have-names-1.2.3.tgz" + integrity sha1-BAT+TuK6L2B/Dg7DyAuumUEzuDQ= + +gar@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/gar/download/gar-1.0.4.tgz" + integrity sha1-93e8fbQlwFcv3rUmdhcsoa6YiLg= + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "http://10.107.103.115:8001/gensync/download/gensync-1.0.0-beta.2.tgz" + integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "http://10.107.103.115:8001/get-caller-file/download/get-caller-file-2.0.5.tgz" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-folder-size@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/get-folder-size/download/get-folder-size-2.0.1.tgz" + integrity sha1-P+BSTdO60FJX7xMRMxQXvNAgpJc= + dependencies: + gar "^1.0.4" + tiny-each-async "2.0.3" + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.2.0" + resolved "http://10.107.103.115:8001/get-intrinsic/download/get-intrinsic-1.2.0.tgz" + integrity sha1-etHcBTXzopBLugdXcnY+UFH20F8= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-stream@^4.0.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/get-stream/download/get-stream-4.1.0.tgz" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "http://10.107.103.115:8001/get-stream/download/get-stream-6.0.1.tgz" + integrity sha1-omLY7vZ6ztV8KFKtYWdSakPL97c= + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/get-symbol-description/download/get-symbol-description-1.0.0.tgz" + integrity sha1-f9uByQAQH71WTdXxowr1qtweWNY= + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "http://10.107.103.115:8001/get-value/download/get-value-2.0.6.tgz" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "http://10.107.103.115:8001/getpass/download/getpass-0.1.7.tgz" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^2.0.0: + version "2.0.11" + resolved "http://10.107.103.115:8001/git-raw-commits/download/git-raw-commits-2.0.11.tgz" + integrity sha1-vDV2Y4Bx0YZV4cxg1/UkkgAI1yM= + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/glob-parent/download/glob-parent-3.1.0.tgz" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "http://10.107.103.115:8001/glob-parent/download/glob-parent-5.1.2.tgz" + integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "http://10.107.103.115:8001/glob-parent/download/glob-parent-6.0.2.tgz" + integrity sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM= + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/glob-to-regexp/download/glob-to-regexp-0.4.1.tgz" + integrity sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4= + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.7, glob@^7.2.0, glob@7.2.3: + version "7.2.3" + resolved "http://10.107.103.115:8001/glob/download/glob-7.2.3.tgz" + integrity sha1-uN8PuAK7+o6JvR2Ti04WV47UTys= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.1: + version "0.1.1" + resolved "http://10.107.103.115:8001/global-dirs/download/global-dirs-0.1.1.tgz" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + +global-modules@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/global-modules/download/global-modules-1.0.0.tgz" + integrity sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o= + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "http://10.107.103.115:8001/global-prefix/download/global-prefix-1.0.2.tgz" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.12.0" + resolved "http://10.107.103.115:8001/globals/download/globals-11.12.0.tgz" + integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + +globals@^13.6.0: + version "13.20.0" + resolved "http://10.107.103.115:8001/globals/download/globals-13.20.0.tgz" + integrity sha1-6idqHlCP/U8WEoiPnRutHicXv4I= + dependencies: + type-fest "^0.20.2" + +globals@^13.9.0: + version "13.20.0" + resolved "http://10.107.103.115:8001/globals/download/globals-13.20.0.tgz" + integrity sha1-6idqHlCP/U8WEoiPnRutHicXv4I= + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "http://10.107.103.115:8001/globalthis/download/globalthis-1.0.3.tgz" + integrity sha1-WFKIKlK4DcMBsGYCc+HtCC8LbM8= + dependencies: + define-properties "^1.1.3" + +globby@^12.0.2: + version "12.2.0" + resolved "http://10.107.103.115:8001/globby/download/globby-12.2.0.tgz" + integrity sha1-KrgEa0+6T/bu3oNbKfZ4+Q49PCI= + dependencies: + array-union "^3.0.1" + dir-glob "^3.0.1" + fast-glob "^3.2.7" + ignore "^5.1.9" + merge2 "^1.4.1" + slash "^4.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "http://10.107.103.115:8001/globby/download/globby-6.1.0.tgz" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/gopd/download/gopd-1.0.1.tgz" + integrity sha1-Kf923mnax0ibfAkYpXiOVkd8Myw= + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.10" + resolved "http://10.107.103.115:8001/graceful-fs/download/graceful-fs-4.2.10.tgz" + integrity sha1-FH06AG2kyjzhRyjHrvwofDZ9emw= + +gzip-size@^6.0.0: + version "6.0.0" + resolved "http://10.107.103.115:8001/gzip-size/download/gzip-size-6.0.0.tgz" + integrity sha1-BlNn/VDCOcBnHLy61b4+LusQ5GI= + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/handle-thing/download/handle-thing-2.0.1.tgz" + integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/har-schema/download/har-schema-2.0.0.tgz" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "http://10.107.103.115:8001/har-validator/download/har-validator-5.1.5.tgz" + integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/hard-rejection/download/hard-rejection-2.1.0.tgz" + integrity sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM= + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/has-bigints/download/has-bigints-1.0.2.tgz" + integrity sha1-CHG9Pj1RYm9soJZmaLo11WAtbqo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/has-flag/download/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/has-flag/download/has-flag-4.0.0.tgz" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/has-property-descriptors/download/has-property-descriptors-1.0.0.tgz" + integrity sha1-YQcIYAYG02lh7QTBlhk7amB/qGE= + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/has-proto/download/has-proto-1.0.1.tgz" + integrity sha1-GIXBMFU4lYr/Rp/vN5N8InlUCOA= + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "http://10.107.103.115:8001/has-symbols/download/has-symbols-1.0.3.tgz" + integrity sha1-u3ssQ0klHc6HsSX3vfh0qnyLOfg= + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/has-tostringtag/download/has-tostringtag-1.0.0.tgz" + integrity sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU= + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "http://10.107.103.115:8001/has-value/download/has-value-0.3.1.tgz" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/has-value/download/has-value-1.0.0.tgz" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "http://10.107.103.115:8001/has-values/download/has-values-0.1.4.tgz" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/has-values/download/has-values-1.0.0.tgz" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "http://10.107.103.115:8001/has/download/has-1.0.3.tgz" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +hash-sum@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/hash-sum/download/hash-sum-2.0.0.tgz" + integrity sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo= + +he@^1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/he/download/he-1.2.0.tgz" + integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= + +highlight.js@^10.7.1: + version "10.7.3" + resolved "http://10.107.103.115:8001/highlight.js/download/highlight.js-10.7.3.tgz" + integrity sha1-aXJy45kTVuQMPKxWanTu9oF1ZTE= + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "http://10.107.103.115:8001/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz" + integrity sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg= + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "http://10.107.103.115:8001/hosted-git-info/download/hosted-git-info-2.8.9.tgz" + integrity sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k= + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "http://10.107.103.115:8001/hosted-git-info/download/hosted-git-info-4.1.0.tgz" + integrity sha1-gnuChn6f8cjQxNnVOIA5fSyG0iQ= + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "http://10.107.103.115:8001/hpack.js/download/hpack.js-2.1.6.tgz" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^1.3.1: + version "1.4.0" + resolved "http://10.107.103.115:8001/html-entities/download/html-entities-1.4.0.tgz" + integrity sha1-z70bAdKvr5rcobEK59/6uYxx0tw= + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "http://10.107.103.115:8001/html-minifier-terser/download/html-minifier-terser-6.1.0.tgz" + integrity sha1-v8gYk0zAeRj2s2afV3Ts39SPMqs= + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.1.0: + version "3.2.0" + resolved "http://10.107.103.115:8001/html-tags/download/html-tags-3.2.0.tgz" + integrity sha1-27NRjSC3JlJOTdQ945frCpVyaWE= + +html-webpack-plugin@^5.0.0: + version "5.5.0" + resolved "http://10.107.103.115:8001/html-webpack-plugin/download/html-webpack-plugin-5.5.0.tgz" + integrity sha1-w5EZNvV2gcH59Ni2jBWM2d/lL1A= + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +html-webpack-tags-plugin@^3.0.0: + version "3.0.2" + resolved "http://10.107.103.115:8001/html-webpack-tags-plugin/download/html-webpack-tags-plugin-3.0.2.tgz" + integrity sha1-7vxmAORbNmBej5G71Jf8f09tLYw= + dependencies: + glob "^7.2.0" + minimatch "^3.0.4" + slash "^3.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "http://10.107.103.115:8001/htmlparser2/download/htmlparser2-6.1.0.tgz" + integrity sha1-xNditsM3GgXb5l6UrkOp+EX7j7c= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^7.1.2: + version "7.2.0" + resolved "http://10.107.103.115:8001/htmlparser2/download/htmlparser2-7.2.0.tgz" + integrity sha1-iBfN6ji7wyQ5KpCxmQkI6Bpl9aU= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "http://10.107.103.115:8001/http-deceiver/download/http-deceiver-1.2.7.tgz" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@~1.6.2: + version "1.6.3" + resolved "http://10.107.103.115:8001/http-errors/download/http-errors-1.6.3.tgz" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/http-errors/download/http-errors-2.0.0.tgz" + integrity sha1-t3dKFIbvc892Z6ya4IWMASxXudM= + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "http://10.107.103.115:8001/http-parser-js/download/http-parser-js-0.5.8.tgz" + integrity sha1-ryMJDZrE4kVz3m9q7MnYSki/IOM= + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "http://10.107.103.115:8001/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz" + integrity sha1-GDx9xKoUeRUDBkmMIQza+WCApDo= + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "http://10.107.103.115:8001/http-proxy/download/http-proxy-1.18.1.tgz" + integrity sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk= + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/http-signature/download/http-signature-1.2.0.tgz" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/human-signals/download/human-signals-2.1.0.tgz" + integrity sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA= + +husky@7.0.4: + version "7.0.4" + resolved "http://10.107.103.115:8001/husky/download/husky-7.0.4.tgz" + integrity sha1-JCBIJF3EnI+xvwzHz7mN1yJTFTU= + +iconv-lite@^0.4.24, iconv-lite@0.4.24: + version "0.4.24" + resolved "http://10.107.103.115:8001/iconv-lite/download/iconv-lite-0.4.24.tgz" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/icss-utils/download/icss-utils-5.1.0.tgz" + integrity sha1-xr5oWKvQE9do6YNmrkfiXViHsa4= + +ieee754@^1.1.13: + version "1.2.1" + resolved "http://10.107.103.115:8001/ieee754/download/ieee754-1.2.1.tgz" + integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= + +ignore@^4.0.6: + version "4.0.6" + resolved "http://10.107.103.115:8001/ignore/download/ignore-4.0.6.tgz" + integrity sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw= + +ignore@^5.1.1, ignore@^5.1.9: + version "5.2.4" + resolved "http://10.107.103.115:8001/ignore/download/ignore-5.2.4.tgz" + integrity sha1-opHAxheP8blgvv5H/N7DAWdKYyQ= + +image-size@~0.5.0: + version "0.5.5" + resolved "http://10.107.103.115:8001/image-size/download/image-size-0.5.5.tgz" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "http://10.107.103.115:8001/import-fresh/download/import-fresh-3.3.0.tgz" + integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/import-local/download/import-local-2.0.0.tgz" + integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://10.107.103.115:8001/imurmurhash/download/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/indent-string/download/indent-string-4.0.0.tgz" + integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + +inflight@^1.0.4: + version "1.0.6" + resolved "http://10.107.103.115:8001/inflight/download/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "http://10.107.103.115:8001/inherits/download/inherits-2.0.4.tgz" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +inherits@2.0.3: + version "2.0.3" + resolved "http://10.107.103.115:8001/inherits/download/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4: + version "1.3.8" + resolved "http://10.107.103.115:8001/ini/download/ini-1.3.8.tgz" + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= + +inquirer@8.2.4: + version "8.2.4" + resolved "http://10.107.103.115:8001/inquirer/download/inquirer-8.2.4.tgz" + integrity sha1-3b/obKL2dkmmfapvEFHBKPaE8LQ= + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/internal-ip/download/internal-ip-4.3.0.tgz" + integrity sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc= + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/internal-slot/download/internal-slot-1.0.4.tgz" + integrity sha1-hVHnuvdKemul90nPsWqmByLw1vM= + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + side-channel "^1.0.4" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/ip-regex/download/ip-regex-2.1.0.tgz" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.8" + resolved "http://10.107.103.115:8001/ip/download/ip-1.1.8.tgz" + integrity sha1-rgWUj2sHVDXtMweszgRinajNv0g= + +ipaddr.js@^1.9.0, ipaddr.js@1.9.1: + version "1.9.1" + resolved "http://10.107.103.115:8001/ipaddr.js/download/ipaddr.js-1.9.1.tgz" + integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "http://10.107.103.115:8001/is-absolute-url/download/is-absolute-url-3.0.3.tgz" + integrity sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "http://10.107.103.115:8001/is-arguments/download/is-arguments-1.1.1.tgz" + integrity sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/is-array-buffer/download/is-array-buffer-3.0.1.tgz" + integrity sha1-3rHbT8rkgwjVTvJEJwbAOTmXBSo= + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://10.107.103.115:8001/is-arrayish/download/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.4" + resolved "http://10.107.103.115:8001/is-bigint/download/is-bigint-1.0.4.tgz" + integrity sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM= + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/is-binary-path/download/is-binary-path-1.0.1.tgz" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/is-binary-path/download/is-binary-path-2.1.0.tgz" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "http://10.107.103.115:8001/is-boolean-object/download/is-boolean-object-1.1.2.tgz" + integrity sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://10.107.103.115:8001/is-buffer/download/is-buffer-1.1.6.tgz" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "http://10.107.103.115:8001/is-callable/download/is-callable-1.2.7.tgz" + integrity sha1-O8KoXqdC2eNiBdys3XLKH9xRsFU= + +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "http://10.107.103.115:8001/is-core-module/download/is-core-module-2.11.0.tgz" + integrity sha1-rUyz44Y+gUUjyW8/WNJsxXD/AUQ= + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "http://10.107.103.115:8001/is-date-object/download/is-date-object-1.0.5.tgz" + integrity sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8= + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-0.1.6.tgz" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0: + version "1.0.2" + resolved "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-descriptor@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/is-descriptor/download/is-descriptor-1.0.2.tgz" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "http://10.107.103.115:8001/is-extendable/download/is-extendable-0.1.1.tgz" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/is-extendable/download/is-extendable-1.0.1.tgz" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/is-extglob/download/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/is-fullwidth-code-point/download/is-fullwidth-code-point-4.0.0.tgz" + integrity sha1-+uMWfHKedGP4RhzlErCApJJoqog= + +is-glob@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/is-glob/download/is-glob-3.1.0.tgz" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "http://10.107.103.115:8001/is-glob/download/is-glob-4.0.3.tgz" + integrity sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/is-interactive/download/is-interactive-1.0.0.tgz" + integrity sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4= + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/is-negative-zero/download/is-negative-zero-2.0.2.tgz" + integrity sha1-e/bwOigAO4s5Zd46wm9mTXZfMVA= + +is-number-object@^1.0.4: + version "1.0.7" + resolved "http://10.107.103.115:8001/is-number-object/download/is-number-object-1.0.7.tgz" + integrity sha1-WdUK2kxFJReE6ZBPUkbHQvB6Qvw= + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/is-number/download/is-number-3.0.0.tgz" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "http://10.107.103.115:8001/is-number/download/is-number-7.0.0.tgz" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/is-obj/download/is-obj-2.0.0.tgz" + integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/is-path-cwd/download/is-path-cwd-2.2.0.tgz" + integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz" + integrity sha1-v+Lcomxp85cmWkAJljYCk1oFOss= + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/is-path-inside/download/is-path-inside-2.1.0.tgz" + integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI= + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/is-plain-obj/download/is-plain-obj-1.1.0.tgz" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "http://10.107.103.115:8001/is-plain-object/download/is-plain-object-2.0.4.tgz" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.4: + version "1.1.4" + resolved "http://10.107.103.115:8001/is-regex/download/is-regex-1.1.4.tgz" + integrity sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/is-shared-array-buffer/download/is-shared-array-buffer-1.0.2.tgz" + integrity sha1-jyWcVztgtqMtQFihoHQwwKc0THk= + dependencies: + call-bind "^1.0.2" + +is-stream@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/is-stream/download/is-stream-1.1.0.tgz" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/is-stream/download/is-stream-2.0.1.tgz" + integrity sha1-+sHj1TuXrVqdCunO8jifWBClwHc= + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "http://10.107.103.115:8001/is-string/download/is-string-1.0.7.tgz" + integrity sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0= + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "http://10.107.103.115:8001/is-symbol/download/is-symbol-1.0.4.tgz" + integrity sha1-ptrJO2NbBjymhyI23oiRClevE5w= + dependencies: + has-symbols "^1.0.2" + +is-text-path@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/is-text-path/download/is-text-path-1.0.1.tgz" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "http://10.107.103.115:8001/is-typed-array/download/is-typed-array-1.1.10.tgz" + integrity sha1-NqW1y0GJtXXRo+SwhTa/tIWAHj8= + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/is-typedarray/download/is-typedarray-1.0.0.tgz" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "http://10.107.103.115:8001/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz" + integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= + +is-utf8@^0.2.1: + version "0.2.1" + resolved "http://10.107.103.115:8001/is-utf8/download/is-utf8-0.2.1.tgz" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-weakref@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/is-weakref/download/is-weakref-1.0.2.tgz" + integrity sha1-lSnzg6kzggXol2XgOS78LxAPBvI= + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/is-windows/download/is-windows-1.0.2.tgz" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/is-wsl/download/is-wsl-1.1.0.tgz" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/isarray/download/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/isexe/download/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/isobject/download/isobject-2.1.0.tgz" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/isobject/download/isobject-3.0.1.tgz" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "http://10.107.103.115:8001/isstream/download/isstream-0.1.2.tgz" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +javascript-stringify@^2.0.1: + version "2.1.0" + resolved "http://10.107.103.115:8001/javascript-stringify/download/javascript-stringify-2.1.0.tgz" + integrity sha1-J8dlOb4U2L0Sghmi1zGwkzeQTnk= + +jest-worker@^27.0.2, jest-worker@^27.4.5: + version "27.5.1" + resolved "http://10.107.103.115:8001/jest-worker/download/jest-worker-27.5.1.tgz" + integrity sha1-jRRvCQDolzsQa29zzB6ajLhvjbA= + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@17.3.0: + version "17.3.0" + resolved "http://10.107.103.115:8001/joi/download/joi-17.3.0.tgz" + integrity sha1-8b5KbOKbwXFmZYGaw2HfoTn/9dI= + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/js-tokens/download/js-tokens-4.0.0.tgz" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-yaml@^3.13.1: + version "3.14.1" + resolved "http://10.107.103.115:8001/js-yaml/download/js-yaml-3.14.1.tgz" + integrity sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc= + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "http://10.107.103.115:8001/jsbn/download/jsbn-0.1.1.tgz" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "http://10.107.103.115:8001/jsesc/download/jsesc-2.5.2.tgz" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +jsesc@~0.5.0: + version "0.5.0" + resolved "http://10.107.103.115:8001/jsesc/download/jsesc-0.5.0.tgz" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "http://10.107.103.115:8001/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz" + integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz" + integrity sha1-rnvLNlard6c7pcSb9lTzjmtoYOI= + +json-schema@0.4.0: + version "0.4.0" + resolved "http://10.107.103.115:8001/json-schema/download/json-schema-0.4.0.tgz" + integrity sha1-995M9u+rg4666zI2R0y7paGTCrU= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://10.107.103.115:8001/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^1.0.1: + version "1.0.2" + resolved "http://10.107.103.115:8001/json5/download/json5-1.0.2.tgz" + integrity sha1-Y9mNYPIbMTt3xNbaGL+mnYDh1ZM= + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "http://10.107.103.115:8001/json5/download/json5-2.2.3.tgz" + integrity sha1-eM1vGhm9wStz21rQxh79ZsHikoM= + +jsonfile@^6.0.1: + version "6.1.0" + resolved "http://10.107.103.115:8001/jsonfile/download/jsonfile-6.1.0.tgz" + integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4= + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "http://10.107.103.115:8001/jsonparse/download/jsonparse-1.3.1.tgz" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +JSONStream@^1.0.4: + version "1.3.5" + resolved "http://10.107.103.115:8001/JSONStream/download/JSONStream-1.3.5.tgz" + integrity sha1-MgjB8I06TZkmGrZPkjArwV4RHKA= + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +jsprim@^1.2.2: + version "1.4.2" + resolved "http://10.107.103.115:8001/jsprim/download/jsprim-1.4.2.tgz" + integrity sha1-cSxlUzoVyHi6WentXw4m1bd8X+s= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/killable/download/killable-1.0.1.tgz" + integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= + +kind-of@^3.0.2: + version "3.2.2" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^3.0.3: + version "3.2.2" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^3.2.0: + version "3.2.2" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-4.0.0.tgz" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-5.1.0.tgz" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "http://10.107.103.115:8001/kind-of/download/kind-of-6.0.3.tgz" + integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= + +klona@^2.0.4: + version "2.0.6" + resolved "http://10.107.103.115:8001/klona/download/klona-2.0.6.tgz" + integrity sha1-hb/7+BnAOy9TJwQSQgpFVe+ILiI= + +less-loader@^8.0.0: + version "8.1.1" + resolved "http://10.107.103.115:8001/less-loader/download/less-loader-8.1.1.tgz" + integrity sha1-q6vpElgEV60ApDGBRqrFtT4CP0I= + dependencies: + klona "^2.0.4" + +"less@^3.5.0 || ^4.0.0", less@3.9.0: + version "3.9.0" + resolved "http://10.107.103.115:8001/less/download/less-3.9.0.tgz" + integrity sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ= + dependencies: + clone "^2.1.2" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +levn@^0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/levn/download/levn-0.4.1.tgz" + integrity sha1-rkViwAdHO5MqYgDUAyaN0v/8at4= + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.3: + version "2.0.6" + resolved "http://10.107.103.115:8001/lilconfig/download/lilconfig-2.0.6.tgz" + integrity sha1-MqOEVYvVivPUxuB33RrR05e8adQ= + +lilconfig@2.0.4: + version "2.0.4" + resolved "http://10.107.103.115:8001/lilconfig/download/lilconfig-2.0.4.tgz" + integrity sha1-9FB9BD1wWLOAtqj1y3vNSzTO4II= + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "http://10.107.103.115:8001/lines-and-columns/download/lines-and-columns-1.2.4.tgz" + integrity sha1-7KKE910pZQeTCdwK2SVauy68FjI= + +lint-staged@12.1.2: + version "12.1.2" + resolved "http://10.107.103.115:8001/lint-staged/download/lint-staged-12.1.2.tgz" + integrity sha1-kMVxkn4TcfwTPnIGcd15ieq1P3Q= + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^8.3.0" + debug "^4.3.2" + enquirer "^2.3.6" + execa "^5.1.1" + lilconfig "2.0.4" + listr2 "^3.13.3" + micromatch "^4.0.4" + normalize-path "^3.0.0" + object-inspect "^1.11.0" + string-argv "^0.3.1" + supports-color "^9.0.2" + yaml "^1.10.2" + +listr2@^3.13.3: + version "3.14.0" + resolved "http://10.107.103.115:8001/listr2/download/listr2-3.14.0.tgz" + integrity sha1-IxAcxi4Tdf1YNrJIJ20dK1H9vp4= + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/load-json-file/download/load-json-file-2.0.0.tgz" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/loader-runner/download/loader-runner-4.3.0.tgz" + integrity sha1-wbShY7mfYUgwNTsWdV5xSawjFOE= + +loader-utils@^1.2.3: + version "1.4.2" + resolved "http://10.107.103.115:8001/loader-utils/download/loader-utils-1.4.2.tgz" + integrity sha1-KalX86Y5c4g+toTxD/09FR/sAaM= + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.4" + resolved "http://10.107.103.115:8001/loader-utils/download/loader-utils-2.0.4.tgz" + integrity sha1-i1yzi1w0qaAY7h/A5qBm0d/MUow= + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/locate-path/download/locate-path-2.0.0.tgz" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/locate-path/download/locate-path-3.0.0.tgz" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/locate-path/download/locate-path-5.0.0.tgz" + integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "http://10.107.103.115:8001/locate-path/download/locate-path-6.0.0.tgz" + integrity sha1-VTIeswn+u8WcSAHZMackUqaB0oY= + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.15, lodash-es@^4.17.21, lodash-es@4.17.21: + version "4.17.21" + resolved "http://10.107.103.115:8001/lodash-es/download/lodash-es-4.17.21.tgz" + integrity sha1-Q+YmxG5lkbd1C+srUBFzkMYJ4+4= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "http://10.107.103.115:8001/lodash.debounce/download/lodash.debounce-4.0.8.tgz" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.get@^4: + version "4.4.2" + resolved "http://10.107.103.115:8001/lodash.get/download/lodash.get-4.4.2.tgz" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.map@^4.5.1: + version "4.6.0" + resolved "http://10.107.103.115:8001/lodash.map/download/lodash.map-4.6.0.tgz" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "http://10.107.103.115:8001/lodash.memoize/download/lodash.memoize-4.1.2.tgz" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "http://10.107.103.115:8001/lodash.merge/download/lodash.merge-4.6.2.tgz" + integrity sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo= + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "http://10.107.103.115:8001/lodash.truncate/download/lodash.truncate-4.4.2.tgz" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "http://10.107.103.115:8001/lodash.uniq/download/lodash.uniq-4.5.0.tgz" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@4.17.21: + version "4.17.21" + resolved "http://10.107.103.115:8001/lodash/download/lodash-4.17.21.tgz" + integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= + +log-symbols@^4.1.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/log-symbols/download/log-symbols-4.1.0.tgz" + integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/log-update/download/log-update-4.0.0.tgz" + integrity sha1-WJ7NNSRx8qHAxXAodUOmTf0g4KE= + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +loglevel@^1.6.8: + version "1.8.1" + resolved "http://10.107.103.115:8001/loglevel/download/loglevel-1.8.1.tgz" + integrity sha1-XGIfg9W0jFSuk7YVY1P1VZYzd7Q= + +longest@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/longest/download/longest-2.0.1.tgz" + integrity sha1-eB4YMpaqlPbU2RbcM10NF676I/g= + +lower-case@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/lower-case/download/lower-case-2.0.2.tgz" + integrity sha1-b6I3xj29xKgsoP2ILkci3F5jTig= + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/lru-cache/download/lru-cache-5.1.1.tgz" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "http://10.107.103.115:8001/lru-cache/download/lru-cache-6.0.0.tgz" + integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.9" + resolved "http://10.107.103.115:8001/magic-string/download/magic-string-0.25.9.tgz" + integrity sha1-3n+fr5HvihyR0CwuUxTIJ3283Rw= + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/make-dir/download/make-dir-2.1.0.tgz" + integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/make-dir/download/make-dir-3.1.0.tgz" + integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= + dependencies: + semver "^6.0.0" + +make-error@^1, make-error@^1.1.1: + version "1.3.6" + resolved "http://10.107.103.115:8001/make-error/download/make-error-1.3.6.tgz" + integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I= + +map-cache@^0.2.2: + version "0.2.2" + resolved "http://10.107.103.115:8001/map-cache/download/map-cache-0.2.2.tgz" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/map-obj/download/map-obj-1.0.1.tgz" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/map-obj/download/map-obj-4.3.0.tgz" + integrity sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo= + +map-visit@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/map-visit/download/map-visit-1.0.0.tgz" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "http://10.107.103.115:8001/mdn-data/download/mdn-data-2.0.14.tgz" + integrity sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA= + +media-typer@0.3.0: + version "0.3.0" + resolved "http://10.107.103.115:8001/media-typer/download/media-typer-0.3.0.tgz" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "http://10.107.103.115:8001/memory-fs/download/memory-fs-0.4.1.tgz" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^8.0.0: + version "8.1.2" + resolved "http://10.107.103.115:8001/meow/download/meow-8.1.2.tgz" + integrity sha1-vL5FvaDuFynTUMA8/8g5WjbE6Jc= + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/merge-descriptors/download/merge-descriptors-1.0.1.tgz" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/merge-stream/download/merge-stream-2.0.0.tgz" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +merge@^2.1.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/merge/download/merge-2.1.1.tgz" + integrity sha1-We9L9+Cz6HkYZDboSBwGpsFiypg= + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "http://10.107.103.115:8001/merge2/download/merge2-1.4.1.tgz" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +methods@~1.1.2: + version "1.1.2" + resolved "http://10.107.103.115:8001/methods/download/methods-1.1.2.tgz" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "http://10.107.103.115:8001/micromatch/download/micromatch-3.1.10.tgz" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "http://10.107.103.115:8001/micromatch/download/micromatch-4.0.5.tgz" + integrity sha1-vImZp8u/d83InxMvbkZwUbSQkMY= + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: + version "1.52.0" + resolved "http://10.107.103.115:8001/mime-db/download/mime-db-1.52.0.tgz" + integrity sha1-u6vNwChZ9JhzAchW4zh85exDv3A= + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "http://10.107.103.115:8001/mime-types/download/mime-types-2.1.35.tgz" + integrity sha1-OBqHG2KnNEUGYK497uRIE/cNlZo= + dependencies: + mime-db "1.52.0" + +mime@^1.4.1, mime@1.6.0: + version "1.6.0" + resolved "http://10.107.103.115:8001/mime/download/mime-1.6.0.tgz" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +mime@^2.4.4: + version "2.6.0" + resolved "http://10.107.103.115:8001/mime/download/mime-2.6.0.tgz" + integrity sha1-oqaCqVzU0MsdYlfij4PafjWAA2c= + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/mimic-fn/download/mimic-fn-2.1.0.tgz" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +min-indent@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/min-indent/download/min-indent-1.0.1.tgz" + integrity sha1-pj9oFnOzBXH76LwlaGrnRu76mGk= + +mini-css-extract-plugin@^1.3.5: + version "1.6.2" + resolved "http://10.107.103.115:8001/mini-css-extract-plugin/download/mini-css-extract-plugin-1.6.2.tgz" + integrity sha1-gxcrT9gS+PxKCdb20W+ST1OZDKg= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz" + integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "http://10.107.103.115:8001/minimatch/download/minimatch-3.1.2.tgz" + integrity sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s= + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/minimist-options/download/minimist-options-4.1.0.tgz" + integrity sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk= + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "http://10.107.103.115:8001/minimist/download/minimist-1.2.8.tgz" + integrity sha1-waRk52kzAuCCoHXO4MBXdBrEdyw= + +minimist@1.2.6: + version "1.2.6" + resolved "http://10.107.103.115:8001/minimist/download/minimist-1.2.6.tgz" + integrity sha1-hjelt1nqDW6YcCz7OpKDMjyTr0Q= + +mitt@3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/mitt/download/mitt-3.0.0.tgz" + integrity sha1-ae+b1cgP9vV0c+jYkybQHEFL4L0= + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "http://10.107.103.115:8001/mixin-deep/download/mixin-deep-1.3.2.tgz" + integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.0: + version "0.5.6" + resolved "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz" + integrity sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY= + dependencies: + minimist "^1.2.6" + +mkdirp@^0.5.1: + version "0.5.6" + resolved "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz" + integrity sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY= + dependencies: + minimist "^1.2.6" + +mkdirp@^0.5.6: + version "0.5.6" + resolved "http://10.107.103.115:8001/mkdirp/download/mkdirp-0.5.6.tgz" + integrity sha1-fe8D0kMtyuS6HWEURcSDlgYiVfY= + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/mkdirp/download/mkdirp-1.0.4.tgz" + integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34= + +mockjs@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/mockjs/download/mockjs-1.1.0.tgz" + integrity sha1-5qDDeOkZBtuv8gkRzAJzs8fXWwY= + dependencies: + commander "*" + +monaco-editor-webpack-plugin@^1.9.1: + version "1.9.1" + resolved "http://10.107.103.115:8001/monaco-editor-webpack-plugin/download/monaco-editor-webpack-plugin-1.9.1.tgz" + integrity sha1-60u7HF5b+1VFQcGuFULnTCqfQ/0= + dependencies: + loader-utils "^1.2.3" + +monaco-editor@^0.20.0, "monaco-editor@0.19.x || 0.20.x": + version "0.20.0" + resolved "http://10.107.103.115:8001/monaco-editor/download/monaco-editor-0.20.0.tgz" + integrity sha1-XVAJNDpVASRCbLTZZaTSejSLTeo= + +mrmime@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/mrmime/download/mrmime-1.0.1.tgz" + integrity sha1-X5DIJfrUvdQdyRTv9dGoz9ryTyc= + +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "http://10.107.103.115:8001/ms/download/ms-2.1.2.tgz" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +ms@2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/ms/download/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.3: + version "2.1.3" + resolved "http://10.107.103.115:8001/ms/download/ms-2.1.3.tgz" + integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "http://10.107.103.115:8001/multicast-dns/download/multicast-dns-6.2.3.tgz" + integrity sha1-oOx72QVcQoL3kMPIL04o2zsxsik= + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mustache@^4.2.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/mustache/download/mustache-4.2.0.tgz" + integrity sha1-5YkjJNYKEuycKnM1ntylKXK/b2Q= + +mute-stream@0.0.8: + version "0.0.8" + resolved "http://10.107.103.115:8001/mute-stream/download/mute-stream-0.0.8.tgz" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +mz@^2.4.0: + version "2.7.0" + resolved "http://10.107.103.115:8001/mz/download/mz-2.7.0.tgz" + integrity sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI= + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.1.23, nanoid@^3.3.4: + version "3.3.4" + resolved "http://10.107.103.115:8001/nanoid/download/nanoid-3.3.4.tgz" + integrity sha1-cwtn480J4t6s8DwCfIHJ2dvF6Ks= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "http://10.107.103.115:8001/nanomatch/download/nanomatch-1.2.13.tgz" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://10.107.103.115:8001/natural-compare/download/natural-compare-1.4.0.tgz" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.3: + version "0.6.3" + resolved "http://10.107.103.115:8001/negotiator/download/negotiator-0.6.3.tgz" + integrity sha1-WOMjpy/twNb5zU0x/kn1FHlZDM0= + +neo-async@^2.6.2: + version "2.6.2" + resolved "http://10.107.103.115:8001/neo-async/download/neo-async-2.6.2.tgz" + integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= + +nice-try@^1.0.4: + version "1.0.5" + resolved "http://10.107.103.115:8001/nice-try/download/nice-try-1.0.5.tgz" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + +no-case@^3.0.4: + version "3.0.4" + resolved "http://10.107.103.115:8001/no-case/download/no-case-3.0.4.tgz" + integrity sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0= + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^0.10.0: + version "0.10.0" + resolved "http://10.107.103.115:8001/node-forge/download/node-forge-0.10.0.tgz" + integrity sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M= + +node-releases@^2.0.8: + version "2.0.8" + resolved "http://10.107.103.115:8001/node-releases/download/node-releases-2.0.8.tgz" + integrity sha1-DzSc3I/Po5qSrAvpvEi3cGKSua4= + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-2.5.0.tgz" + integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-2.5.0.tgz" + integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "http://10.107.103.115:8001/normalize-package-data/download/normalize-package-data-3.0.3.tgz" + integrity sha1-28w+LaWVCaCYNCKITNFy7v36Ul4= + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/normalize-path/download/normalize-path-2.1.1.tgz" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/normalize-path/download/normalize-path-3.0.0.tgz" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +normalize-range@^0.1.2: + version "0.1.2" + resolved "http://10.107.103.115:8001/normalize-range/download/normalize-range-0.1.2.tgz" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^6.0.1: + version "6.1.0" + resolved "http://10.107.103.115:8001/normalize-url/download/normalize-url-6.1.0.tgz" + integrity sha1-QNCIW1Nd7/4/MUe+yHfQX+TFZoo= + +normalize-wheel@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/normalize-wheel/download/normalize-wheel-1.0.1.tgz" + integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU= + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://10.107.103.115:8001/npm-run-path/download/npm-run-path-2.0.2.tgz" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "http://10.107.103.115:8001/npm-run-path/download/npm-run-path-4.0.1.tgz" + integrity sha1-t+zR5e1T2o43pV4cImnguX7XSOo= + dependencies: + path-key "^3.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/nth-check/download/nth-check-2.1.1.tgz" + integrity sha1-yeq0KO/842zWuSySS9sADvHx7R0= + dependencies: + boolbase "^1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "http://10.107.103.115:8001/oauth-sign/download/oauth-sign-0.9.0.tgz" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@^4.0.1: + version "4.1.1" + resolved "http://10.107.103.115:8001/object-assign/download/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "http://10.107.103.115:8001/object-copy/download/object-copy-0.1.0.tgz" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.3" + resolved "http://10.107.103.115:8001/object-inspect/download/object-inspect-1.12.3.tgz" + integrity sha1-umLf/WfuJWyMCG365p4BbNHxmLk= + +object-is@^1.0.1: + version "1.1.5" + resolved "http://10.107.103.115:8001/object-is/download/object-is-1.1.5.tgz" + integrity sha1-ud7qpfx/GEag+uzc7sE45XePU6w= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/object-keys/download/object-keys-1.1.1.tgz" + integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + +object-visit@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/object-visit/download/object-visit-1.0.1.tgz" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.4: + version "4.1.4" + resolved "http://10.107.103.115:8001/object.assign/download/object.assign-4.1.4.tgz" + integrity sha1-lnPHx8NRq4xNC1FvQ0Pr9N+3eZ8= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/object.pick/download/object.pick-1.3.0.tgz" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.1: + version "1.1.6" + resolved "http://10.107.103.115:8001/object.values/download/object.values-1.1.6.tgz" + integrity sha1-SruqceukfWNYnUAoVvkIJD7qmx0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "http://10.107.103.115:8001/obuf/download/obuf-1.1.2.tgz" + integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= + +on-finished@2.4.1: + version "2.4.1" + resolved "http://10.107.103.115:8001/on-finished/download/on-finished-2.4.1.tgz" + integrity sha1-WMjEQRblSEWtV/FKsQsDUzGErD8= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/on-headers/download/on-headers-1.0.2.tgz" + integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "http://10.107.103.115:8001/once/download/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "http://10.107.103.115:8001/onetime/download/onetime-5.1.2.tgz" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +opener@^1.5.2: + version "1.5.2" + resolved "http://10.107.103.115:8001/opener/download/opener-1.5.2.tgz" + integrity sha1-XTfh81B3udysQwE3InGv3rKhNZg= + +opn@^5.5.0: + version "5.5.0" + resolved "http://10.107.103.115:8001/opn/download/opn-5.5.0.tgz" + integrity sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w= + dependencies: + is-wsl "^1.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "http://10.107.103.115:8001/optionator/download/optionator-0.9.1.tgz" + integrity sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk= + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +ora@^5.4.1: + version "5.4.1" + resolved "http://10.107.103.115:8001/ora/download/ora-5.4.1.tgz" + integrity sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg= + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/os-tmpdir/download/os-tmpdir-1.0.2.tgz" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/p-finally/download/p-finally-1.0.0.tgz" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/p-limit/download/p-limit-1.3.0.tgz" + integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/p-limit/download/p-limit-2.3.0.tgz" + integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "http://10.107.103.115:8001/p-limit/download/p-limit-3.1.0.tgz" + integrity sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs= + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/p-locate/download/p-locate-2.0.0.tgz" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/p-locate/download/p-locate-3.0.0.tgz" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "http://10.107.103.115:8001/p-locate/download/p-locate-4.1.0.tgz" + integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/p-locate/download/p-locate-5.0.0.tgz" + integrity sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ= + dependencies: + p-limit "^3.0.2" + +p-map@^2.0.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/p-map/download/p-map-2.1.0.tgz" + integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + +p-map@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/p-map/download/p-map-4.0.0.tgz" + integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs= + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/p-retry/download/p-retry-3.0.1.tgz" + integrity sha1-MWtMiJPiyNwc+okfQGxLQivr8yg= + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/p-try/download/p-try-1.0.0.tgz" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/p-try/download/p-try-2.2.0.tgz" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + +param-case@^3.0.4: + version "3.0.4" + resolved "http://10.107.103.115:8001/param-case/download/param-case-3.0.4.tgz" + integrity sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU= + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/parent-module/download/parent-module-1.0.1.tgz" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "http://10.107.103.115:8001/parse-json/download/parse-json-2.2.0.tgz" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "http://10.107.103.115:8001/parse-json/download/parse-json-5.2.0.tgz" + integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/parse-passwd/download/parse-passwd-1.0.0.tgz" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "http://10.107.103.115:8001/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + integrity sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY= + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/parse5/download/parse5-5.1.1.tgz" + integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg= + +parse5@^6.0.1: + version "6.0.1" + resolved "http://10.107.103.115:8001/parse5/download/parse5-6.0.1.tgz" + integrity sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "http://10.107.103.115:8001/parseurl/download/parseurl-1.3.3.tgz" + integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= + +pascal-case@^3.1.2: + version "3.1.2" + resolved "http://10.107.103.115:8001/pascal-case/download/pascal-case-3.1.2.tgz" + integrity sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs= + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "http://10.107.103.115:8001/pascalcase/download/pascalcase-0.1.1.tgz" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "http://10.107.103.115:8001/path-dirname/download/path-dirname-1.0.2.tgz" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/path-exists/download/path-exists-3.0.0.tgz" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/path-exists/download/path-exists-4.0.0.tgz" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/path-is-absolute/download/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/path-is-inside/download/path-is-inside-1.0.2.tgz" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/path-key/download/path-key-2.0.1.tgz" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "http://10.107.103.115:8001/path-key/download/path-key-3.1.1.tgz" + integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + +path-parse@^1.0.7: + version "1.0.7" + resolved "http://10.107.103.115:8001/path-parse/download/path-parse-1.0.7.tgz" + integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "http://10.107.103.115:8001/path-to-regexp/download/path-to-regexp-0.1.7.tgz" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/path-type/download/path-type-2.0.0.tgz" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/path-type/download/path-type-4.0.0.tgz" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/performance-now/download/performance-now-2.1.0.tgz" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/picocolors/download/picocolors-1.0.0.tgz" + integrity sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "http://10.107.103.115:8001/picomatch/download/picomatch-2.3.1.tgz" + integrity sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI= + +pify@^2.0.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/pify/download/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "http://10.107.103.115:8001/pify/download/pify-4.0.1.tgz" + integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/pinkie-promise/download/pinkie-promise-2.0.1.tgz" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "http://10.107.103.115:8001/pinkie/download/pinkie-2.0.4.tgz" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.5: + version "4.0.5" + resolved "http://10.107.103.115:8001/pirates/download/pirates-4.0.5.tgz" + integrity sha1-/uw1LqXDJo+yOjfHAqsWmfNaXzs= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/pkg-dir/download/pkg-dir-3.0.0.tgz" + integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/pkg-dir/download/pkg-dir-4.2.0.tgz" + integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/pkg-up/download/pkg-up-3.1.0.tgz" + integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU= + dependencies: + find-up "^3.0.0" + +portfinder@^1.0.26, portfinder@^1.0.28: + version "1.0.32" + resolved "http://10.107.103.115:8001/portfinder/download/portfinder-1.0.32.tgz" + integrity sha1-L+G55YOJcSQp3CvqW+shRhRsf4E= + dependencies: + async "^2.6.4" + debug "^3.2.7" + mkdirp "^0.5.6" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "http://10.107.103.115:8001/posix-character-classes/download/posix-character-classes-0.1.1.tgz" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "http://10.107.103.115:8001/postcss-calc/download/postcss-calc-8.2.4.tgz" + integrity sha1-d7nCm/y+igf/ZpPchwUIKIiXOaU= + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "http://10.107.103.115:8001/postcss-colormin/download/postcss-colormin-5.3.0.tgz" + integrity sha1-PO6eXKYrLCfoT85jr/wM+1kBlWo= + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "http://10.107.103.115:8001/postcss-convert-values/download/postcss-convert-values-5.1.3.tgz" + integrity sha1-BJmLubprZaoxA11mmmrzQsX505M= + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "http://10.107.103.115:8001/postcss-discard-comments/download/postcss-discard-comments-5.1.2.tgz" + integrity sha1-jfXoHSklryeAB1hAwVJvBmDlNpY= + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-discard-duplicates/download/postcss-discard-duplicates-5.1.0.tgz" + integrity sha1-nrT+hFZwak7r1tO3t3fQe60D6Eg= + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-discard-empty/download/postcss-discard-empty-5.1.1.tgz" + integrity sha1-5XdiND/39QP+U/ylU9GNfww2nGw= + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-discard-overridden/download/postcss-discard-overridden-5.1.0.tgz" + integrity sha1-foxbUzJXR+nZATG7iGNSgvtKJ24= + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "http://10.107.103.115:8001/postcss-flexbugs-fixes/download/postcss-flexbugs-fixes-5.0.2.tgz" + integrity sha1-ICjhRTEwdPyavidst8oU5UAetJ0= + +postcss-loader@^4.2.0: + version "4.3.0" + resolved "http://10.107.103.115:8001/postcss-loader/download/postcss-loader-4.3.0.tgz" + integrity sha1-LE3pZXzU8Hr1q0K9YKZzAE2huMw= + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + semver "^7.3.4" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "http://10.107.103.115:8001/postcss-merge-longhand/download/postcss-merge-longhand-5.1.7.tgz" + integrity sha1-JKG99ALZ7w5w9Wjzm9wDRNVo+xY= + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.3: + version "5.1.3" + resolved "http://10.107.103.115:8001/postcss-merge-rules/download/postcss-merge-rules-5.1.3.tgz" + integrity sha1-j5dnnmfMjQhnemUZr8pB7fIiCJQ= + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-minify-font-values/download/postcss-minify-font-values-5.1.0.tgz" + integrity sha1-8d8AFKcmCD0mDTvYXXOF+4nR8Bs= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-minify-gradients/download/postcss-minify-gradients-5.1.1.tgz" + integrity sha1-8f4bT0mBNKUGgkDC8l1G/NI2uiw= + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "http://10.107.103.115:8001/postcss-minify-params/download/postcss-minify-params-5.1.4.tgz" + integrity sha1-wGpseHEosyCLOMk2TPxAyKpdc1I= + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "http://10.107.103.115:8001/postcss-minify-selectors/download/postcss-minify-selectors-5.2.1.tgz" + integrity sha1-1OfmtGFHuBF+qTJakVqAHV/mVsY= + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz" + integrity sha1-zaHwR8CugMl9vijD52pDuIAldB0= + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz" + integrity sha1-67tU+uFZjuz99pGgKz/zs5ClpRw= + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz" + integrity sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY= + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz" + integrity sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw= + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-normalize-charset/download/postcss-normalize-charset-5.1.0.tgz" + integrity sha1-kwLeCykJS1LCWemyz43Ah5h58O0= + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-normalize-display-values/download/postcss-normalize-display-values-5.1.0.tgz" + integrity sha1-cqu65YCBlg6e3XIA/PIauDJcPag= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-normalize-positions/download/postcss-normalize-positions-5.1.1.tgz" + integrity sha1-75cnnYlAh7WTJbRcR/HoY9rvu5I= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-5.1.1.tgz" + integrity sha1-6euWgFIE9HZt9m/QntLhNUVCD7I= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-normalize-string/download/postcss-normalize-string-5.1.0.tgz" + integrity sha1-QRlhFp4HMIyCwfjFXz6KM3dX4ig= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-5.1.0.tgz" + integrity sha1-1WFEEPjwsjiOnyQKpgEbpvUtr7s= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-normalize-unicode/download/postcss-normalize-unicode-5.1.1.tgz" + integrity sha1-9nKX/KP+p/F+DSyqQHaa/Eh6oDA= + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-normalize-url/download/postcss-normalize-url-5.1.0.tgz" + integrity sha1-7Z2IyoLiGr75n3Q0V9NymgQq3Nw= + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-normalize-whitespace/download/postcss-normalize-whitespace-5.1.1.tgz" + integrity sha1-CKGg0f+henzG7+HmydqWnMRJPPo= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "http://10.107.103.115:8001/postcss-ordered-values/download/postcss-ordered-values-5.1.3.tgz" + integrity sha1-tv0r0Q+TeyPYa8gpxp53Ms526jg= + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-reduce-initial/download/postcss-reduce-initial-5.1.1.tgz" + integrity sha1-wYt9+4iu4ksfjkk2VBwprb01Ik4= + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-reduce-transforms/download/postcss-reduce-transforms-5.1.0.tgz" + integrity sha1-Mztw53WLgC890N3+mLscz++Wtuk= + dependencies: + postcss-value-parser "^4.2.0" + +postcss-safe-parser@^5.0.2: + version "5.0.2" + resolved "http://10.107.103.115:8001/postcss-safe-parser/download/postcss-safe-parser-5.0.2.tgz" + integrity sha1-RZ3Sffa8K6ZGCIJLo55F2s9ehS0= + dependencies: + postcss "^8.1.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "http://10.107.103.115:8001/postcss-selector-parser/download/postcss-selector-parser-6.0.11.tgz" + integrity sha1-LkHcObetdARuFhUYUYXNCxfQyNw= + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/postcss-svgo/download/postcss-svgo-5.1.0.tgz" + integrity sha1-CjF0AM7XifIzoogm53Uj8VhX2A0= + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/postcss-unique-selectors/download/postcss-unique-selectors-5.1.1.tgz" + integrity sha1-qfJz0erNCemqYIj0sFB7GLG1QbY= + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "http://10.107.103.115:8001/postcss-value-parser/download/postcss-value-parser-4.2.0.tgz" + integrity sha1-cjwJkgg2um0+WvAZ+SvAlxwC5RQ= + +"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.1.10, postcss@^8.1.4, postcss@^8.2.15, postcss@^8.2.2, postcss@8.3.0: + version "8.3.0" + resolved "http://10.107.103.115:8001/postcss/download/postcss-8.3.0.tgz" + integrity sha1-sacT9hcspCfj8F7xMD3otlaDMl8= + dependencies: + colorette "^1.2.2" + nanoid "^3.1.23" + source-map-js "^0.6.2" + +postcss@^8.3.5: + version "8.4.21" + resolved "http://10.107.103.115:8001/postcss/download/postcss-8.4.21.tgz" + integrity sha1-xjm3GaV+/DGHsToddlZ1SF9BNPQ= + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "http://10.107.103.115:8001/prelude-ls/download/prelude-ls-1.2.1.tgz" + integrity sha1-3rxkidem5rDnYRiIzsiAM30xY5Y= + +pretty-error@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/pretty-error/download/pretty-error-4.0.0.tgz" + integrity sha1-kKcD9G3XI0rbRtD4SCPp0cuPENY= + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/pretty-time/download/pretty-time-1.1.0.tgz" + integrity sha1-/7dCmvq7hTXDRqNOQYc63z103Q4= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/process-nextick-args/download/process-nextick-args-2.0.1.tgz" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +progress@^2.0.0: + version "2.0.3" + resolved "http://10.107.103.115:8001/progress/download/progress-2.0.3.tgz" + integrity sha1-foz42PW48jnBvGi+tOt4Vn1XLvg= + +promise@^7.1.1: + version "7.3.1" + resolved "http://10.107.103.115:8001/promise/download/promise-7.3.1.tgz" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "http://10.107.103.115:8001/proxy-addr/download/proxy-addr-2.0.7.tgz" + integrity sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU= + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/prr/download/prr-1.0.1.tgz" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.9.0" + resolved "http://10.107.103.115:8001/psl/download/psl-1.9.0.tgz" + integrity sha1-0N8qE38AeUVl/K87LADNCfjVpac= + +pump@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/pump/download/pump-3.0.0.tgz" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.0" + resolved "http://10.107.103.115:8001/punycode/download/punycode-2.3.0.tgz" + integrity sha1-9n+mfJTaj00M//mBruQRgGQZm48= + +punycode@1.3.2: + version "1.3.2" + resolved "http://10.107.103.115:8001/punycode/download/punycode-1.3.2.tgz" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +q@^1.5.1: + version "1.5.1" + resolved "http://10.107.103.115:8001/q/download/q-1.5.1.tgz" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@^6.10.2, qs@6.11.0: + version "6.11.0" + resolved "http://10.107.103.115:8001/qs/download/qs-6.11.0.tgz" + integrity sha1-/Q2WNEb3pl4TZ+AavYVClFPww3o= + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "http://10.107.103.115:8001/qs/download/qs-6.5.3.tgz" + integrity sha1-Ou7/yRln7241wOSI70b7KWq3aq0= + +querystring@0.2.0: + version "0.2.0" + resolved "http://10.107.103.115:8001/querystring/download/querystring-0.2.0.tgz" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "http://10.107.103.115:8001/querystringify/download/querystringify-2.2.0.tgz" + integrity sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y= + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "http://10.107.103.115:8001/queue-microtask/download/queue-microtask-1.2.3.tgz" + integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "http://10.107.103.115:8001/quick-lru/download/quick-lru-4.0.1.tgz" + integrity sha1-W4h48ROlgheEjGSCAmxz4bpXcn8= + +randombytes@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/randombytes/download/randombytes-2.1.0.tgz" + integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "http://10.107.103.115:8001/range-parser/download/range-parser-1.2.1.tgz" + integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= + +raw-body@2.5.1: + version "2.5.1" + resolved "http://10.107.103.115:8001/raw-body/download/raw-body-2.5.1.tgz" + integrity sha1-/hsWKLGBtwAhXl/UI4n5i3E5KFc= + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.2: + version "2.5.2" + resolved "http://10.107.103.115:8001/raw-body/download/raw-body-2.5.2.tgz" + integrity sha1-mf69g7kOCJdQh+jx+UGaFJNmtoo= + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^4.0.2: + version "4.0.2" + resolved "http://10.107.103.115:8001/raw-loader/download/raw-loader-4.0.2.tgz" + integrity sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/read-pkg-up/download/read-pkg-up-2.0.0.tgz" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "http://10.107.103.115:8001/read-pkg-up/download/read-pkg-up-7.0.1.tgz" + integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/read-pkg/download/read-pkg-2.0.0.tgz" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "http://10.107.103.115:8001/read-pkg/download/read-pkg-5.2.0.tgz" + integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2: + version "2.3.8" + resolved "http://10.107.103.115:8001/readable-stream/download/readable-stream-2.3.8.tgz" + integrity sha1-kRJegEK7obmIf0k0X2J3Anzovps= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0: + version "3.6.1" + resolved "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz" + integrity sha1-+fm19TaSAlOz0m52YOfaTM/5u2I= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.0.6: + version "3.6.1" + resolved "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz" + integrity sha1-+fm19TaSAlOz0m52YOfaTM/5u2I= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.4.0: + version "3.6.1" + resolved "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz" + integrity sha1-+fm19TaSAlOz0m52YOfaTM/5u2I= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@3: + version "3.6.1" + resolved "http://10.107.103.115:8001/readable-stream/download/readable-stream-3.6.1.tgz" + integrity sha1-+fm19TaSAlOz0m52YOfaTM/5u2I= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "http://10.107.103.115:8001/readdirp/download/readdirp-2.2.1.tgz" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "http://10.107.103.115:8001/readdirp/download/readdirp-3.6.0.tgz" + integrity sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= + dependencies: + picomatch "^2.2.1" + +readline@^1.3.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/readline/download/readline-1.3.0.tgz" + integrity sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw= + +redent@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/redent/download/redent-3.0.0.tgz" + integrity sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8= + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "http://10.107.103.115:8001/regenerate-unicode-properties/download/regenerate-unicode-properties-10.1.0.tgz" + integrity sha1-fDGSyrbdJOIctEYeXd190k+oN0w= + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "http://10.107.103.115:8001/regenerate/download/regenerate-1.4.2.tgz" + integrity sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo= + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "http://10.107.103.115:8001/regenerator-runtime/download/regenerator-runtime-0.13.11.tgz" + integrity sha1-9tyj587sIFkNB62nhWNqkM3KF/k= + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "http://10.107.103.115:8001/regenerator-transform/download/regenerator-transform-0.15.1.tgz" + integrity sha1-9sTpn8G0WR94DbJYYyjk2anY3FY= + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/regex-not/download/regex-not-1.0.2.tgz" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "http://10.107.103.115:8001/regexp.prototype.flags/download/regexp.prototype.flags-1.4.3.tgz" + integrity sha1-h8qzD4D2ZmAYGju3v1mBqHKzZ6w= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.2.0" + resolved "http://10.107.103.115:8001/regexpp/download/regexpp-3.2.0.tgz" + integrity sha1-BCWido2PI7rXDKS5BGH6LxIT4bI= + +regexpu-core@^5.2.1: + version "5.2.2" + resolved "http://10.107.103.115:8001/regexpu-core/download/regexpu-core-5.2.2.tgz" + integrity sha1-Pk5dEhA7ZHSHEcOq1pk013GOdfw= + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsgen "^0.7.1" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.7.1: + version "0.7.1" + resolved "http://10.107.103.115:8001/regjsgen/download/regjsgen-0.7.1.tgz" + integrity sha1-7l7zDhjT8Jt8Npt258I3PtJVRvY= + +regjsparser@^0.9.1: + version "0.9.1" + resolved "http://10.107.103.115:8001/regjsparser/download/regjsparser-0.9.1.tgz" + integrity sha1-Jy0FqhDHwfZwlbH/Ct2uhEL8Vwk= + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "http://10.107.103.115:8001/relateurl/download/relateurl-0.2.7.tgz" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://10.107.103.115:8001/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/renderkid/download/renderkid-3.0.0.tgz" + integrity sha1-X9gj5NaVHTc1jsyaWLHwaDa2Joo= + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "http://10.107.103.115:8001/repeat-element/download/repeat-element-1.1.4.tgz" + integrity sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek= + +repeat-string@^1.6.1: + version "1.6.1" + resolved "http://10.107.103.115:8001/repeat-string/download/repeat-string-1.6.1.tgz" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.83.0: + version "2.88.2" + resolved "http://10.107.103.115:8001/request/download/request-2.88.2.tgz" + integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/require-directory/download/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "http://10.107.103.115:8001/require-from-string/download/require-from-string-2.0.2.tgz" + integrity sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/require-main-filename/download/require-main-filename-2.0.0.tgz" + integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + +requires-port@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/requires-port/download/requires-port-1.0.0.tgz" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/resolve-cwd/download/resolve-cwd-2.0.0.tgz" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/resolve-cwd/download/resolve-cwd-3.0.0.tgz" + integrity sha1-DwB18bslRHZs9zumpuKt/ryxPy0= + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/resolve-dir/download/resolve-dir-1.0.1.tgz" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/resolve-from/download/resolve-from-3.0.0.tgz" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/resolve-from/download/resolve-from-4.0.0.tgz" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + +resolve-from@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve-from@5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/resolve-from/download/resolve-from-5.0.0.tgz" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve-global@^1.0.0, resolve-global@1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/resolve-global/download/resolve-global-1.0.0.tgz" + integrity sha1-oqed9K8so/Sb93753azTItrRklU= + dependencies: + global-dirs "^0.1.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "http://10.107.103.115:8001/resolve-url/download/resolve-url-0.2.1.tgz" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.1" + resolved "http://10.107.103.115:8001/resolve/download/resolve-1.22.1.tgz" + integrity sha1-J8suu1P5GrtJRwqSi7p1WAZqwXc= + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/restore-cursor/download/restore-cursor-3.1.0.tgz" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "http://10.107.103.115:8001/ret/download/ret-0.1.15.tgz" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +retry@^0.12.0: + version "0.12.0" + resolved "http://10.107.103.115:8001/retry/download/retry-0.12.0.tgz" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/reusify/download/reusify-1.0.4.tgz" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +rfdc@^1.3.0: + version "1.3.0" + resolved "http://10.107.103.115:8001/rfdc/download/rfdc-1.3.0.tgz" + integrity sha1-0LfEQasnINBdxM8m4ByJYx2doIs= + +rimraf@^2.6.3: + version "2.7.1" + resolved "http://10.107.103.115:8001/rimraf/download/rimraf-2.7.1.tgz" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/rimraf/download/rimraf-3.0.2.tgz" + integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= + dependencies: + glob "^7.1.3" + +run-async@^2.4.0: + version "2.4.1" + resolved "http://10.107.103.115:8001/run-async/download/run-async-2.4.1.tgz" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +run-parallel@^1.1.9: + version "1.2.0" + resolved "http://10.107.103.115:8001/run-parallel/download/run-parallel-1.2.0.tgz" + integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.1, rxjs@^7.5.5: + version "7.8.0" + resolved "http://10.107.103.115:8001/rxjs/download/rxjs-7.8.0.tgz" + integrity sha1-kKk4hiqCiI/0xzWYEaWV4U4eCaQ= + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@>=5.1.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.2.1.tgz" + integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + +safe-buffer@~5.1.0: + version "5.1.2" + resolved "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-buffer@5.1.2: + version "5.1.2" + resolved "http://10.107.103.115:8001/safe-buffer/download/safe-buffer-5.1.2.tgz" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/safe-regex-test/download/safe-regex-test-1.0.0.tgz" + integrity sha1-eTuHTVJOs2QNGHOq0DWW2y1PIpU= + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/safe-regex/download/safe-regex-1.1.0.tgz" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: + version "2.1.2" + resolved "http://10.107.103.115:8001/safer-buffer/download/safer-buffer-2.1.2.tgz" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +schema-utils@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-1.0.0.tgz" + integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-2.7.1.tgz" + integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.1.1" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz" + integrity sha1-vHTEtraZXB2I92qLd76nIZ4MgoE= + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.0: + version "3.1.1" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz" + integrity sha1-vHTEtraZXB2I92qLd76nIZ4MgoE= + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.1.1" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-3.1.1.tgz" + integrity sha1-vHTEtraZXB2I92qLd76nIZ4MgoE= + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/schema-utils/download/schema-utils-4.0.0.tgz" + integrity sha1-YDMenjrnjsXRY1PEZ8NLOgodPfc= + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/select-hose/download/select-hose-2.0.0.tgz" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.14" + resolved "http://10.107.103.115:8001/selfsigned/download/selfsigned-1.10.14.tgz" + integrity sha1-7lHYTZ3OzGHgfkq6NPIpq1JcFXQ= + dependencies: + node-forge "^0.10.0" + +semver@^5.5.0: + version "5.7.1" + resolved "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@^5.6.0: + version "5.7.1" + resolved "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "http://10.107.103.115:8001/semver/download/semver-6.3.0.tgz" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + +semver@^7.2.1: + version "7.3.8" + resolved "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz" + integrity sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g= + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.4: + version "7.3.8" + resolved "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz" + integrity sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g= + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.8" + resolved "http://10.107.103.115:8001/semver/download/semver-7.3.8.tgz" + integrity sha1-B6eP6vs/ezI0fXJeM95+Ki32d5g= + dependencies: + lru-cache "^6.0.0" + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "http://10.107.103.115:8001/semver/download/semver-5.7.1.tgz" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@7.3.5: + version "7.3.5" + resolved "http://10.107.103.115:8001/semver/download/semver-7.3.5.tgz" + integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc= + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "http://10.107.103.115:8001/send/download/send-0.18.0.tgz" + integrity sha1-ZwFnzGVLBfWqSnZ/kRO7NxvHBr4= + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0: + version "6.0.1" + resolved "http://10.107.103.115:8001/serialize-javascript/download/serialize-javascript-6.0.1.tgz" + integrity sha1-sgbvsnw9oLCra1L0jRcLeZZFjlw= + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "http://10.107.103.115:8001/serve-index/download/serve-index-1.9.1.tgz" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "http://10.107.103.115:8001/serve-static/download/serve-static-1.15.0.tgz" + integrity sha1-+q7wjP/goaYvYMrQxOUTz/CslUA= + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/set-blocking/download/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/set-value/download/set-value-2.0.1.tgz" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +set-value@^2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/set-value/download/set-value-2.0.1.tgz" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +set-value@3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/set-value/download/set-value-3.0.2.tgz" + integrity sha1-dOjs0CPDPQ93GZ1BVAmkDyHmG5A= + dependencies: + is-plain-object "^2.0.4" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/setprototypeof/download/setprototypeof-1.1.0.tgz" + integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= + +setprototypeof@1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/setprototypeof/download/setprototypeof-1.2.0.tgz" + integrity sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ= + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "http://10.107.103.115:8001/shallow-clone/download/shallow-clone-3.0.1.tgz" + integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://10.107.103.115:8001/shebang-command/download/shebang-command-1.2.0.tgz" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/shebang-command/download/shebang-command-2.0.0.tgz" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-1.0.0.tgz" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/shebang-regex/download/shebang-regex-3.0.0.tgz" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + +side-channel@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/side-channel/download/side-channel-1.0.4.tgz" + integrity sha1-785cj9wQTudRslxY1CkAEfpeos8= + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "http://10.107.103.115:8001/signal-exit/download/signal-exit-3.0.7.tgz" + integrity sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk= + +sirv@^1.0.7: + version "1.0.19" + resolved "http://10.107.103.115:8001/sirv/download/sirv-1.0.19.tgz" + integrity sha1-HXOXmzjH/pH8uknIUoDaqcI2O0k= + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/slash/download/slash-3.0.0.tgz" + integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + +slash@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/slash/download/slash-4.0.0.tgz" + integrity sha1-JCI3IXbExsWt214q2oha+YSzlqc= + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-3.0.0.tgz" + integrity sha1-Md3BCTCht+C2ewjJbC9Jt3p4l4c= + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-4.0.0.tgz" + integrity sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms= + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "http://10.107.103.115:8001/slice-ansi/download/slice-ansi-5.0.0.tgz" + integrity sha1-tzBjxXqpb5zYgWVLFSlNldKFxCo= + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "http://10.107.103.115:8001/snapdragon-node/download/snapdragon-node-2.1.1.tgz" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/snapdragon-util/download/snapdragon-util-3.0.1.tgz" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "http://10.107.103.115:8001/snapdragon/download/snapdragon-0.8.2.tgz" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.6.1" + resolved "http://10.107.103.115:8001/sockjs-client/download/sockjs-client-1.6.1.tgz" + integrity sha1-NQuO2kLW1S3cAww5lDNkwR3K2AY= + dependencies: + debug "^3.2.7" + eventsource "^2.0.2" + faye-websocket "^0.11.4" + inherits "^2.0.4" + url-parse "^1.5.10" + +sockjs@^0.3.21: + version "0.3.24" + resolved "http://10.107.103.115:8001/sockjs/download/sockjs-0.3.24.tgz" + integrity sha1-ybyJlfM6ERvqA5XsMKoyBr21zM4= + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "http://10.107.103.115:8001/source-list-map/download/source-list-map-2.0.1.tgz" + integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= + +source-map-js@^0.6.2: + version "0.6.2" + resolved "http://10.107.103.115:8001/source-map-js/download/source-map-js-0.6.2.tgz" + integrity sha1-C7XeYxtBz72mz7qL0FqA79/SOF4= + +source-map-js@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/source-map-js/download/source-map-js-1.0.2.tgz" + integrity sha1-rbw2HZxi3zgBJefxYfccgm8eSQw= + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "http://10.107.103.115:8001/source-map-resolve/download/source-map-resolve-0.5.3.tgz" + integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@~0.5.20: + version "0.5.21" + resolved "http://10.107.103.115:8001/source-map-support/download/source-map-support-0.5.21.tgz" + integrity sha1-BP58f54e0tZiIzwoyys1ufY/bk8= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "http://10.107.103.115:8001/source-map-url/download/source-map-url-0.4.1.tgz" + integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY= + +source-map@^0.5.6: + version "0.5.7" + resolved "http://10.107.103.115:8001/source-map/download/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1, source-map@0.6.1: + version "0.6.1" + resolved "http://10.107.103.115:8001/source-map/download/source-map-0.6.1.tgz" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "http://10.107.103.115:8001/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz" + integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "http://10.107.103.115:8001/spdx-correct/download/spdx-correct-3.1.1.tgz" + integrity sha1-3s6BrJweZxPl99G28X1Gj6U9iak= + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz" + integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "http://10.107.103.115:8001/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz" + integrity sha1-z3D1BILu/cmOPOCmgz5KU87rpnk= + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "http://10.107.103.115:8001/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz" + integrity sha1-UMDYxAoU7Bv0Sbrmmg6kaFqdn5U= + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/spdy-transport/download/spdy-transport-3.0.0.tgz" + integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "http://10.107.103.115:8001/spdy/download/spdy-4.0.2.tgz" + integrity sha1-t09GYgOj7aRSwCSSuR+56EonZ3s= + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "http://10.107.103.115:8001/split-string/download/split-string-3.1.0.tgz" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +split2@^3.0.0: + version "3.2.2" + resolved "http://10.107.103.115:8001/split2/download/split2-3.2.2.tgz" + integrity sha1-vyzyo32DgxLCSciSBv16F90SNl8= + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "http://10.107.103.115:8001/sprintf-js/download/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.17.0" + resolved "http://10.107.103.115:8001/sshpk/download/sshpk-1.17.0.tgz" + integrity sha1-V4CC2S1P5hKxMAdJblQ/oPvL5MU= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stable@^0.1.8: + version "0.1.8" + resolved "http://10.107.103.115:8001/stable/download/stable-0.1.8.tgz" + integrity sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88= + +stackframe@^1.3.4: + version "1.3.4" + resolved "http://10.107.103.115:8001/stackframe/download/stackframe-1.3.4.tgz" + integrity sha1-uIGgBMjBSaXo7+831RsW5BKUMxA= + +static-extend@^0.1.1: + version "0.1.2" + resolved "http://10.107.103.115:8001/static-extend/download/static-extend-0.1.2.tgz" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "http://10.107.103.115:8001/statuses/download/statuses-1.5.0.tgz" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@2.0.1: + version "2.0.1" + resolved "http://10.107.103.115:8001/statuses/download/statuses-2.0.1.tgz" + integrity sha1-VcsADM8dSHKL0jxoWgY5mM8aG2M= + +std-env@^3.0.1: + version "3.3.2" + resolved "http://10.107.103.115:8001/std-env/download/std-env-3.3.2.tgz" + integrity sha1-ryc0OwAWFgFVNCkheDJ7ICue6VU= + +stickybits@^3.7.9: + version "3.7.11" + resolved "http://10.107.103.115:8001/stickybits/download/stickybits-3.7.11.tgz" + integrity sha1-RgnzqR70IJmHwaRbMT5faCski/Y= + +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "http://10.107.103.115:8001/string_decoder/download/string_decoder-1.1.1.tgz" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +string-argv@^0.3.1: + version "0.3.1" + resolved "http://10.107.103.115:8001/string-argv/download/string-argv-0.3.1.tgz" + integrity sha1-leL77AQnrhkYSTX4FtdKqkxcGdo= + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "http://10.107.103.115:8001/string-width/download/string-width-3.1.0.tgz" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "http://10.107.103.115:8001/string-width/download/string-width-4.2.3.tgz" + integrity sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.1.2" + resolved "http://10.107.103.115:8001/string-width/download/string-width-5.1.2.tgz" + integrity sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q= + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "http://10.107.103.115:8001/string.prototype.trimend/download/string.prototype.trimend-1.0.6.tgz" + integrity sha1-xKJ/oCbZedecBPFzl/JQpGKURTM= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "http://10.107.103.115:8001/string.prototype.trimstart/download/string.prototype.trimstart-1.0.6.tgz" + integrity sha1-6Qq2aqjkAH2S71kbvzzUIsVr3PQ= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0: + version "5.2.0" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^5.2.0: + version "5.2.0" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-5.2.0.tgz" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-6.0.1.tgz" + integrity sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "http://10.107.103.115:8001/strip-ansi/download/strip-ansi-7.0.1.tgz" + integrity sha1-YXQKCM42th5Q5lZT8HBg0ACXX7I= + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/strip-bom/download/strip-bom-3.0.0.tgz" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/strip-bom/download/strip-bom-4.0.0.tgz" + integrity sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/strip-eof/download/strip-eof-1.0.0.tgz" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/strip-final-newline/download/strip-final-newline-2.0.0.tgz" + integrity sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "http://10.107.103.115:8001/strip-indent/download/strip-indent-3.0.0.tgz" + integrity sha1-wy4c7pQLazQyx3G8LFS8znPNMAE= + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: + version "3.1.1" + resolved "http://10.107.103.115:8001/strip-json-comments/download/strip-json-comments-3.1.1.tgz" + integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= + +style-loader@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/style-loader/download/style-loader-2.0.0.tgz" + integrity sha1-lmlgL9RpB0DqrsE3eZoDrdu8OTw= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "http://10.107.103.115:8001/stylehacks/download/stylehacks-5.1.1.tgz" + integrity sha1-eTSjTrWdcVIUn6adbp5W8vw0vMk= + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0: + version "5.5.0" + resolved "http://10.107.103.115:8001/supports-color/download/supports-color-5.5.0.tgz" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "http://10.107.103.115:8001/supports-color/download/supports-color-6.1.0.tgz" + integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "http://10.107.103.115:8001/supports-color/download/supports-color-7.2.0.tgz" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "http://10.107.103.115:8001/supports-color/download/supports-color-8.1.1.tgz" + integrity sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw= + dependencies: + has-flag "^4.0.0" + +supports-color@^9.0.2: + version "9.3.1" + resolved "http://10.107.103.115:8001/supports-color/download/supports-color-9.3.1.tgz" + integrity sha1-NOStPHHJo52uMlTsxGybdOieFaY= + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha1-btpL00SjyUrqN21MwxvHcxEDngk= + +svg-tags@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/svg-tags/download/svg-tags-1.0.0.tgz" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^2.3.1, svgo@^2.7.0: + version "2.8.0" + resolved "http://10.107.103.115:8001/svgo/download/svgo-2.8.0.tgz" + integrity sha1-T/gMzmcQ3CeV8MfHQQHmdkz8zSQ= + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +table@^6.0.9: + version "6.8.1" + resolved "http://10.107.103.115:8001/table/download/table-6.8.1.tgz" + integrity sha1-6itxNZ/gOwF6X7wpYgRHEVgIC98= + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "http://10.107.103.115:8001/tapable/download/tapable-2.2.1.tgz" + integrity sha1-GWenPvQGCoLxKrlq+G1S/bdu7KA= + +terser-webpack-plugin@^5.1.3: + version "5.3.6" + resolved "http://10.107.103.115:8001/terser-webpack-plugin/download/terser-webpack-plugin-5.3.6.tgz" + integrity sha1-VZCuwxqjxvdxzhsazKYGOeqzGVw= + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + +terser@^5.10.0, terser@^5.14.1: + version "5.16.5" + resolved "http://10.107.103.115:8001/terser/download/terser-5.16.5.tgz" + integrity sha1-HChcoGVfRn+Srxu6tGq3LRywjlo= + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "http://10.107.103.115:8001/text-extensions/download/text-extensions-1.9.0.tgz" + integrity sha1-GFPkX+45yUXOb2w2stZZtaq8KiY= + +text-table@^0.2.0: + version "0.2.0" + resolved "http://10.107.103.115:8001/text-table/download/text-table-0.2.0.tgz" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +thenify-all@^1.0.0: + version "1.6.0" + resolved "http://10.107.103.115:8001/thenify-all/download/thenify-all-1.6.0.tgz" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "http://10.107.103.115:8001/thenify/download/thenify-3.3.1.tgz" + integrity sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8= + dependencies: + any-promise "^1.0.0" + +through@^2.3.6, through@^2.3.8, "through@>=2.2.7 <3": + version "2.3.8" + resolved "http://10.107.103.115:8001/through/download/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +through2@^4.0.0: + version "4.0.2" + resolved "http://10.107.103.115:8001/through2/download/through2-4.0.2.tgz" + integrity sha1-p846wqeosLlmyA58SfBITDsjl2Q= + dependencies: + readable-stream "3" + +thunky@^1.0.2: + version "1.1.0" + resolved "http://10.107.103.115:8001/thunky/download/thunky-1.1.0.tgz" + integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= + +tiny-each-async@2.0.3: + version "2.0.3" + resolved "http://10.107.103.115:8001/tiny-each-async/download/tiny-each-async-2.0.3.tgz" + integrity sha1-jru/1tYpXxNwAD+7NxYq/loKUdE= + +tmp@^0.0.33: + version "0.0.33" + resolved "http://10.107.103.115:8001/tmp/download/tmp-0.0.33.tgz" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/to-fast-properties/download/to-fast-properties-2.0.0.tgz" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "http://10.107.103.115:8001/to-object-path/download/to-object-path-0.3.0.tgz" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "http://10.107.103.115:8001/to-regex-range/download/to-regex-range-2.1.1.tgz" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "http://10.107.103.115:8001/to-regex-range/download/to-regex-range-5.0.1.tgz" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "http://10.107.103.115:8001/to-regex/download/to-regex-3.0.2.tgz" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/toidentifier/download/toidentifier-1.0.1.tgz" + integrity sha1-O+NDIaiKgg7RvYDfqjPkefu43TU= + +totalist@^1.0.0: + version "1.1.0" + resolved "http://10.107.103.115:8001/totalist/download/totalist-1.1.0.tgz" + integrity sha1-pNZaPlRlF3AePlw3pHpwrJf+Vt8= + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "http://10.107.103.115:8001/tough-cookie/download/tough-cookie-2.5.0.tgz" + integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "http://10.107.103.115:8001/trim-newlines/download/trim-newlines-3.0.1.tgz" + integrity sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ= + +ts-node@^9: + version "9.1.1" + resolved "http://10.107.103.115:8001/ts-node/download/ts-node-9.1.1.tgz" + integrity sha1-UamkUKPpWUAb2l8ASnLVS5NtN20= + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsconfig-paths@^3.9.0: + version "3.14.1" + resolved "http://10.107.103.115:8001/tsconfig-paths/download/tsconfig-paths-3.14.1.tgz" + integrity sha1-ugc0WZ6Oo2yGJ5jpILzxYyd7E3o= + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2, tslib@^2.0.3, tslib@^2.1.0: + version "2.5.0" + resolved "http://10.107.103.115:8001/tslib/download/tslib-2.5.0.tgz" + integrity sha1-Qr/thvV4eutB0DGGbI9AJCng/d8= + +tslib@2.3.0: + version "2.3.0" + resolved "http://10.107.103.115:8001/tslib/download/tslib-2.3.0.tgz" + integrity sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://10.107.103.115:8001/tunnel-agent/download/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://10.107.103.115:8001/tweetnacl/download/tweetnacl-0.14.5.tgz" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "http://10.107.103.115:8001/type-check/download/type-check-0.4.0.tgz" + integrity sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE= + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.18.0: + version "0.18.1" + resolved "http://10.107.103.115:8001/type-fest/download/type-fest-0.18.1.tgz" + integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= + +type-fest@^0.20.2: + version "0.20.2" + resolved "http://10.107.103.115:8001/type-fest/download/type-fest-0.20.2.tgz" + integrity sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ= + +type-fest@^0.21.3: + version "0.21.3" + resolved "http://10.107.103.115:8001/type-fest/download/type-fest-0.21.3.tgz" + integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= + +type-fest@^0.6.0: + version "0.6.0" + resolved "http://10.107.103.115:8001/type-fest/download/type-fest-0.6.0.tgz" + integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= + +type-fest@^0.8.1: + version "0.8.1" + resolved "http://10.107.103.115:8001/type-fest/download/type-fest-0.8.1.tgz" + integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + +type-is@~1.6.18: + version "1.6.18" + resolved "http://10.107.103.115:8001/type-is/download/type-is-1.6.18.tgz" + integrity sha1-TlUs0F3wlGfcvE73Od6J8s83wTE= + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "http://10.107.103.115:8001/typed-array-length/download/typed-array-length-1.0.4.tgz" + integrity sha1-idg3heXECYvscuCLMZZR8OrJwbs= + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.4.3, typescript@>=2.7: + version "4.9.5" + resolved "http://10.107.103.115:8001/typescript/download/typescript-4.9.5.tgz" + integrity sha1-CVl5+bzA0J2jJNWNA86Pg3TL5lo= + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/unbox-primitive/download/unbox-primitive-1.0.2.tgz" + integrity sha1-KQMgIQV9Xmzb0IxRKcIm3/jtb54= + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw= + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM= + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "http://10.107.103.115:8001/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.1.0.tgz" + integrity sha1-y1//3NFqBRJPWksL98N3Agisu+A= + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g= + +union-value@^1.0.0: + version "1.0.1" + resolved "http://10.107.103.115:8001/union-value/download/union-value-1.0.1.tgz" + integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/universalify/download/universalify-2.0.0.tgz" + integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/unpipe/download/unpipe-1.0.0.tgz" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "http://10.107.103.115:8001/unset-value/download/unset-value-1.0.0.tgz" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "http://10.107.103.115:8001/upath/download/upath-1.2.0.tgz" + integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "http://10.107.103.115:8001/update-browserslist-db/download/update-browserslist-db-1.0.10.tgz" + integrity sha1-D1S4dlRXJvF9AM2aJWHm2t6UP/M= + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "http://10.107.103.115:8001/uri-js/download/uri-js-4.4.1.tgz" + integrity sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "http://10.107.103.115:8001/urix/download/urix-0.1.0.tgz" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^4.1.1: + version "4.1.1" + resolved "http://10.107.103.115:8001/url-loader/download/url-loader-4.1.1.tgz" + integrity sha1-KFBekFyuFYzwfJLKYi1/I35wpOI= + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse@^1.5.10: + version "1.5.10" + resolved "http://10.107.103.115:8001/url-parse/download/url-parse-1.5.10.tgz" + integrity sha1-nTwvc2wddd070r5QfcwRHx4uqcE= + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "http://10.107.103.115:8001/url/download/url-0.11.0.tgz" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "http://10.107.103.115:8001/use/download/use-3.1.1.tgz" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://10.107.103.115:8001/util-deprecate/download/util-deprecate-1.0.2.tgz" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +utila@~0.4: + version "0.4.0" + resolved "http://10.107.103.115:8001/utila/download/utila-0.4.0.tgz" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/utils-merge/download/utils-merge-1.0.1.tgz" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2: + version "3.4.0" + resolved "http://10.107.103.115:8001/uuid/download/uuid-3.4.0.tgz" + integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= + +uuid@^8.3.2: + version "8.3.2" + resolved "http://10.107.103.115:8001/uuid/download/uuid-8.3.2.tgz" + integrity sha1-gNW1ztJxu5r2xEXyGhoExgbO++I= + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "http://10.107.103.115:8001/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz" + integrity sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "http://10.107.103.115:8001/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz" + integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "http://10.107.103.115:8001/vary/download/vary-1.1.2.tgz" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +verror@1.10.0: + version "1.10.0" + resolved "http://10.107.103.115:8001/verror/download/verror-1.10.0.tgz" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vue-demi@*: + version "0.13.11" + resolved "http://10.107.103.115:8001/vue-demi/download/vue-demi-0.13.11.tgz" + integrity sha1-fZA2m9rol02HsZc1ZK05AYJBDZk= + +vue-eslint-parser@^7.10.0: + version "7.11.0" + resolved "http://10.107.103.115:8001/vue-eslint-parser/download/vue-eslint-parser-7.11.0.tgz" + integrity sha1-IUtd6pYQB/z/su5luJEjB2KNDa8= + dependencies: + debug "^4.1.1" + eslint-scope "^5.1.1" + eslint-visitor-keys "^1.1.0" + espree "^6.2.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^6.3.0" + +vue-i18n@^9.0.0: + version "9.2.2" + resolved "http://10.107.103.115:8001/vue-i18n/download/vue-i18n-9.2.2.tgz" + integrity sha1-rrSdlCSSPHfg1kQePyHa/OzQ5mY= + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + "@vue/devtools-api" "^6.2.1" + +vue-loader@^16.1.2: + version "16.8.3" + resolved "http://10.107.103.115:8001/vue-loader/download/vue-loader-16.8.3.tgz" + integrity sha1-1D5nXe9bqTRdbH8FkUwT2GGZcIc= + dependencies: + chalk "^4.1.0" + hash-sum "^2.0.0" + loader-utils "^2.0.0" + +vue-router@^4.0.1: + version "4.1.6" + resolved "http://10.107.103.115:8001/vue-router/download/vue-router-4.1.6.tgz" + integrity sha1-twMDc34StIFFeNIdaNIWGEaTdaE= + dependencies: + "@vue/devtools-api" "^6.4.5" + +vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.0.2, vue@^3.0.5, vue@^3.2.0, vue@^3.2.24, vue@^3.2.37, vue@3.2.26: + version "3.2.26" + resolved "http://10.107.103.115:8001/vue/download/vue-3.2.26.tgz" + integrity sha1-XbV1WD7K5JXHyqXBL9WQ3/y7dj4= + dependencies: + "@vue/compiler-dom" "3.2.26" + "@vue/compiler-sfc" "3.2.26" + "@vue/runtime-dom" "3.2.26" + "@vue/server-renderer" "3.2.26" + "@vue/shared" "3.2.26" + +vuex@4.0.2: + version "4.0.2" + resolved "http://10.107.103.115:8001/vuex/download/vuex-4.0.2.tgz" + integrity sha1-+Jbb1b8qDpY/AMZ+m2EN50nMrMk= + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + +watchpack@^2.4.0: + version "2.4.0" + resolved "http://10.107.103.115:8001/watchpack/download/watchpack-2.4.0.tgz" + integrity sha1-+jMDI3SWLHgRP5PH8vtMVMmGKl0= + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "http://10.107.103.115:8001/wbuf/download/wbuf-1.7.3.tgz" + integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "http://10.107.103.115:8001/wcwidth/download/wcwidth-1.0.1.tgz" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webpack-bundle-analyzer@^4.4.0: + version "4.8.0" + resolved "http://10.107.103.115:8001/webpack-bundle-analyzer/download/webpack-bundle-analyzer-4.8.0.tgz" + integrity sha1-lRuKr0kfZl0q4yXYuE2iKRV7HQQ= + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-chain@^6.5.1: + version "6.5.1" + resolved "http://10.107.103.115:8001/webpack-chain/download/webpack-chain-6.5.1.tgz" + integrity sha1-TycoTLu2N+PI+970Pu9YjU2GEgY= + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^2.0.1" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "http://10.107.103.115:8001/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz" + integrity sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU= + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.2: + version "3.11.3" + resolved "http://10.107.103.115:8001/webpack-dev-server/download/webpack-dev-server-3.11.3.tgz" + integrity sha1-jIa50oEr8TXTybzm8HtxjjD3w9M= + dependencies: + ansi-html-community "0.0.8" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/webpack-log/download/webpack-log-2.0.0.tgz" + integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.1.0: + version "1.4.3" + resolved "http://10.107.103.115:8001/webpack-sources/download/webpack-sources-1.4.3.tgz" + integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM= + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "http://10.107.103.115:8001/webpack-sources/download/webpack-sources-3.2.3.tgz" + integrity sha1-LU2quEUf1LJAzCcFX/agwszqDN4= + +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.27.0 || ^5.0.0", "webpack@^4.4.0 || ^5.0.0", webpack@^4.5.0, webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.24.2, webpack@>=2, "webpack@3 || 4 || 5": + version "5.75.0" + resolved "http://10.107.103.115:8001/webpack/download/webpack-5.75.0.tgz" + integrity sha1-HkQEaGR7JQWGDpTJ/z5E1bWCwVI= + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.0-3: + version "5.0.2" + resolved "http://10.107.103.115:8001/webpackbar/download/webpackbar-5.0.2.tgz" + integrity sha1-091GYhHHOFJ0HfyEK3VW3LwrBXA= + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: + version "0.7.4" + resolved "http://10.107.103.115:8001/websocket-driver/download/websocket-driver-0.7.4.tgz" + integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "http://10.107.103.115:8001/websocket-extensions/download/websocket-extensions-0.1.4.tgz" + integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI= + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "http://10.107.103.115:8001/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz" + integrity sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY= + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "http://10.107.103.115:8001/which-module/download/which-module-2.0.0.tgz" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "http://10.107.103.115:8001/which-typed-array/download/which-typed-array-1.1.9.tgz" + integrity sha1-MHz4mAJYSM+ZXnlehCPH8zfvveY= + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.2.14, which@^1.2.9: + version "1.3.1" + resolved "http://10.107.103.115:8001/which/download/which-1.3.1.tgz" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "http://10.107.103.115:8001/which/download/which-2.0.2.tgz" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +word-wrap@^1.0.3, word-wrap@^1.2.3: + version "1.2.3" + resolved "http://10.107.103.115:8001/word-wrap/download/word-wrap-1.2.3.tgz" + integrity sha1-YQY29rH3A4kb00dxzLF/uTtHB5w= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-5.1.0.tgz" + integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-6.2.0.tgz" + integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "http://10.107.103.115:8001/wrap-ansi/download/wrap-ansi-7.0.0.tgz" + integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "http://10.107.103.115:8001/wrappy/download/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.2" + resolved "http://10.107.103.115:8001/ws/download/ws-6.2.2.tgz" + integrity sha1-3Vzb1XqZeZFgl2UtePHMX66gwy4= + dependencies: + async-limiter "~1.0.0" + +ws@^7.3.1: + version "7.5.9" + resolved "http://10.107.103.115:8001/ws/download/ws-7.5.9.tgz" + integrity sha1-VPp9sp9MfOxosd3TqJ3gmZQrtZE= + +y18n@^4.0.0: + version "4.0.3" + resolved "http://10.107.103.115:8001/y18n/download/y18n-4.0.3.tgz" + integrity sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8= + +y18n@^5.0.5: + version "5.0.8" + resolved "http://10.107.103.115:8001/y18n/download/y18n-5.0.8.tgz" + integrity sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU= + +yallist@^3.0.2: + version "3.1.1" + resolved "http://10.107.103.115:8001/yallist/download/yallist-3.1.1.tgz" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yallist@^4.0.0: + version "4.0.0" + resolved "http://10.107.103.115:8001/yallist/download/yallist-4.0.0.tgz" + integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + +yaml@^1.10.0, yaml@^1.10.2: + version "1.10.2" + resolved "http://10.107.103.115:8001/yaml/download/yaml-1.10.2.tgz" + integrity sha1-IwHF/78StGfejaIzOkWeKeeSDks= + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-13.1.2.tgz" + integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.9: + version "20.2.9" + resolved "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-20.2.9.tgz" + integrity sha1-LrfcOwKJcY/ClfNidThFxBoMlO4= + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "http://10.107.103.115:8001/yargs-parser/download/yargs-parser-21.1.1.tgz" + integrity sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU= + +yargs@^13.3.2: + version "13.3.2" + resolved "http://10.107.103.115:8001/yargs/download/yargs-13.3.2.tgz" + integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^16.0.0: + version "16.2.0" + resolved "http://10.107.103.115:8001/yargs/download/yargs-16.2.0.tgz" + integrity sha1-HIK/D2tqZur85+8w43b0mhJHf2Y= + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.0: + version "17.7.1" + resolved "http://10.107.103.115:8001/yargs/download/yargs-17.7.1.tgz" + integrity sha1-NKd2RSAdGo/FITrOeHwiDqu9CWc= + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "http://10.107.103.115:8001/yn/download/yn-3.1.1.tgz" + integrity sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "http://10.107.103.115:8001/yocto-queue/download/yocto-queue-0.1.0.tgz" + integrity sha1-ApTrPe4FAo0x7hpfosVWpqrxChs= + +zrender@5.2.1: + version "5.2.1" + resolved "http://10.107.103.115:8001/zrender/download/zrender-5.2.1.tgz" + integrity sha1-X0u9qRW6bUErCxncJDG+qtBUF7s= + dependencies: + tslib "2.3.0" diff --git a/pom.xml b/pom.xml index defe1578c..67a83b51d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ com.webank.wedatasphere.streamis streamis - 0.3.0 + 0.3.1 pom Streamis Project Parent POM @@ -48,11 +48,11 @@ 1.4.0 4.12 1.1.2 - 0.3.0 - 2.12.17 + 0.3.1 + 2.11.12 1.8 3.3.3 - 2.10.1 + 2.8.5 1.31 2.13.2 3.1.1 @@ -65,12 +65,12 @@ 2.3.7.RELEASE 2.2.6.RELEASE 3.1.1 - 3.8.1 + 3.12.0 2.6 0.9.10 2.21 1.9.5 - 0.3.0 + 1.4.19 5.1.47 2.0.1.Final 1.4.20 diff --git a/streamis-appconn/pom.xml b/streamis-appconn/pom.xml index 40fd6e52f..d71d69abb 100644 --- a/streamis-appconn/pom.xml +++ b/streamis-appconn/pom.xml @@ -5,7 +5,7 @@ streamis com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -63,6 +63,12 @@ linkis-module ${linkis.version} provided + + + snakeyaml + org.yaml + + com.webank.wedatasphere.dss @@ -125,7 +131,7 @@ src/main/resources - **/application.yml + **/*.yml **/bootstrap.yml **/log4j2.xml diff --git a/streamis-jobmanager/pom.xml b/streamis-jobmanager/pom.xml index 58a9cda15..36aac3adf 100644 --- a/streamis-jobmanager/pom.xml +++ b/streamis-jobmanager/pom.xml @@ -20,7 +20,7 @@ streamis com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -28,6 +28,8 @@ pom streamis-jobmanager-common + streamis-job-errorcode + streamis-job-audit-log streamis-job-launcher streamis-job-manager streamis-jobmanager-server diff --git a/streamis-jobmanager/streamis-job-audit-log/pom.xml b/streamis-jobmanager/streamis-job-audit-log/pom.xml new file mode 100644 index 000000000..575dc209c --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/pom.xml @@ -0,0 +1,85 @@ + + + + + + streamis + com.webank.wedatasphere.streamis + 0.3.1 + ../../pom.xml + + 4.0.0 + + streamis-job-audit-log + + + 8 + 8 + + + + + + org.apache.linkis + linkis-common + + + org.apache.linkis + linkis-module + + + org.mybatis + mybatis + 3.5.7 + compile + + + com.webank.wedatasphere.streamis + streamis-job-manager-service + ${streamis.version} + compile + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + src/main/java + + **/*.xml + + + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/AuditLogAspect.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/AuditLogAspect.java new file mode 100644 index 000000000..18e8403e7 --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/AuditLogAspect.java @@ -0,0 +1,348 @@ +package com.webank.wedatasphere.streamis.audit.log.aspect; + +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; +import com.webank.wedatasphere.streamis.audit.log.conf.JobAuditConf; +import com.webank.wedatasphere.streamis.audit.log.entity.StreamAuditLog; +import com.webank.wedatasphere.streamis.audit.log.service.AuditLogService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.linkis.proxy.ProxyUserEntity; +import org.apache.linkis.server.BDPJettyServerHelper; +import org.apache.linkis.server.utils.ModuleUserUtils; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Aspect +@Component +@ConditionalOnProperty(name = "feature.enabled", havingValue = "true", matchIfMissing = true) +public class AuditLogAspect { + + @Autowired + private AuditLogService auditLogService; + + private static final Logger LOG = LoggerFactory.getLogger(AuditLogAspect.class); + + private static final Pattern PROJECT_NAME_PATTERN = Pattern.compile("[?&]projectName=([^&]+)"); + + + @PostConstruct + private void init() { + LOG.info("job log audit enabled : " + JobAuditConf.AUDIT_LOG_ENABLE.getValue()); + } + + + @Around("execution(* com.webank.wedatasphere.streamis.jobmanager.restful.api..*.*(..)) || execution(* com.webank.wedatasphere.streamis.projectmanager.restful.api..*.*(..))") + public Object captureAndLogAuditLog(ProceedingJoinPoint joinPoint) throws Throwable { + HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String method = req.getMethod(); + String requestURI = req.getRequestURI(); + ProxyUserEntity proxyUserEntity = ModuleUserUtils.getProxyUserEntity(req, "record audit log"); + String proxyUser = proxyUserEntity.getProxyUser(); + String userName = proxyUserEntity.getUsername(); + + Map requestParams = getRequestParamsByProceedingJoinPoint(joinPoint); + Object result = null; + long startTime = System.currentTimeMillis(); + try { + result = joinPoint.proceed(); + } catch (Exception e) { + LOG.error("Error executing method: " + joinPoint.getSignature().toShortString()); + throw e; + } + long costTime = System.currentTimeMillis() - startTime; + result = Optional.ofNullable(result).orElse("--"); + logAuditInformationAsync(req, requestURI, requestParams, parseObjectToString(result), proxyUser, userName, method, costTime); + return result; + } + + @Async + public void logAuditInformationAsync(HttpServletRequest req, String requestURI, Map requestParams, + String result, String proxyUser, String userName, String method, long costTimeMills) { + if (!JobAuditConf.AUDIT_LOG_ENABLE.getValue()) { + return; + } + if (StringUtils.isNotBlank(JobAuditConf.AUDIT_LOG_URI_SKIP.getValue())) { + boolean end = false; + String tmpUri = ""; + for (String uri : JobAuditConf.AUDIT_LOG_URI_SKIP.getValue().split(",")) { + if (requestURI.equalsIgnoreCase(uri)) { + end = true; + tmpUri = uri; + break; + } + } + if (end) { + LOG.debug("skip to store requestUri : {}, because it matches skipped uri : {}", requestURI, tmpUri); + return; + } + } + String projectName = ""; + try { + projectName = getProjectNameFromRequest(req, requestParams, method); + } catch (Exception e) { + LOG.error("审计日志projectName获取失败"); + projectName = getProjectNameFromReferer(req.getHeader("Referer")); + } + if (projectName == null || projectName.isEmpty()) { + projectName = getProjectNameFromReferer(req.getHeader("Referer")); + } + try { + logAuditInformation(requestURI, parseObjectToString(requestParams), result, proxyUser, userName, method, projectName, costTimeMills); + } catch (Exception e) { + LOG.error("审计日志记录保存失败"); + } + } + + + private void logAuditInformation(String requestURI, String requestParams, String result, String proxyUser, String userName, String method, String projectName, long costTimeMills) { + String apiDesc = InterfaceDescriptionEnum.getDescriptionByUrl(requestURI); + String clientIp = getClientIp(); + StreamAuditLog auditLog = new StreamAuditLog(); + auditLog.setApiName(requestURI); + auditLog.setApiDesc(apiDesc); + auditLog.setInputParameters(requestParams); + auditLog.setOutputParameters(result); + auditLog.setProxyUser(proxyUser); + auditLog.setUser(userName); + auditLog.setOperateTime(new Date()); + auditLog.setApiType(method); + auditLog.setProjectName(projectName); + auditLog.setClientIp(clientIp); + auditLog.setCostTimeMills(costTimeMills); + auditLogService.saveAuditLog(auditLog); + } + + /** + * 获取入参 + * + * @param proceedingJoinPoint + * @return + */ + private Map getRequestParamsByProceedingJoinPoint(ProceedingJoinPoint proceedingJoinPoint) { + //参数名 + String[] paramNames = ((MethodSignature) proceedingJoinPoint.getSignature()).getParameterNames(); + //参数值 + Object[] paramValues = proceedingJoinPoint.getArgs(); + + return buildRequestParam(paramNames, paramValues); + } + + private Map buildRequestParam(String[] paramNames, Object[] paramValues) { + Map requestParams = new HashMap<>(); + for (int i = 0; i < paramNames.length; i++) { + Object value = paramValues[i]; + //如果是文件对象 + if (value instanceof MultipartFile) { + MultipartFile file = (MultipartFile) value; + value = file.getOriginalFilename(); + } + //如果是批量文件上传 + if (value instanceof List) { + try { + List multipartFiles = castList(value, MultipartFile.class); + if (multipartFiles != null) { + List fileNames = new ArrayList<>(); + for (MultipartFile file : multipartFiles) { + fileNames.add(file.getOriginalFilename()); + } + + requestParams.put(paramNames[i], fileNames); + break; + } + } catch (ClassCastException e) { + + } + } + if (!paramNames[i].equalsIgnoreCase("req") && !paramNames[i].equalsIgnoreCase("request")) { + requestParams.put(paramNames[i], value); + } + } + return requestParams; + } + + private static List castList(Object obj, Class clazz) { + List result = new ArrayList(); + if (obj instanceof List) { + for (Object o : (List) obj) { + result.add(clazz.cast(o)); + } + return result; + } + return null; + } + + /** + * 获取ip + * + * @return + */ + private String getClientIp() { + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String ipAddress = request.getHeader("X-Forwarded-For"); + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getHeader("X-Real-IP"); + } + if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { + ipAddress = request.getRemoteAddr(); + } + // 多个代理服务器时,取第一个IP地址 + int index = ipAddress.indexOf(","); + if (index != -1) { + ipAddress = ipAddress.substring(0, index); + } + return ipAddress; + } + + + private static String getProjectNameFromReferer(String referer) { + String projectName = " "; + if (referer != null) { + Matcher matcher = PROJECT_NAME_PATTERN.matcher(referer); + if (matcher.find()) { + projectName = matcher.group(1); + } + } + return projectName; + } + + private String getProjectNameFromRequest(HttpServletRequest req, Map requestParams, String method) { + if ("GET".equalsIgnoreCase(method)) { + return getProjectNameFromGetRequest(req); + } else if ("PUT".equalsIgnoreCase(method)) { + return getProjectNameFromPutRequest(req, requestParams); + } else if ("POST".equalsIgnoreCase(method)) { + return getProjectNameFromPostRequest(req, requestParams); + } + return ""; + } + + private String getProjectNameFromGetRequest(HttpServletRequest req) { + if (req.getRequestURI().equals(InterfaceDescriptionEnum.CONFIG_GET_WORKSPACE_USERS.getUrl()) + || req.getRequestURI().equals(InterfaceDescriptionEnum.CONFIG_DEFINITIONS.getUrl())) { + return ""; + } + String projectName = req.getParameter("projectName"); + if (projectName == null || projectName.isEmpty()) { + Long jobId = Long.valueOf(req.getParameter("jobId")); + projectName = auditLogService.getProjectNameById(jobId); + + } + return projectName; + } + + private String getProjectNameFromPutRequest(HttpServletRequest req, Map requestParams) { + String projectName = ""; + if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_EXECUTE_INSPECT.getUrl())) { + String[] jobIdArray = req.getParameterValues("jobId"); + List jobIdList = Arrays.stream(jobIdArray) + .map(Integer::valueOf) + .collect(Collectors.toList()); + Integer jobId = jobIdList.get(0); + projectName = auditLogService.getProjectNameById(Long.valueOf(jobId)); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_STATUS.getUrl())) { + Map map = BDPJettyServerHelper.gson().fromJson(requestParams.get("requestMap").toString(), Map.class); + List jobIds = (List) map.get("id_list"); + Long jobId = Math.round(jobIds.get(0)); + projectName = auditLogService.getProjectNameById(jobId); + } else { + String jobId = req.getParameter("jobId"); + projectName = auditLogService.getProjectNameById(Long.valueOf(jobId)); + } + return projectName; + } + + private String getProjectNameFromPostRequest(HttpServletRequest req, Map requestParams) { + String projectName = ""; + Gson gson = BDPJettyServerHelper.gson(); + if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_UPDATE_LABEL.getUrl())) { + Map tasks = gson.fromJson(gson.toJson(requestParams.get("bulkUpdateLabelRequest")), Map.class); + List> list = gson.fromJson(tasks.get("tasks").toString(), new TypeToken>>() { + }.getType()); + String jobId = list.get(0).get("id").toString(); + projectName = auditLogService.getProjectNameById((long) Double.parseDouble(jobId)); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_EXECUTE.getUrl())) { + Map map = gson.fromJson(requestParams.get("json").toString(), Map.class); + Long jobId = (long) Double.parseDouble(map.get("jobId").toString()); + projectName = auditLogService.getProjectNameById(jobId); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_UPDATE_CONTENT.getUrl())) { + Map contentRequest = gson.fromJson(gson.toJson(requestParams.get("contentRequest")), Map.class); + Long jobId = (long) Double.parseDouble(contentRequest.get("jobId").toString()); + projectName = auditLogService.getProjectNameById(jobId); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_BULK_EXECUTION.getUrl())) { + Map bulkRequest = gson.fromJson(gson.toJson(requestParams.get("execBulkRequest")), Map.class); + List bulkSbjList = (List) bulkRequest.get("bulkSubject"); + Long jobId = Math.round(bulkSbjList.get(0)); + projectName = auditLogService.getProjectNameById(jobId); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_BULK_PAUSE.getUrl())) { + Map bulkRequest = gson.fromJson(gson.toJson(requestParams.get("pauseRequest")), Map.class); + List bulkSbjList = (List) bulkRequest.get("bulkSubject"); + Long jobId = Math.round(bulkSbjList.get(0)); + projectName = auditLogService.getProjectNameById(jobId); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.PROJECT_FILES_UPLOAD.getUrl()) + || req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_UPLOAD.getUrl())) { + projectName = req.getParameter("projectName"); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_ENABLE.getUrl()) + || req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_BAN.getUrl())) { + List jobIdList = (List) requestParams.get("jobIdList"); + Long jobId = jobIdList.get(0); + projectName = auditLogService.getProjectNameById(jobId); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_CREATE_OR_UPDATE.getUrl())) { + Map metaJsonInfo = gson.fromJson(gson.toJson(requestParams.get("metaJsonInfo")), Map.class); + projectName = metaJsonInfo.get("projectName").toString(); + } else if (req.getRequestURI().equals(InterfaceDescriptionEnum.JOB_UPDATE_TASK.getUrl())) { + Map json = gson.fromJson(gson.toJson(requestParams.get("json")), Map.class); + projectName = json.get("projectName").toString(); + } else { + projectName = requestParams.get("projectName").toString(); + } + return projectName; + } + + + private Map parseJsonToMap(String json) { + try { + return BDPJettyServerHelper.jacksonJson().readValue(json, Map.class); + } catch (IOException e) { + e.printStackTrace(); + return Collections.emptyMap(); + } + } + + private String parseObjectToString(Object json) { + try { + if (ObjectUtils.isEmpty(json)) { + return "--"; + } else { + return BDPJettyServerHelper.gson().toJson(json); + } + } catch (Exception e) { + LOG.error("failed parse map to string "); + } + return "--"; + } +} + diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/InterfaceDescriptionEnum.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/InterfaceDescriptionEnum.java new file mode 100644 index 000000000..697716747 --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/aspect/InterfaceDescriptionEnum.java @@ -0,0 +1,98 @@ +package com.webank.wedatasphere.streamis.audit.log.aspect; + +import org.springframework.util.AntPathMatcher; + +import java.util.HashMap; +import java.util.Map; + +public enum InterfaceDescriptionEnum { + + JOB_("/api/rest_j/v1/streamis/streamJobManager/job/",""), + PROJECT_CORE_TARGET("/api/rest_j/v1/streamis/streamJobManager/project/core/target","工程核心目标"), + PROJECT_FILES_UPLOAD( "/api/rest_j/v1/streamis/streamProjectManager/project/files/upload", "上传工程资源文件"), + PROJECT_FILES_LIST("/api/rest_j/v1/streamis/streamProjectManager/project/files/list","查询工程资源文件"), + PROJECT_FILES_VERSION_LIST("/api/rest_j/v1/streamis/streamProjectManager/project/files/version/list","查询工程资源文件版本信息"), + PROJECT_FILES_DELETE("/api/rest_j/v1/streamis/streamProjectManager/project/files/delete","删除工程资源文件"), + PROJECT_FILES_VERSION_DELETE("/api/rest_j/v1/streamis/streamProjectManager/project/files/version/delete","删除工程资源文件版本"), + PROJECT_FILES_DOWNLOAD("/api/rest_j/v1/streamis/streamProjectManager/project/files/download","下载工程资源文件"), + JOB_BULK_EXECUTION("/api/rest_j/v1/streamis/streamJobManager/job/bulk/execution","job批量启动"), + JOB_BULK_PAUSE("/api/rest_j/v1/streamis/streamJobManager/job/bulk/pause","job批量停止"), + CONFIG_GET_WORKSPACE_USERS("/api/rest_j/v1/streamis/streamJobManager/config/getWorkspaceUsers","获取工作空间用户"), + CONFIG_DEFINITIONS("/api/rest_j/v1/streamis/streamJobManager/config/definitions","查询配置定义"), + CONFIG_JSON("/api/rest_j/v1/streamis/streamJobManager/config/json/{jobId:\\w+}","根据jobID查询/保存Job配置"), + CONFIG_VIEW("/api/rest_j/v1/streamis/streamJobManager/config/view","查看Job配置树"), + CONFIG_ADD("/api/rest_j/v1/streamis/streamJobManager/config/add","保存Job配置树失败"), + CONFIG_UPDATE("/api/rest_j/v1/streamis/streamJobManager/config/update","更新Job配置树"), + JOB_LIST("/api/rest_j/v1/streamis/streamJobManager/job/list","查询Job列表"), + JOB_JOB_INFO("/api/rest_j/v1/streamis/streamJobManager/job/jobInfo","根据jobId查询Job详情"), + JOB_CREATE_OR_UPDATE("/api/rest_j/v1/streamis/streamJobManager/job/createOrUpdate","创建或更新Job"), + JOB_UPDATE_LABEL("/api/rest_j/v1/streamis/streamJobManager/job/updateLabel","更新job标签"), + JOB_ID_VERSIONS("/api/rest_j/v1/streamis/streamJobManager/job/{jobId:\\w+}/versions","根据jobId查询Job版本列表"), + JOB_VERSION("/api/rest_j/v1/streamis/streamJobManager/job/version","查询Job版本详细"), + JOB_EXECUTE_INSPECT("/api/rest_j/v1/streamis/streamJobManager/job/execute/inspect","Job启动前查询"), + JOB_EXECUTE("/api/rest_j/v1/streamis/streamJobManager/job/execute","Job启动"), + JOB_STOP("/api/rest_j/v1/streamis/streamJobManager/job/stop","Job停止"), + JOB_DETAILS("/api/rest_j/v1/streamis/streamJobManager/job/details","查询Job详情"), + JOB_HISTORY("/api/rest_j/v1/streamis/streamJobManager/job/execute/history","查询Job启动历史"), + JOB_ERROR_MSG("/api/rest_j/v1/streamis/streamJobManager/job/execute/errorMsg","查询Job错误信息"), + JOB_ADD_TASK("/api/rest_j/v1/streamis/streamJobManager/job/addTask","添加task"), + JOB_UPDATE_TASK("/api/rest_j/v1/streamis/streamJobManager/job/updateTask","更新task"), + JOB_STOP_TASK("/api/rest_j/v1/streamis/streamJobManager/job/stopTask","停止task"), + JOB_PROGRESS("/api/rest_j/v1/streamis/streamJobManager/job/progress","查看Job的进度"), + JOB_JOB_CONTENT("/api/rest_j/v1/streamis/streamJobManager/job/jobContent","查看Job详细信息"), + JOB_UPDATE_CONTENT("/api/rest_j/v1/streamis/streamJobManager/job/updateContent","更新Job的args或高可用信息"), + JOB_ALERT("/api/rest_j/v1/streamis/streamJobManager/job/alert","查询Job告警信息"), + JOB_LOGS("/api/rest_j/v1/streamis/streamJobManager/job/logs","查询Job日志"), + JOB_STATUS("/api/rest_j/v1/streamis/streamJobManager/job/status","获得任务状态"), + JOB_SNAPSHOT("/api/rest_j/v1/streamis/streamJobManager/job/snapshot/{jobId:\\w+}","生成Job快照"), + JOB_UPLOAD("/api/rest_j/v1/streamis/streamJobManager/job/upload","上传Job"), + JOB_ENABLE("/api/rest_j/v1/streamis/streamJobManager/job/enable","开启Job"), + JOB_BAN("/api/rest_j/v1/streamis/streamJobManager/job/ban","禁用Job"); + private String url; + private String description; + + + private static String systemPath = "/api/rest_j/v1"; + + private static String projectManagerRestfulApiPath = "/streamis/streamProjectManager/project"; + + + InterfaceDescriptionEnum(String url, String description) { + this.url = url; + this.description = description; + } + + public String getUrl() { + return url; + } + + public String getDescription() { + return description; + } + + private static final Map urlDescriptionMap = new HashMap<>(); + + static { + for (InterfaceDescriptionEnum interfaceDescription : InterfaceDescriptionEnum.values()) { + urlDescriptionMap.put(interfaceDescription.getUrl(), interfaceDescription.getDescription()); + } + } + + public static String getDescriptionByUrl(String url) { + if (urlDescriptionMap.containsKey(url)) { + return urlDescriptionMap.get(url); + } + for (InterfaceDescriptionEnum interfaceDescription : InterfaceDescriptionEnum.values()) { + if (matchesUrl(interfaceDescription.getUrl(), url)) { + return interfaceDescription.getDescription(); + } + } + return "Unknown Description"; + } + + private static boolean matchesUrl(String pattern, String url) { + AntPathMatcher pathMatcher = new AntPathMatcher(); + return pathMatcher.match(pattern, url); + } +} + diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/conf/JobAuditConf.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/conf/JobAuditConf.java new file mode 100644 index 000000000..df5e60c8e --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/conf/JobAuditConf.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.streamis.audit.log.conf; + +import org.apache.linkis.common.conf.CommonVars; + +public class JobAuditConf { + + public static final CommonVars AUDIT_LOG_ENABLE = CommonVars.apply("wds.streamis.log.audit.store.enable", true); + + /* + divided by comma + */ + public static final CommonVars AUDIT_LOG_URI_SKIP = CommonVars.apply("wds.streamis.log.audit.uri.skip", "/api/rest_j/v1/streamis/streamJobManager/log/collect/events,/api/rest_j/v1/streamis/streamJobManager/log/heartbeat"); + + +} diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/StreamAuditLogMapper.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/StreamAuditLogMapper.java new file mode 100644 index 000000000..adc15fd3b --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/StreamAuditLogMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.streamis.audit.log.dao; + +import com.webank.wedatasphere.streamis.audit.log.entity.StreamAuditLog; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +public interface StreamAuditLogMapper { + + List searchAuditLogs( + @Param("apiName") String apiName, + @Param("user") String user, + @Param("proxyUser") String proxyUser, + @Param("startDate") Date startDate, + @Param("endDate") Date endDate, + @Param("projectName") String projectName); + + void saveAuditLog(StreamAuditLog auditLog); + + String getProjectNameById(@Param("jobId") Long jobId); +} diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/impl/StreamAuditLogMapper.xml b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/impl/StreamAuditLogMapper.xml new file mode 100644 index 000000000..683acc2ec --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/dao/impl/StreamAuditLogMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + INSERT INTO linkis_stream_audit_log (user,api_name,api_type,api_desc,input_parameters, output_parameters, proxy_user, operate_time,project_name,client_ip,cost_time_mills) + VALUES (#{user}, #{apiName},#{apiType},#{apiDesc},#{inputParameters}, #{outputParameters}, #{proxyUser}, #{operateTime},#{projectName},#{clientIp},#{costTimeMills}) + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/entity/StreamAuditLog.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/entity/StreamAuditLog.java new file mode 100644 index 000000000..b7783eafd --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/entity/StreamAuditLog.java @@ -0,0 +1,119 @@ +package com.webank.wedatasphere.streamis.audit.log.entity; + +import java.util.Date; + +public class StreamAuditLog { + private Long id; + private String user; + private String proxyUser; + private String apiName; + private String apiDesc; + private String apiType; + private Date operateTime; + private String inputParameters; + private String outputParameters; + + private String projectName; + + private String clientIp; + + private Long costTimeMills; + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getProxyUser() { + return proxyUser; + } + + public void setProxyUser(String proxyUser) { + this.proxyUser = proxyUser; + } + + public String getApiName() { + return apiName; + } + + public void setApiName(String apiName) { + this.apiName = apiName; + } + + public String getApiDesc() { + return apiDesc; + } + + public void setApiDesc(String apiDesc) { + this.apiDesc = apiDesc; + } + + public String getApiType() { + return apiType; + } + + public void setApiType(String apiType) { + this.apiType = apiType; + } + + public Date getOperateTime() { + return operateTime; + } + + public void setOperateTime(Date operateTime) { + this.operateTime = operateTime; + } + + public String getInputParameters() { + return inputParameters; + } + + public void setInputParameters(String inputParameters) { + this.inputParameters = inputParameters; + } + + public String getOutputParameters() { + return outputParameters; + } + + public void setOutputParameters(String outputParameters) { + this.outputParameters = outputParameters; + } + + public Long getCostTimeMills() { + return costTimeMills; + } + + public void setCostTimeMills(Long costTimeMills) { + this.costTimeMills = costTimeMills; + } +} diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/restful/api/AuditLogRestfulApi.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/restful/api/AuditLogRestfulApi.java new file mode 100644 index 000000000..c4e045c17 --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/restful/api/AuditLogRestfulApi.java @@ -0,0 +1,73 @@ +package com.webank.wedatasphere.streamis.audit.log.restful.api; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.streamis.audit.log.entity.StreamAuditLog; +import com.webank.wedatasphere.streamis.audit.log.service.AuditLogService; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.QueryJobListVo; +import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; +import org.apache.commons.lang3.StringUtils; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.utils.ModuleUserUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@RequestMapping(path = "/streamis/streamJobManager/audit") +@RestController +public class AuditLogRestfulApi { + + @Autowired + private AuditLogService auditLogService; + + @Resource + private ProjectPrivilegeService privilegeService; + + + private static final String NO_OPERATION_PERMISSION_MESSAGE = "the current user has no operation permission"; + + @GetMapping("/logs") + public Message searchAuditLogs(HttpServletRequest req, + @RequestParam(value = "pageNow", required = false) Integer pageNow, + @RequestParam(value = "pageSize", required = false) Integer pageSize, + @RequestParam(value = "apiName", required = false) String apiName, + @RequestParam(value = "user", required = false) String user, + @RequestParam(value = "proxyUser", required = false) String proxyUser, + @RequestParam(value = "startDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startDate, + @RequestParam(value = "endDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endDate, + @RequestParam(value = "projectName",required = false) String projectName + ) { + String userName = ModuleUserUtils.getOperationUser(req, "Query job audit log"); + if(StringUtils.isBlank(projectName)){ + return Message.error("Project name cannot be empty(项目名不能为空,请指定)"); + } + if (!privilegeService.hasAccessPrivilege(req,projectName)) { + return Message.error(NO_OPERATION_PERMISSION_MESSAGE); + } + if (Objects.isNull(pageNow)) { + pageNow = 1; + } + if (Objects.isNull(pageSize)) { + pageSize = 20; + } + PageInfo pageInfo; + PageHelper.startPage(pageNow, pageSize); + try { + pageInfo = auditLogService.searchAuditLogs(apiName, user, proxyUser, startDate, endDate,projectName); + } finally { + PageHelper.clearPage(); + } + + return Message.ok().data("auditLogs",pageInfo.getList()).data("totalPage", pageInfo.getTotal()); + } +} diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/AuditLogService.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/AuditLogService.java new file mode 100644 index 000000000..bdbb5eace --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/AuditLogService.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.streamis.audit.log.service; + +import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.streamis.audit.log.entity.StreamAuditLog; + + +import java.util.Date; +import java.util.List; + +public interface AuditLogService { + + PageInfo searchAuditLogs(String apiName, String user, String proxyUser, Date startDate, Date endDate,String projectName); + + void saveAuditLog(StreamAuditLog auditLog); + + String getProjectNameById(Long jobId); +} diff --git a/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/impl/AuditLogServiceImpl.java b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/impl/AuditLogServiceImpl.java new file mode 100644 index 000000000..709083180 --- /dev/null +++ b/streamis-jobmanager/streamis-job-audit-log/src/main/java/com/webank/wedatasphere/streamis/audit/log/service/impl/AuditLogServiceImpl.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.streamis.audit.log.service.impl; + +import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.streamis.audit.log.dao.StreamAuditLogMapper; +import com.webank.wedatasphere.streamis.audit.log.entity.StreamAuditLog; +import com.webank.wedatasphere.streamis.audit.log.service.AuditLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Service +public class AuditLogServiceImpl implements AuditLogService { + @Autowired + private StreamAuditLogMapper auditLogMapper; + + public PageInfo searchAuditLogs(String apiName, String user, String proxyUser, Date startDate, Date endDate,String projectName) { + List streamAuditLogs = auditLogMapper.searchAuditLogs(apiName, user, proxyUser, startDate, endDate,projectName); + return new PageInfo<>(streamAuditLogs); + } + + @Override + public void saveAuditLog(StreamAuditLog auditLog) { + auditLogMapper.saveAuditLog(auditLog); + } + + @Override + public String getProjectNameById(Long jobId) { + return auditLogMapper.getProjectNameById(jobId); + } + +} diff --git a/streamis-jobmanager/streamis-job-entrypoint/pom.xml b/streamis-jobmanager/streamis-job-entrypoint/pom.xml index ca0f96962..6b54298b3 100644 --- a/streamis-jobmanager/streamis-job-entrypoint/pom.xml +++ b/streamis-jobmanager/streamis-job-entrypoint/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 pom diff --git a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-common/pom.xml b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-common/pom.xml index 9738941dc..2ec020dbd 100644 --- a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-common/pom.xml +++ b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-common/pom.xml @@ -20,7 +20,7 @@ streamis-job-entrypoint com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -50,7 +50,7 @@ com.webank.wedatasphere.streamis streamis-jobmanager-common - 0.3.0 + 0.3.1 junit diff --git a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-flink/pom.xml b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-flink/pom.xml index da4763cf1..59ccedf7e 100644 --- a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-flink/pom.xml +++ b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-flink/pom.xml @@ -5,7 +5,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 @@ -21,7 +21,7 @@ com.webank.wedatasphere.streamis streamis-job-entrypoint-common - 0.3.0 + 0.3.1 diff --git a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-spark/pom.xml b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-spark/pom.xml index bd3528f2f..c4c82276b 100644 --- a/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-spark/pom.xml +++ b/streamis-jobmanager/streamis-job-entrypoint/streamis-job-entrypoint-spark/pom.xml @@ -5,7 +5,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 @@ -21,7 +21,7 @@ com.webank.wedatasphere.streamis streamis-job-entrypoint-common - 0.3.0 + 0.3.1 diff --git a/streamis-jobmanager/streamis-job-errorcode/pom.xml b/streamis-jobmanager/streamis-job-errorcode/pom.xml new file mode 100644 index 000000000..00f8cae02 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/pom.xml @@ -0,0 +1,82 @@ + + + + + + streamis-jobmanager + com.webank.wedatasphere.streamis + 0.3.1 + + 4.0.0 + + streamis-job-errorcode + + + 8 + 8 + + + + + + + + org.apache.linkis + linkis-common + + + org.apache.linkis + linkis-module + + + org.apache.linkis + linkis-error-code-client + ${linkis.version} + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + src/main/java + + **/*.xml + + + + + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/StreamErrorCodeMapper.java b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/StreamErrorCodeMapper.java new file mode 100644 index 000000000..3d62189c5 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/StreamErrorCodeMapper.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.streamis.errorcode.dao; + + + +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode; + +import java.util.List; + +public interface StreamErrorCodeMapper { + + List getErrorCodeList(); +} diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/impl/StreamErrorCodeMapper.xml b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/impl/StreamErrorCodeMapper.xml new file mode 100644 index 000000000..813eeab07 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/dao/impl/StreamErrorCodeMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/entity/StreamErrorCode.java b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/entity/StreamErrorCode.java new file mode 100644 index 000000000..9288ba43d --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/entity/StreamErrorCode.java @@ -0,0 +1,78 @@ +package com.webank.wedatasphere.streamis.errorcode.entity; + + + +public class StreamErrorCode { + private Integer id; + private String errorCode; + private String errorDesc; + private String errorRegex; + private Integer errorType; + private String solution; + + public StreamErrorCode() { + } + + public StreamErrorCode(String errorCode, String errorDesc,String solution) { + this.errorCode = errorCode; + this.errorDesc = errorDesc; + this.solution = solution; + } + + public StreamErrorCode(Integer id, String errorCode, String errorDesc, String errorRegex, Integer errorType,String solution) { + this.id = id; + this.errorCode = errorCode; + this.errorDesc = errorDesc; + this.errorRegex = errorRegex; + this.errorType = errorType; + this.solution = solution; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getErrorCode() { + return errorCode; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorDesc() { + return errorDesc; + } + + public void setErrorDesc(String errorDesc) { + this.errorDesc = errorDesc; + } + + public String getErrorRegex() { + return errorRegex; + } + + public void setErrorRegex(String errorRegex) { + this.errorRegex = errorRegex; + } + + public Integer getErrorType() { + return errorType; + } + + public void setErrorType(Integer errorType) { + this.errorType = errorType; + } + + public String getSolution() { + return solution; + } + + public void setSolution(String solution) { + this.solution = solution; + } +} diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/handler/StreamisErrorCodeHandler.java b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/handler/StreamisErrorCodeHandler.java new file mode 100644 index 000000000..ab398e3bb --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/handler/StreamisErrorCodeHandler.java @@ -0,0 +1,66 @@ +package com.webank.wedatasphere.streamis.errorcode.handler; + +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode; +import com.webank.wedatasphere.streamis.errorcode.manager.cache.StreamisErrorCodeCache; +import com.webank.wedatasphere.streamis.errorcode.utils.StreamisErrorCodeMatcher; +import org.apache.linkis.common.utils.Utils; +import org.apache.linkis.errorcode.client.ClientConfiguration; +import org.apache.linkis.errorcode.client.handler.LinkisErrorCodeHandler; +import org.apache.linkis.errorcode.client.utils.ErrorCodeMatcher; +import org.apache.linkis.errorcode.common.ErrorCode; +import org.apache.linkis.errorcode.common.LinkisErrorCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import scala.Option; +import scala.Tuple2; +import scala.Tuple3; + +import java.util.*; +import java.util.concurrent.*; + +public class StreamisErrorCodeHandler { + + private static StreamisErrorCodeHandler streamisErrorCodeHandler; + private static final Logger LOGGER = LoggerFactory.getLogger(StreamisErrorCodeHandler.class); + private final long futureTimeOut = ClientConfiguration.FUTURE_TIME_OUT.getValue(); + + + public static StreamisErrorCodeHandler getInstance() { + if (null == streamisErrorCodeHandler) { + synchronized (StreamisErrorCodeHandler.class) { + if (null == streamisErrorCodeHandler) { + streamisErrorCodeHandler = new StreamisErrorCodeHandler(); + } + } + } + return streamisErrorCodeHandler; + } + private StreamisErrorCodeHandler() { + super(); + } + + public List handle(String log) { + Set errorCodeSet = new HashSet<>(); + List streamErrorCodes = StreamisErrorCodeCache.get("data"); + Runnable runnable = + () -> { + Arrays.stream(log.split("\n")) + .forEach( + singleLog -> { + Option> match = + StreamisErrorCodeMatcher.errorMatch(streamErrorCodes, singleLog); + if (match.isDefined()) { + errorCodeSet.add(new StreamErrorCode(match.get()._1(), match.get()._2(),match.get()._3())); + } + }); + }; + Future future = Utils.defaultScheduler().submit(runnable); + try { + future.get(futureTimeOut, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + LOGGER.error("Failed to parse log in {} ms", futureTimeOut, e); + } + return new ArrayList<>(errorCodeSet); + } + +} diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/StreamisErrorCodeManager.java b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/StreamisErrorCodeManager.java new file mode 100644 index 000000000..c9fed6780 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/StreamisErrorCodeManager.java @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.streamis.errorcode.manager; + + +import com.webank.wedatasphere.streamis.errorcode.dao.StreamErrorCodeMapper; +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode; +import com.webank.wedatasphere.streamis.errorcode.manager.cache.StreamisErrorCodeCache; +import org.apache.linkis.common.utils.Utils; +import org.apache.linkis.errorcode.common.LinkisErrorCode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Component +public class StreamisErrorCodeManager { + + private final Object lock = new Object(); + + private static final Logger LOGGER = LoggerFactory.getLogger(StreamisErrorCodeManager.class); + + @Autowired + private StreamErrorCodeMapper streamErrorCodeMapper; + + + public List getStreamErrorCodes() { + LOGGER.info("加载streamis错误码"); + List streamErrorCodes = streamErrorCodeMapper.getErrorCodeList(); + LOGGER.info("加载完成,加载错误码个数为: {}", streamErrorCodes.size()); + return streamErrorCodes; + } + + @PostConstruct + private void init() { + Utils.defaultScheduler().scheduleAtFixedRate(() -> { + LOGGER.info("start to get errorCodes"); + synchronized (this.lock) { + List streamErrorCodes = getStreamErrorCodes(); + if (!streamErrorCodes.isEmpty()){ + StreamisErrorCodeCache.clear(); + StreamisErrorCodeCache.put("data", streamErrorCodes); + } + } + }, 0L, 1L, TimeUnit.HOURS); + } + +} diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/cache/StreamisErrorCodeCache.java b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/cache/StreamisErrorCodeCache.java new file mode 100644 index 000000000..86297de17 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/java/com/webank/wedatasphere/streamis/errorcode/manager/cache/StreamisErrorCodeCache.java @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.streamis.errorcode.manager.cache; + +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode; +import org.apache.linkis.errorcode.common.LinkisErrorCode; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class StreamisErrorCodeCache { + private static Map> cache = new ConcurrentHashMap<>(); + + public static void put(String key, List value) { + cache.put(key, value); + } + + public static List get(String key) { + return cache.get(key); + } + + public static void remove(String key) { + cache.remove(key); + } + + public static void clear() { + cache.clear(); + } +} diff --git a/streamis-jobmanager/streamis-job-errorcode/src/main/scala/com/webank/wedatasphere/streamis/errorcode/utils/StreamisErrorCodeMatcher.scala b/streamis-jobmanager/streamis-job-errorcode/src/main/scala/com/webank/wedatasphere/streamis/errorcode/utils/StreamisErrorCodeMatcher.scala new file mode 100644 index 000000000..d304da560 --- /dev/null +++ b/streamis-jobmanager/streamis-job-errorcode/src/main/scala/com/webank/wedatasphere/streamis/errorcode/utils/StreamisErrorCodeMatcher.scala @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.webank.wedatasphere.streamis.errorcode.utils + +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode +import org.apache.linkis.common.utils.{Logging, Utils} + +import java.util +import scala.util.matching.Regex + +object StreamisErrorCodeMatcher extends Logging { + + def errorMatch(errorCodes: util.List[StreamErrorCode], log: String): Option[(String, String,String)] = { + Utils.tryCatch { + import scala.collection.JavaConverters._ + errorCodes.asScala.foreach(e => + if (e.getErrorRegex.r.findFirstIn(log).isDefined) { + val matched = e.getErrorRegex.r.unapplySeq(log) + if (matched.nonEmpty) { + return Some(e.getErrorCode, e.getErrorDesc.format(matched.get: _*), e.getSolution) + } else return Some(e.getErrorCode, e.getErrorDesc, e.getSolution) + } + ) + None + } { t: Throwable => + logger.error("failed to match error code", t) + None + } + + } + +} diff --git a/streamis-jobmanager/streamis-job-launcher/pom.xml b/streamis-jobmanager/streamis-job-launcher/pom.xml index 96e618d27..ba47ee8a5 100755 --- a/streamis-jobmanager/streamis-job-launcher/pom.xml +++ b/streamis-jobmanager/streamis-job-launcher/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/pom.xml b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/pom.xml index d38fad2ad..126096d6a 100755 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/pom.xml +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/pom.xml @@ -20,14 +20,13 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 streamis-job-launcher-base - 8 8 @@ -45,8 +44,15 @@ linkis-computation-governance-common ${linkis.version} + + org.apache.linkis + linkis-mybatis + + + org.apache.linkis + linkis-module + - @@ -63,6 +69,14 @@ maven-jar-plugin + + + src/main/java + + **/*.xml + + + ${project.artifactId}-${project.version} \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/StreamJobConfMapper.java b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/StreamJobConfMapper.java new file mode 100644 index 000000000..8aba65896 --- /dev/null +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/StreamJobConfMapper.java @@ -0,0 +1,66 @@ +/* + * Copyright 2021 WeBank + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.webank.wedatasphere.streamis.jobmanager.launcher.dao; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.JobConfDefinition; +import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.JobConfValue; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * Operate the job configuration + */ +public interface StreamJobConfMapper { + + /** + * Select all config definitions + * @return list + */ + List loadAllDefinitions(); + + /** + * Get raw value + * @param jobId job id + * @param key key + * @return + */ + String getRawConfValue(@Param("jobId")Long jobId, @Param("key")String key); + /** + * Get config values by job id + * @param jobId job id + * @return + */ + List getConfValuesByJobId(@Param("jobId")Long jobId); + + /** + * Delete values by job id + * @param jobId job id + */ + int deleteConfValuesByJobId(@Param("jobId")Long jobId); + + /** + * Delete temporary config value + * @param jobId job id + * @return affect rows + */ + int deleteTemporaryConfValue(@Param("jobId")Long jobId); + /** + * Batch insert + * @param values values + */ + void batchInsertValues(@Param("values")List values); +} diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/impl/StreamJobConfMapper.xml b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/impl/StreamJobConfMapper.xml new file mode 100644 index 000000000..94556b3f9 --- /dev/null +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/dao/impl/StreamJobConfMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM `linkis_stream_job_config` WHERE job_id = #{jobId}; + + + + DELETE c FROM `linkis_stream_job_config` c INNER JOIN `linkis_stream_job_config_def` d ON c.job_id = #{jobId} AND d.id = c.ref_def_id AND d.is_temp = 1; + + + INSERT INTO `linkis_stream_job_config`(`job_id`, `job_name`, `key`, `value`, `ref_def_id`) VALUES + + (#{item.jobId}, #{item.jobName}, #{item.key}, #{item.value}, #{item.referDefId}) + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/JobInfo.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/JobInfo.scala index 36ca4e7b3..c50ab3a72 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/JobInfo.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/JobInfo.scala @@ -79,4 +79,6 @@ trait JobInfo { * @return */ def getClientType: String + + def getHighAvailablePolicy: String } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/JobConf.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/JobConf.scala index f89be371e..92ace021e 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/JobConf.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/JobConf.scala @@ -11,6 +11,8 @@ object JobConf { val STREAMIS_JOB_MONITOR_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.job.monitor.enable", true) + val STREAMIS_JOB_RESET_ON_START_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.job.reset_on_restart.enable", true) + val STREAMIS_JOB_PARAM_BLANK_PLACEHOLDER: CommonVars[String] = CommonVars("wds.streamis.job.param.blank.placeholder", "\u0001") /** @@ -23,6 +25,12 @@ object JobConf { */ val STREAMIS_JOB_LOG_COLLECT_PATH: CommonVars[String] = CommonVars("wds.streamis.job.log.collect.path", "/api/rest_j/v1/streamis/streamJobManager/log/collect/events") + val STREAMIS_JOB_LOG_HEARTBEAT_PATH: CommonVars[String] = CommonVars("wds.streamis.log.heartbeat.path", "/api/rest_j/v1/streamis/streamJobManager/log/heartbeat") + + val STREAMIS_JOB_LOG_HEARTBEAT_INTERVAL: CommonVars[Int] = CommonVars("wds.streamis.log.heartbeat.interval.mills", 30 * 60 * 1000) + + val STREAMIS_JOB_LOG_HEARTBEAT_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.log.heartbeat.enable", true) + /** * Enable to use material container */ @@ -70,6 +78,11 @@ object JobConf { case _ => false } + def isFinished(status: Int): Boolean = status match { + case 0 | 1 | 6 | 7 => true + case _ => false + } + def linkisStatusToStreamisStatus(status: String): Int = status.toLowerCase match { case "starting" | "unlock" | "locked" | "idle" | "busy" | "running" => FLINK_JOB_STATUS_RUNNING.getValue case "success" => FLINK_JOB_STATUS_COMPLETED.getValue @@ -86,4 +99,81 @@ object JobConf { val SUPPORTED_JOB_TYPES: CommonVars[String] = CommonVars("wds.streamis.supported.job.types", "flink.jar,flink.sql,spark.jar") val SUPPORTED_MANAGEMENT_JOB_TYPES: CommonVars[String] = CommonVars("wds.streamis.management.supported.job.types", "flink.jar,flink.sql") + + val ERROR_CODE_MATCHING_YARN_TIME: CommonVars[Int] = CommonVars("wds.streamis.error.code.matching.yarn.time", 2) + + val DEFAULT_ERROR_MSG: CommonVars[String] = CommonVars("wds.streamis.default.error.msg", "正在分析日志,请稍后") + + val ANALYZE_ERROR_MSG: CommonVars[String] = CommonVars("wds.streamis.default.error.msg", "错误原因分析失败") + + val FINAL_ERROR_MSG: CommonVars[String] = CommonVars("wds.streamis.default.error.msg", "无法匹配到对应错误码,请联系管理员") + + val PROJECT_NAME_STRICT_CHECK_SWITCH: CommonVars[Boolean] = CommonVars("wds.streamis.project.name.strict.check.enable", false) + + val HIGHAVAILABLE_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.app.highavailable.enable", true) + + val HIGHAVAILABLE_SOURCE: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.source", "aomp") + +// val HIGHAVAILABLE_POLICY: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.double", "double") + + val HIGHAVAILABLE_POLICY_DOUBLE: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.double", "double") + + val HIGHAVAILABLE_POLICY_DOUBLE_BAK: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.doubleWithBak", "doubleWithBak") + + val HIGHAVAILABLE_POLICY_SINGLE_BAK: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.singleWithBak", "singleWithBak") + + val HIGHAVAILABLE_POLICY_MANAGERSLAVE: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.managerSlave", "managerSlave") + + val HIGHAVAILABLE_POLICY_MANAGERSLAVE_BAK: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.managerSlaveWithBak", "managerSlaveWithBak") + + val HIGHAVAILABLE_DEFAULT_POLICY: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.default.policy", "single") + + val JOB_SCHEMA_SINGLE: CommonVars[String] = CommonVars("wds.streamis.app.job.schema.single", "single") + + val JOB_SCHEMA_DOUBLE: CommonVars[String] = CommonVars("wds.streamis.app.job.schema.double", "double") + + val JOB_SCHEMA_MANAGER_SLAVE: CommonVars[String] = CommonVars("wds.streamis.app.job.schema.managerSlave", "managerSlave") + + val HIGHAVAILABLE_POLICY_KEY: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.policy.key", "wds.streamis.app.highavailable.policy") + + val STREAMIS_CHECK_FILE_FORMAT: CommonVars[String] = CommonVars("wds.streamis.check.file.format", "yaml|text|jar|properties|txt|pem|json") + + val STREAMIS_OLD_SNAPSHOT_PATH_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.old snapshot path.enable", true) + + val DEFAULT_ARGS_LENGTH: CommonVars[Int] = CommonVars("wds.streamis.default.args.length", 2000) + + val AUTO_RESTART_JOB: CommonVars[Boolean] = CommonVars("wds.streamis.app.highavailable.auto.restart.job", true) + + val LOGS_HEARTBEAT_CHECK_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.logs.heartbeat.enable", true) + + val LOGS_HEARTBEAT_ALARMS_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.logs.heartbeat.alarms.enable", true) + + val LOGS_HEARTBEAT_REGISTER_ALARMS_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.logs.heartbeat.register.alarms.enable", true) + + val LOGS_HEARTBEAT_CHECK_INTERVAL: CommonVars[Int] = CommonVars("wds.streamis.logs.check.heartbeat.interval.mills", 10 *60 * 1000) + + val LOGS_HEARTBEAT_INTERVAL_TIMEOUT: CommonVars[Int] = CommonVars("wds.streamis.logs.check.heartbeat.interval.timeout.mills", 30 * 60 * 1000) + + val JOB_NAME_LENGTH_MAX: CommonVars[Int] = CommonVars("wds.streamis.job.name.length.max", 2000) + + val PRODUCT_NAME_KEY: CommonVars[String] = CommonVars("wds.linkis.flink.product.key", "wds.linkis.flink.product") + + val PRODUCT_NAME_SWITCH: CommonVars[Boolean] = CommonVars("wds.linkis.flink.product.key.enable", true) + + val HIGHAVAILABLE_TOKEN: CommonVars[String] = CommonVars("wds.streamis.app.highavailable.token", "streamis0.3.8") + + val STANDARD_AUTHENTICATION_KEY: CommonVars[Boolean] = CommonVars("wds.streamis.standard.authentication.key", true) + + val JOB_CONTENT_EDIT_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.job.content.edit.enable", true) + + val JOB_CONFIG_EDIT_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.job.config.edit.enable", true) + + val STMS_FLINK_APPLICATION_SEPARATE_KEY: CommonVars[String] = CommonVars("wds.streamis.flink.app.args.separate.key", "flink.app.args.separate") + + val STMS_FLINK_APPLICATION_ARGS_KEY: CommonVars[String] = CommonVars("wds.streamis.flink.app.args.key", "flink.app.args") + + val STMS_FLINK_APPLICATION_MAIN_CLASS_KEY: CommonVars[String] = CommonVars("wds.streamis.flink.app.main.class.key", "flink.app.main.class") + + val FLINK_APPLICATION_SEPARATE: CommonVars[String] = CommonVars("wds.streamis.flink.app.args.separate", " ") + } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/StreamJobLauncherConf.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/StreamJobLauncherConf.scala index 9459e5a44..24861bd48 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/StreamJobLauncherConf.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/conf/StreamJobLauncherConf.scala @@ -11,4 +11,9 @@ object StreamJobLauncherConf { FLINK_MANAGER_ACTION_BOUNDARY_PRIVATE_ACTIONS.getValue.split(",").contains(actionType.toString) } + val HIGHAVAILABLE_CLUSTER_NAME: CommonVars[String] = CommonVars("wds.streamis.highavailable.cluster.name", "BDAP_UAT") + + val WHETHER_MANAGER_CLUSTER: CommonVars[Boolean] = CommonVars("wds.streamis.whether.manager.cluster", false) + + val HIGHAVAILABLE_CLUSTER_IP: CommonVars[String] = CommonVars("wds.linkis.gateway.ip", "127.0.0.1") } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/constants/JobConstants.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/constants/JobConstants.scala index ba120d15e..48a3d9716 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/constants/JobConstants.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/constants/JobConstants.scala @@ -26,9 +26,13 @@ object JobConstants { val RESULT_EC_METRICS_KEY = "ecMetrics" + val RESULT_EC_ENGINE_KEY = "engine" + val APP_TYPE_FLINK = "Apache Flink" val APP_TYPE_SPARK = "SPARK" - val JOB_NAME_DELIMITER = "," + val DELIMITER_COMMA = "," + + val DELIMITER_EUQAL = "=" } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/manager/JobStateManager.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/manager/JobStateManager.scala index 4d0e7d051..8e7196a62 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/manager/JobStateManager.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/manager/JobStateManager.scala @@ -57,10 +57,15 @@ trait JobStateManager { */ def getJobState[T <: JobState](clazz: Class[_], jobInfo: JobInfo): T + def getJobState[T <: JobState](clazz: Class[_], jobInfo: JobInfo,highAvailablePolicy: String): T - def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, relativePath: String): URI + + def getJobStateDir[T <: JobState](clazz: Class[_], relativePath: String,highAvailablePolicy : String): URI def getJobStateDir[T <: JobState](clazz: Class[_], relativePath: String): URI + + + def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String): URI /** * Get job state directory uri * @param clazz clazz @@ -70,7 +75,7 @@ trait JobStateManager { * @tparam T * @return */ - def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String): URI + def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String,highAvailablePolicy: String): URI } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/state/JobStateFetcher.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/state/JobStateFetcher.scala index 41f47fd75..0340cec51 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/state/JobStateFetcher.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/state/JobStateFetcher.scala @@ -31,6 +31,9 @@ trait JobStateFetcher[T <: JobState] { */ def getState(jobInfo: JobInfo): T + + def getState(jobInfo: JobInfo,highAvailablePolicy: String): T + /** * Destroy method */ diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/utils/JobUtils.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/utils/JobUtils.scala index cc866f7fe..650a03e67 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/utils/JobUtils.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-base/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/job/utils/JobUtils.scala @@ -1,7 +1,29 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.job.utils +import com.google.gson.{GsonBuilder, JsonElement, JsonPrimitive, JsonSerializationContext, JsonSerializer} + +import java.lang +import java.lang.reflect.Type + object JobUtils { def isAnyVal[T](x: T)(implicit m: Manifest[T]) = m <:< manifest[AnyVal] + val gson = new GsonBuilder() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") + .serializeNulls + .registerTypeAdapter( + classOf[java.lang.Double], + new JsonSerializer[java.lang.Double] { + + override def serialize( + t: lang.Double, + `type`: Type, + jsonSerializationContext: JsonSerializationContext + ): JsonElement = + if (t == t.longValue()) new JsonPrimitive(t.longValue()) else new JsonPrimitive(t) + + } + ) + .create } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/pom.xml b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/pom.xml index c036da26d..dd469295d 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/pom.xml +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/pom.xml @@ -20,7 +20,7 @@ streamis-job-launcher com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -35,7 +35,7 @@ com.webank.wedatasphere.streamis streamis-job-launcher-base - ${jobmanager.version} + ${streamis.version} org.apache.linkis @@ -47,12 +47,11 @@ linkis-manager-common ${linkis.version} - - - - - - + + com.webank.wedatasphere.streamis + streamis-job-errorcode + ${streamis.version} + diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/state/AbstractLinkisJobStateFetcher.java b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/state/AbstractLinkisJobStateFetcher.java index fcdc1c584..6f4e20f22 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/state/AbstractLinkisJobStateFetcher.java +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/state/AbstractLinkisJobStateFetcher.java @@ -16,6 +16,7 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.state; import com.webank.wedatasphere.streamis.jobmanager.launcher.job.JobInfo; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobStateManager; import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.JobState; import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.JobStateFetcher; @@ -36,6 +37,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -46,8 +48,9 @@ * Linkis Job state fetcher * 1) Init to build http client * 2) Invoke the getState method to fetch form /api/rest_j/v1/filesystem/getDirFileTrees, the new JobState info - * (Note: linkis doesn't support to fetch the file tree recursively, so should invoke several times) + * (Note: linkis doesn't support to fetch the file tree recursively, so should invoke several times) * 3) Destroy to close the http client when the system is closed + * * @param */ @@ -73,7 +76,7 @@ public abstract class AbstractLinkisJobStateFetcher implemen private final JobStateManager jobStateManager; - protected AbstractLinkisJobStateFetcher(Class stateClass, JobStateManager jobStateManager){ + protected AbstractLinkisJobStateFetcher(Class stateClass, JobStateManager jobStateManager) { this.stateClass = stateClass; this.jobStateManager = jobStateManager; } @@ -91,14 +94,15 @@ public void init() { /** * Main entrance + * * @param jobInfo job info * @return */ @Override public T getState(JobInfo jobInfo) { - String treeDir = this.jobStateManager.getJobStateDir(stateClass, jobInfo.getName()).toString(); - StateFileTree stateFileTree = traverseFileTreeToFind(jobInfo, getDirFileTree(jobInfo, treeDir), this::isMatch, false); - if (Objects.nonNull(stateFileTree) && StringUtils.isNotBlank(stateFileTree.getPath())){ + String treeDir = this.jobStateManager.getJobStateDir(stateClass, jobInfo.getName(), jobInfo.getHighAvailablePolicy()).toString(); + StateFileTree stateFileTree = traverseFileTreeToFind(jobInfo, getDirFileTree(jobInfo, treeDir), this::isMatch, false); + if (Objects.nonNull(stateFileTree) && StringUtils.isNotBlank(stateFileTree.getPath())) { JobStateFileInfo stateFileInfo = new JobStateFileInfo(stateFileTree.getName(), stateFileTree.getPath(), stateFileTree.getParentPath(), Long.parseLong(stateFileTree.getProperties().getOrDefault(PROPS_SIZE, "0")), @@ -109,40 +113,82 @@ public T getState(JobInfo jobInfo) { } + @Override + public T getState(JobInfo jobInfo, String highAvailablePolicy) { + JobStateFileInfo secondStateFileInfo = null; + LOG.info("config wds.streamis.old snapshot path.enable vaule is " + JobConf.STREAMIS_OLD_SNAPSHOT_PATH_ENABLE().toString()); + if (Boolean.parseBoolean(JobConf.STREAMIS_OLD_SNAPSHOT_PATH_ENABLE().getHotValue().toString())) { + String secondTreeDir = this.jobStateManager.getJobStateDir(stateClass, jobInfo.getName()).toString(); + StateFileTree secondStateFileTree = traverseFileTreeToFind(jobInfo, getDirFileTree(jobInfo, secondTreeDir), this::isMatch, false); + if (Objects.nonNull(secondStateFileTree) && StringUtils.isNotBlank(secondStateFileTree.getPath())) { + secondStateFileInfo = new JobStateFileInfo(secondStateFileTree.getName(), + secondStateFileTree.getPath(), secondStateFileTree.getParentPath(), + Long.parseLong(secondStateFileTree.getProperties().getOrDefault(PROPS_SIZE, "0")), + Long.parseLong(secondStateFileTree.getProperties().getOrDefault(PROPS_MODIFY_TIME, "0"))); + } + } + String treeDir = this.jobStateManager.getJobStateDir(stateClass, jobInfo.getName(), highAvailablePolicy).toString(); + StateFileTree stateFileTree = traverseFileTreeToFind(jobInfo, getDirFileTree(jobInfo, treeDir), this::isMatch, false); + if (Objects.nonNull(stateFileTree) && StringUtils.isNotBlank(stateFileTree.getPath())) { + JobStateFileInfo stateFileInfo = new JobStateFileInfo(stateFileTree.getName(), + stateFileTree.getPath(), stateFileTree.getParentPath(), + Long.parseLong(stateFileTree.getProperties().getOrDefault(PROPS_SIZE, "0")), + Long.parseLong(stateFileTree.getProperties().getOrDefault(PROPS_MODIFY_TIME, "0"))); + if (Objects.nonNull(secondStateFileInfo)) { + long modifyTime = stateFileInfo.getModifytime(); + long secondModifyTime = secondStateFileInfo.getModifytime(); + if (secondModifyTime > modifyTime) { + return getState(secondStateFileInfo); + } else { + return getState(stateFileInfo); + } + } else { + return getState(stateFileInfo); + } + } else { + if (Objects.nonNull(secondStateFileInfo)) { + return getState(secondStateFileInfo); + } + } + return null; + } + + @Override public void destroy() { try { client.close(); } catch (IOException e) { throw new StreamisJobLaunchException.Runtime(-1, - "Fail to destroy httpClient in JobStateFetcher[" + this.getClass().getSimpleName() + "]",e); + "Fail to destroy httpClient in JobStateFetcher[" + this.getClass().getSimpleName() + "]", e); } } /** * Traverse the file tree to find the suitable state file - * @param jobInfo job info + * + * @param jobInfo job info * @param stateFileTree state file tree - * @param matcher matcher - * @param resolved resolved + * @param matcher matcher + * @param resolved resolved * @return */ private StateFileTree traverseFileTreeToFind(JobInfo jobInfo, StateFileTree stateFileTree, Predicate matcher, - boolean resolved){ + boolean resolved) { AtomicReference latestFileTree = new AtomicReference<>(new StateFileTree()); - if (Objects.nonNull(stateFileTree)){ - if (!resolved && stateFileTree.getIsLeaf()){ - if (matcher.test(stateFileTree.getPath()) && compareTime(stateFileTree, latestFileTree.get()) > 0){ + if (Objects.nonNull(stateFileTree)) { + if (!resolved && stateFileTree.getIsLeaf()) { + if (matcher.test(stateFileTree.getPath()) && compareTime(stateFileTree, latestFileTree.get()) > 0) { latestFileTree.set(stateFileTree); } - } else if (!stateFileTree.getIsLeaf()){ + } else if (!stateFileTree.getIsLeaf()) { Optional.ofNullable(stateFileTree.getChildren()).ifPresent(children -> children.forEach(childStateFileTree -> { StateFileTree candidateFileTree = childStateFileTree.getIsLeaf() ? childStateFileTree : traverseFileTreeToFind(jobInfo, - Objects.nonNull(childStateFileTree.getChildren())? childStateFileTree : getDirFileTree(jobInfo, childStateFileTree.getPath()), - matcher, - true); - if (compareTime(candidateFileTree, latestFileTree.get()) > 0 && matcher.test(candidateFileTree.getPath())){ + Objects.nonNull(childStateFileTree.getChildren()) ? childStateFileTree : getDirFileTree(jobInfo, childStateFileTree.getPath()), + matcher, + true); + if (compareTime(candidateFileTree, latestFileTree.get()) > 0 && matcher.test(candidateFileTree.getPath())) { latestFileTree.set(candidateFileTree); } })); @@ -153,72 +199,77 @@ private StateFileTree traverseFileTreeToFind(JobInfo jobInfo, StateFileTree stat /** * Fetch the File tree form directory + * * @param jobInfo job info * @param dirPath directory path * @return state file tree */ - private StateFileTree getDirFileTree(JobInfo jobInfo, String dirPath){ + private StateFileTree getDirFileTree(JobInfo jobInfo, String dirPath) { try { LinkisJobStateGetAction getAction = new LinkisJobStateGetAction(jobInfo.getUser(), dirPath); Result result = client.execute(getAction); String responseBody = Optional.ofNullable(result.getResponseBody()).orElse(""); LOG.trace("JobState FileTree => [responseBody: {}]", - responseBody.length() > 100? responseBody.substring(0, 100) + "..." : responseBody); + responseBody.length() > 100 ? responseBody.substring(0, 100) + "..." : responseBody); StateFileTree stateFileTree; - if (result instanceof ResultSetListResult){ - ResultSetListResult setListResult = (ResultSetListResult)result; + if (result instanceof ResultSetListResult) { + ResultSetListResult setListResult = (ResultSetListResult) result; checkFetchStateResult(setListResult); stateFileTree = DWSHttpClient.jacksonJson().convertValue(setListResult.getDirFileTrees(), StateFileTree.class); - } else if(result instanceof LinkisJobStateResult){ + } else if (result instanceof LinkisJobStateResult) { LinkisJobStateResult stateResult = (LinkisJobStateResult) result; checkFetchStateResult(stateResult); stateFileTree = stateResult.getStateFileTree(); - }else { + } else { throw new FlinkJobStateFetchException(-1, "JobState FileTree result is not a unrecognized type: " + - "[" + result.getClass().getCanonicalName() + "]",null); + "[" + result.getClass().getCanonicalName() + "]", null); } - if(stateFileTree == null){ + if (stateFileTree == null) { LOG.warn("'StateFileTree' for path [{}] is null/empty, just return the null FileTree", dirPath); return null; } LOG.trace(stateFileTree.getChildren() + ""); return stateFileTree; } catch (FlinkJobStateFetchException e) { - throw new StreamisJobLaunchException.Runtime(e.getErrCode(),e.getMessage(),e); + throw new StreamisJobLaunchException.Runtime(e.getErrCode(), e.getMessage(), e); } catch (Exception e) { - throw new StreamisJobLaunchException.Runtime(-1,"Unexpected exception in fetching JobState FileTree",e); + throw new StreamisJobLaunchException.Runtime(-1, "Unexpected exception in fetching JobState FileTree", e); } } private void checkFetchStateResult(DWSResult result) throws FlinkJobStateFetchException { - if(result.getStatus()!= 0) { + if (result.getStatus() != 0) { String errMsg = result.getMessage(); throw new FlinkJobStateFetchException(-1, "Fail to fetch JobState FileTree, message: " + errMsg, null); } } + /** * Compare timestamp value in file trees - * @param leftTree left + * + * @param leftTree left * @param rightTree right * @return size */ - private long compareTime(StateFileTree leftTree, StateFileTree rightTree){ + private long compareTime(StateFileTree leftTree, StateFileTree rightTree) { long leftTime = 0L; long rightTime = 0L; try { leftTime = Long.parseLong(Optional.ofNullable(leftTree.getProperties()).orElse(new HashMap<>()).getOrDefault(PROPS_MODIFY_TIME, "0")); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { LOG.warn("Illegal format value for property '{}' in FilePath [{}]", PROPS_MODIFY_TIME, leftTree.getPath(), e); } try { rightTime = Long.parseLong(Optional.ofNullable(rightTree.getProperties()).orElse(new HashMap<>()).getOrDefault(PROPS_MODIFY_TIME, "0")); - } catch (NumberFormatException e){ + } catch (NumberFormatException e) { LOG.warn("Illegal format value for property '{}' in FilePath [{}]", PROPS_MODIFY_TIME, rightTree.getPath(), e); } return leftTime - rightTime; } + /** * Is the path is match + * * @param path path * @return boolean */ @@ -226,6 +277,7 @@ private long compareTime(StateFileTree leftTree, StateFileTree rightTree){ /** * Get the concrete JobState entity from FileInfo + * * @param fileInfo file info * @return JobState */ diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/conf/JobLauncherConfiguration.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/conf/JobLauncherConfiguration.scala index 2e35a7317..05732f6aa 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/conf/JobLauncherConfiguration.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/conf/JobLauncherConfiguration.scala @@ -11,6 +11,8 @@ object JobLauncherConfiguration { val FLINK_FETCH_APPLICATION_INFO_MAX_TIMES: CommonVars[Int] = CommonVars("wds.streamis.application.info.fetch.max", 6) + val FLINK_FETCH_APPLICATION_LOG_ENABLE: CommonVars[Boolean] = CommonVars("wds.streamis.flink.log.fetch.enable", false) + val FLINK_STATE_DEFAULT_SCHEME: CommonVars[String] = CommonVars("wds.streamis.launch.flink.state.default.scheme", "hdfs") /** * Support schema protocols to store flink job states @@ -68,9 +70,19 @@ object JobLauncherConfiguration { val FLINKK_MANAGER_EXIT_TIME: CommonVars[Long] = CommonVars("wds.streamis.flink.manager.ec.expire.time.mills", 12 * 3600 * 1000) + val FLINK_MANAGER_EXTRA_INIT_CONFIGS: CommonVars[String] = CommonVars("wds.streamis.flink.manager.ec.extra_init.params", "linkis.user.udf.all.load=false") + val LINKIS_EC_EXPIRE_TIME_KEY: CommonVars[String] = CommonVars("linkis.ec.expire.key", "wds.linkis.engineconn.max.free.time") - val ENABLE_FLINK_LIST_INSPECT: CommonVars[Boolean] = CommonVars("wds.streamis.job.inspect.list.enable", true) + val ENABLE_FLINK_LIST_INSPECT: CommonVars[Boolean] = CommonVars("wds.streamis.job.inspact.list.enable", true) val LINKIS_EC_SUPPORT_PARALLEM = "wds.linkis.engineconn.support.parallelism" + + val LINKIS_LOG_Match: CommonVars[String] = CommonVars("linkis.log.match", "^(01|12|13|22|30|31|41|42|43|47|)\\d+") + + val ENABLE_STATUS_ON_FETCH_METRICS: CommonVars[Boolean] = CommonVars("wds.streamis.job.create.metrics.status.enable", true) + + val LINKIS_FLINK_LOG4J_CHECK_KEYWORDS = CommonVars("linkis.flink.log4j.check.keywords", "MainAppender,StreamRpcLog") + + val MAX_WAIT_NUM_AFTER_KILL = CommonVars("wds.streamis.job.kill.wait.num", 10) } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/core/FlinkLogIterator.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/core/FlinkLogIterator.scala index d6fb5c661..8c840443c 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/core/FlinkLogIterator.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/core/FlinkLogIterator.scala @@ -1,11 +1,13 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.core +import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration + import java.io.Closeable import java.util - import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.entity.LogRequestPayload -import org.apache.linkis.common.utils.Utils -import org.apache.linkis.computation.client.operator.impl.EngineConnLogOperator +import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.operator.FlinkYarnLogOperator +import org.apache.linkis.common.utils.{Logging, Utils} +import org.apache.linkis.computation.client.operator.impl.{EngineConnLogOperator, EngineConnLogs} /** * @@ -24,7 +26,7 @@ trait FlinkLogIterator extends Iterator[String] with Closeable { } class SimpleFlinkJobLogIterator(override val requestPayload: LogRequestPayload, - override val engineConnLogOperator: EngineConnLogOperator) extends FlinkLogIterator { + override val engineConnLogOperator: EngineConnLogOperator) extends FlinkLogIterator with Logging { private var logs: util.ArrayList[String] = _ private var index = 0 @@ -39,7 +41,20 @@ class SimpleFlinkJobLogIterator(override val requestPayload: LogRequestPayload, engineConnLogOperator.setIgnoreKeywords(requestPayload.getIgnoreKeywords) engineConnLogOperator.setOnlyKeywords(requestPayload.getOnlyKeywords) engineConnLogOperator.setLastRows(requestPayload.getLastRows) - val engineConnLog = engineConnLogOperator() + var engineConnLog = EngineConnLogs(null, + new util.ArrayList[String]( + util.Arrays.asList("yarn log is disabled, please contact flink operator to see logs(yarn日志已关闭,请联系Flink运维查看日志).")), + 1) + engineConnLogOperator match { + case yarnLogOperator: FlinkYarnLogOperator => + if (JobLauncherConfiguration.FLINK_FETCH_APPLICATION_LOG_ENABLE.getHotValue()) { + engineConnLog = engineConnLogOperator() + } else { + logger.info("will not get flink yarn log, because switch if off.") + } + case _ => + engineConnLog = engineConnLogOperator() + } logs = engineConnLog.logs logPath = engineConnLog.logPath endLine = engineConnLog.endLine diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/AbstractJobClient.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/AbstractJobClient.scala index e08fc66bc..b45140c3e 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/AbstractJobClient.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/AbstractJobClient.scala @@ -28,6 +28,8 @@ import org.apache.linkis.common.utils.{Logging, Utils} import org.apache.linkis.computation.client.once.simple.{SimpleOnceJob, SubmittableSimpleOnceJob} import org.apache.linkis.computation.client.once.OnceJob +import java.net.URI + /** * @author jefftlin */ @@ -109,7 +111,7 @@ abstract class AbstractJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManage */ def triggerSavepoint(): FlinkSavepoint = { getJobInfo(true) - val savepointURI = this.stateManager.getJobStateDir(classOf[FlinkSavepoint], jobInfo.getName) + val savepointURI = this.stateManager.getJobStateDir(classOf[FlinkSavepoint], jobInfo.getName,jobInfo.getHighAvailablePolicy) triggerSavepoint(savepointURI.toString, JobLauncherConfiguration.FLINK_TRIGGER_SAVEPOINT_MODE.getValue) } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/EngineConnJobClient.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/EngineConnJobClient.scala index 0dcfd851c..a5499dce3 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/EngineConnJobClient.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/EngineConnJobClient.scala @@ -46,7 +46,7 @@ class EngineConnJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManager: JobS engineConnLogOperator match { case clientLogOperator: FlinkClientLogOperator => var logDirSuffix = this.jobInfo.asInstanceOf[EngineConnJobInfo].getLogDirSuffix - if (StringUtils.isBlank(logDirSuffix) && requestPayload.isLogHistory){ + if (StringUtils.isBlank(logDirSuffix)){ // If want to fetch the history log, must get the log directory suffix first getLinkisClient match { case client: DWSHttpClient => diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerClient.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerClient.scala index 44bba94e4..ecfa6339c 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerClient.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerClient.scala @@ -1,6 +1,7 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.client import com.webank.wedatasphere.streamis.jobmanager.launcher.enums.FlinkManagerActionType +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.constants.JobConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.{FlinkManagerAction, FlinkManagerClient} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.exception.{FlinkJobFlinkECErrorException, FlinkJobParamErrorException} @@ -70,6 +71,24 @@ class LinkisFlinkManagerClient extends FlinkManagerClient with Logging { initProperties.put(JobLauncherConfiguration.LINKIS_EC_EXPIRE_TIME_KEY.getValue, JobLauncherConfiguration.FLINKK_MANAGER_EXIT_TIME.getHotValue().toString) initProperties.put(JobLauncherConfiguration.LINKIS_EC_SUPPORT_PARALLEM, true.toString) + if (StringUtils.isNotBlank(JobLauncherConfiguration.FLINK_MANAGER_EXTRA_INIT_CONFIGS.getValue)) { + JobLauncherConfiguration.FLINK_MANAGER_EXTRA_INIT_CONFIGS.getValue.split(JobConstants.DELIMITER_COMMA).foreach(s => { + if (StringUtils.isNotBlank(s)) { + val arr = s.split(JobConstants.DELIMITER_EUQAL) + if (null != arr && arr.length == 2) { + val key = arr(0) + val value = arr(1) + if (initProperties.containsKey(arr(0))) { + logger.warn(s"init extra params ${key}=${value} will overite params : ${key}=${initProperties.get(key)} for flink manager ec.") + } else { + logger.info(s"add init extra params : ${key}=${value} for flink manager ec.") + } + initProperties.put(key, value) + } + } + }) + } + var askEngineConnAction = AskEngineConnAction .newBuilder() .setCreateService(getClass.getSimpleName) @@ -93,8 +112,6 @@ class LinkisFlinkManagerClient extends FlinkManagerClient with Logging { } val tmpLabels = SerializationUtils.clone(initLabels).asInstanceOf[util.Map[String, String]] val tmpProps = SerializationUtils.clone(initProperties).asInstanceOf[util.Map[String, String]] -// var lastAsyncId: String = null -// var lastManagerInstance: ServiceInstance = null var retryCount = 0 val MAX_RETRY_COUNT = 10 @@ -129,11 +146,11 @@ class LinkisFlinkManagerClient extends FlinkManagerClient with Logging { } else { throw new FlinkJobFlinkECErrorException(s"Start manager ec failed. Because : ${failMsg}") } - case null => + case _ => end = true - logger.error(s"start flink manager ec failed because: null ec result status") + logger.error(s"start flink manager ec failed because: unknonw ec result status : ${nodeInfo.get(AMConstant.EC_ASYNC_START_RESULT_KEY)}") logger.warn(s"askEngineConnAction: ${askEngineConnAction.getRequestPayload}") - throw new FlinkJobFlinkECErrorException(s"Start manager ec failed. Null ec result status") + throw new FlinkJobFlinkECErrorException(s"Start manager ec failed. Unkown ec result status") } } Thread.sleep(1000) @@ -353,7 +370,7 @@ object LinkisFlinkManagerClient extends Logging { def initScheduledTask(): Unit = { - if (!JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE.getValue) { + if (!JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE.getHotValue()) { logger.info("Flink manager ec refresh task was disabled. Will skip the scheduled refreshing task.") return } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerJobClient.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerJobClient.scala index 7c2256c9e..572934f68 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerJobClient.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/client/LinkisFlinkManagerJobClient.scala @@ -17,13 +17,14 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.E import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.state.FlinkSavepoint import org.apache.commons.lang3.StringUtils import org.apache.linkis.common.exception.LinkisRetryException -import org.apache.linkis.common.utils.{JsonUtils, Logging, RetryHandler} +import org.apache.linkis.common.utils.{JsonUtils, Logging, RetryHandler, Utils} import org.apache.linkis.computation.client.once.OnceJob import org.apache.linkis.computation.client.once.result.EngineConnOperateResult import org.apache.linkis.computation.client.once.simple.SimpleOnceJob import org.apache.linkis.governance.common.constant.ec.ECConstants import org.apache.linkis.ujes.client.exception.UJESJobException +import java.io.IOException import java.util import scala.collection.JavaConverters.asScalaBufferConverter @@ -54,8 +55,8 @@ class LinkisFlinkManagerJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManag onceJob match { case simpleOnceJob: SimpleOnceJob => if (StringUtils.isNotBlank(jobInfo.getStatus) && JobConf.isCompleted(JobConf.linkisStatusToStreamisStatus(jobInfo.getStatus))) { - jobInfo.setStatus(simpleOnceJob.getStatus) - logger.info(s"Job : ${simpleOnceJob.getId} is completed, no need to get status from linkis.") +// jobInfo.setStatus(simpleOnceJob.getStatus) + logger.info(s"Job : ${simpleOnceJob.getId} is completed : ${jobInfo.getStatus}, no need to get status from linkis.") } else if (refresh && isDetachJob(jobInfo)) { jobInfo match { case engineConnJobInfo: EngineConnJobInfo => @@ -79,9 +80,8 @@ class LinkisFlinkManagerJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManag case _ => throw new FlinkJobParamErrorException(s"Invalid jobInfo : ${jobInfo} , cannot stop.", null) } - } else { - return super.stop(snapshot) } + Utils.tryAndWarn(super.stop(snapshot)) } def getJobStatusWithRetry(appId: String): String = { @@ -92,6 +92,7 @@ class LinkisFlinkManagerJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManag retryHandler.addRetryException(classOf[UJESJobException]) retryHandler.addRetryException(classOf[LinkisRetryException]) retryHandler.addRetryException(classOf[FlinkJobStateFetchException]) + retryHandler.addRetryException(classOf[IOException]) retryHandler.retry( { val statusAction = new FlinkStatusAction(appId, null) @@ -121,7 +122,7 @@ class LinkisFlinkManagerJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManag def stopApp(appId: String, snapshot: Boolean): JobStateInfo = { val jobStateInfo = new JobStateInfo() if (snapshot) { - val savepointURI = this.stateManager.getJobStateDir(classOf[FlinkSavepoint], jobInfo.getName) + val savepointURI = this.stateManager.getJobStateDir(classOf[FlinkSavepoint], jobInfo.getName,jobInfo.getHighAvailablePolicy) val flinkSavepoint = doSavePoint(appId, null, savepointURI.toString, JobLauncherConfiguration.FLINK_TRIGGER_SAVEPOINT_MODE.getValue) jobStateInfo.setLocation(flinkSavepoint.getLocation.toString) jobStateInfo.setTimestamp(flinkSavepoint.getTimestamp) @@ -140,6 +141,19 @@ class LinkisFlinkManagerJobClient(onceJob: OnceJob, jobInfo: JobInfo, stateManag if (StringUtils.isBlank(jobStateInfo.getLocation)) { jobStateInfo.setLocation("No location") } + // wait for task to change status to stopped + val MAX_WAIT_TIME = JobLauncherConfiguration.MAX_WAIT_NUM_AFTER_KILL.getHotValue() + val WAIT_MILLS = 1000 + var retryNum = 0 + while (retryNum < MAX_WAIT_TIME && StringUtils.isNotBlank(jobInfo.getStatus) && !JobConf.isCompleted(JobConf.linkisStatusToStreamisStatus(jobInfo.getStatus))) { + retryNum += 1 + jobInfo.setStatus(getJobStatusWithRetry(appId)) + Thread.sleep(WAIT_MILLS) + } + if (retryNum >= MAX_WAIT_TIME) { + val times = MAX_WAIT_TIME * WAIT_MILLS / 1000.0 + logger.warn(s"waiting for ${times}s after app : ${appId} was killed, but the task is not completed , status : ${jobInfo.getStatus}") + } jobStateInfo } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/jobInfo/EngineConnJobInfo.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/jobInfo/EngineConnJobInfo.scala index 461dc1dee..5525da70d 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/jobInfo/EngineConnJobInfo.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/jobInfo/EngineConnJobInfo.scala @@ -31,6 +31,11 @@ class EngineConnJobInfo extends YarnJobInfo with LinkisJobInfo { private var jobParams: java.util.Map[String, Object] = _ private var ecInstance: ServiceInstance = _ + /** + * The default value must be null and placeholders cannot be used + */ + private var highAvailablePolicy: String = null + override def getApplicationId: String = applicationId def setApplicationId(applicationId: String): Unit = this.applicationId = applicationId @@ -156,4 +161,10 @@ class EngineConnJobInfo extends YarnJobInfo with LinkisJobInfo { this.ecInstance = instance this } + + override def getHighAvailablePolicy(): String = highAvailablePolicy + + def setHighAvailablePolicy(highAvailablePolicy: String): Unit = { + this.highAvailablePolicy = highAvailablePolicy + } } diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/AbstractJobStateManager.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/AbstractJobStateManager.scala index 267d3bf73..198a0fbdc 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/AbstractJobStateManager.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/AbstractJobStateManager.scala @@ -16,6 +16,7 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager import com.webank.wedatasphere.streamis.jobmanager.launcher.job.JobInfo +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobStateManager import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.{JobState, JobStateFetcher} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration @@ -66,6 +67,12 @@ abstract class AbstractJobStateManager extends JobStateManager { case _ => null.asInstanceOf[T] } + + override def getJobState[T <: JobState](clazz: Class[_], jobInfo: JobInfo, highAvailablePolicy: String): T = Option(getOrCreateJobStateFetcher[T](clazz)) match { + case Some(jobStateFetcher: JobStateFetcher[T]) =>jobStateFetcher.getState(jobInfo,highAvailablePolicy) + case _ => null.asInstanceOf[T] + } + /** * Register job state fetcher * @@ -77,16 +84,21 @@ abstract class AbstractJobStateManager extends JobStateManager { stateFetcherLoaders.put(clazz.getCanonicalName, builder) } - override def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, relativePath: String): URI = { - getJobStateDir(clazz, scheme, null, relativePath) + override def getJobStateDir[T <: JobState](clazz: Class[_], relativePath: String, highAvailablePolicy: String): URI = { + getJobStateDir(clazz, JobLauncherConfiguration.FLINK_STATE_DEFAULT_SCHEME.getValue, + JobLauncherConfiguration.FLINK_STATE_DEFAULT_AUTHORITY.getValue, relativePath,highAvailablePolicy) } - override def getJobStateDir[T <: JobState](clazz: Class[_], relativePath: String): URI = { + override def getJobStateDir[T <: JobState](clazz: Class[_], relativePath: String): URI = { getJobStateDir(clazz, JobLauncherConfiguration.FLINK_STATE_DEFAULT_SCHEME.getValue, JobLauncherConfiguration.FLINK_STATE_DEFAULT_AUTHORITY.getValue, relativePath) } + override def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String): URI = { + new URI(scheme, authority, normalizePath(getJobStateRootPath(clazz, scheme) + "/" + relativePath), null, null) + } + /** * Get job state directory uri * @@ -97,9 +109,16 @@ abstract class AbstractJobStateManager extends JobStateManager { * @tparam T * @return */ - override def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String): URI = { - // To Support all schema - new URI(scheme, authority, normalizePath(getJobStateRootPath(clazz, scheme) + "/" + relativePath), null, null) + override def getJobStateDir[T <: JobState](clazz: Class[_], scheme: String, authority: String, relativePath: String,highAvailablePolicy: String): URI = { + val jobSchema = matchJobSchema(highAvailablePolicy) + new URI(scheme, authority, normalizePath(getJobStateRootPath(clazz, scheme) + "/" + jobSchema + "/" + relativePath), null, null) + } + + private def matchJobSchema(highAvailablePolicy: String): String = highAvailablePolicy match { + case JobConf.HIGHAVAILABLE_DEFAULT_POLICY.getValue | "NULL" | JobConf.HIGHAVAILABLE_POLICY_SINGLE_BAK.getValue => JobConf.JOB_SCHEMA_SINGLE.getValue + case JobConf.HIGHAVAILABLE_POLICY_DOUBLE.getValue | JobConf.HIGHAVAILABLE_POLICY_DOUBLE_BAK.getValue => JobConf.JOB_SCHEMA_DOUBLE.getValue + case JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE.getValue | JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE_BAK.getValue => JobConf.JOB_SCHEMA_MANAGER_SLAVE.getValue + case _ => JobConf.JOB_SCHEMA_SINGLE.getValue } private def normalizePath(input: String): String = { diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/FlinkJobLaunchManager.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/FlinkJobLaunchManager.scala index d7aceedb1..2c00c222b 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/FlinkJobLaunchManager.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/FlinkJobLaunchManager.scala @@ -15,22 +15,23 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager +import com.webank.wedatasphere.streamis.errorcode.handler.StreamisErrorCodeHandler import com.webank.wedatasphere.streamis.jobmanager.launcher.enums.JobClientType import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobStateManager import com.webank.wedatasphere.streamis.jobmanager.launcher.job.{JobClient, LaunchJob} import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.JobState import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration -import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration.{VAR_FLINK_APP_NAME, VAR_FLINK_SAVEPOINT_PATH} +import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration.{LINKIS_FLINK_LOG4J_CHECK_KEYWORDS, VAR_FLINK_APP_NAME, VAR_FLINK_SAVEPOINT_PATH} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.exception.FlinkJobLaunchErrorException import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.{EngineConnJobInfo, LinkisJobInfo} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.client.factory.AbstractJobClientFactory -import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager.FlinkJobLaunchManager.EXCEPTION_PATTERN import org.apache.commons.lang3.StringEscapeUtils import org.apache.linkis.common.utils.{Logging, Utils} import org.apache.linkis.computation.client.once.{OnceJob, SubmittableOnceJob} import org.apache.linkis.computation.client.utils.LabelKeyUtils import org.apache.linkis.protocol.utils.TaskUtils +import scala.collection.JavaConverters.asScalaBufferConverter import scala.util.matching.Regex @@ -47,6 +48,7 @@ trait FlinkJobLaunchManager extends LinkisJobLaunchManager with Logging { protected var jobStateManager: JobStateManager = _ + /** * This method is used to launch a new job. * @@ -68,6 +70,9 @@ trait FlinkJobLaunchManager extends LinkisJobLaunchManager with Logging { val index = jobName.lastIndexOf(".") if (index > 0) jobName.substring(0, index) else jobName }) + if (null !=LINKIS_FLINK_LOG4J_CHECK_KEYWORDS.getHotValue() && LINKIS_FLINK_LOG4J_CHECK_KEYWORDS.getHotValue().isEmpty) { + TaskUtils.getStartupMap(job.getParams).put(LINKIS_FLINK_LOG4J_CHECK_KEYWORDS.key,LINKIS_FLINK_LOG4J_CHECK_KEYWORDS.getHotValue()) + } job.getLabels.get(LabelKeyUtils.ENGINE_TYPE_LABEL_KEY) match { case engineConnType: String => if(!engineConnType.toLowerCase.startsWith(FlinkJobLaunchManager.FLINK_ENGINE_CONN_TYPE)) @@ -100,7 +105,7 @@ trait FlinkJobLaunchManager extends LinkisJobLaunchManager with Logging { logger.error(msg) stopMsg = msg } - throw new FlinkJobLaunchErrorException(-1, exceptionAnalyze(s"Fail to obtain launched job info(获取任务信息失败,引擎服务可能启动失败). ${stopMsg}", t), t) + throw new FlinkJobLaunchErrorException(-1, t.getMessage, t) } val client = AbstractJobClientFactory.getJobManager().createJobClient(onceJob, jobInfo, getJobStateManager) client @@ -108,7 +113,7 @@ trait FlinkJobLaunchManager extends LinkisJobLaunchManager with Logging { case e: FlinkJobLaunchErrorException => throw e case t: Throwable => error(s"Server Exception in submitting Flink job [${job.getJobName}] to Linkis remote server", t) - throw new FlinkJobLaunchErrorException(-1, exceptionAnalyze(s"Exception in submitting Flink job to Linkis remote server (提交至Linkis服务失败,请检查服务及网络)", t), t) + throw new FlinkJobLaunchErrorException(-1, t.getMessage, t) } } @@ -151,12 +156,24 @@ trait FlinkJobLaunchManager extends LinkisJobLaunchManager with Logging { * @return */ def exceptionAnalyze(errorMsg: String, t: Throwable): String = { - EXCEPTION_PATTERN.findFirstMatchIn(t.getMessage) match { - case Some(m) => - errorMsg + s", 原因分析[${m.group(1)}]" - case _ => errorMsg + // EXCEPTION_PATTERN.findFirstMatchIn(t.getMessage) match { + // case Some(m) => + // errorMsg + s", 原因分析[${m.group(1)}]" + // case _ => errorMsg + // } + if (null != t) { + val errorCodes = StreamisErrorCodeHandler.getInstance().handle(t.getMessage) + if (errorCodes != null && errorCodes.size() > 0) { + errorCodes.asScala.map(e => e.getErrorDesc).mkString(",") + } else { + errorMsg + } + } else { + errorMsg } + } + } object FlinkJobLaunchManager { diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/SimpleFlinkJobLaunchManager.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/SimpleFlinkJobLaunchManager.scala index 7b47bc704..da856bc9a 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/SimpleFlinkJobLaunchManager.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-linkis/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/linkis/job/manager/SimpleFlinkJobLaunchManager.scala @@ -16,11 +16,13 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager import com.webank.wedatasphere.streamis.jobmanager.launcher.enums.JobClientType +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.constants.JobConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.errorcode.JobLaunchErrorCode import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.{JobState, JobStateInfo} import com.webank.wedatasphere.streamis.jobmanager.launcher.job.{JobClient, JobInfo, LaunchJob} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration +import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.exception.StreamisJobLaunchException import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager.SimpleFlinkJobLaunchManager.INSTANCE_NAME import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.LinkisJobInfo import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.EngineConnJobInfo @@ -34,6 +36,7 @@ import org.apache.linkis.computation.client.once.{OnceJob, SubmittableOnceJob} import org.apache.linkis.computation.client.operator.impl.EngineConnApplicationInfoOperator import org.apache.linkis.governance.common.constant.ec.ECConstants import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.manager.common.entity.enumeration.NodeStatus import org.apache.linkis.protocol.utils.TaskUtils import org.apache.linkis.ujes.client.exception.UJESJobException @@ -65,6 +68,7 @@ class SimpleFlinkJobLaunchManager extends FlinkJobLaunchManager { jobInfo.setName(StringEscapeUtils.escapeJava(job.getJobName)) jobInfo.setId(onceJob.getId) jobInfo.setUser(job.getSubmitUser) + jobInfo.setHighAvailablePolicy(job.getLaunchConfigs.get(JobConf.HIGHAVAILABLE_POLICY_KEY.getHotValue()).toString) onceJob match { case submittableSimpleOnceJob: SubmittableSimpleOnceJob => jobInfo.setEcInstance(submittableSimpleOnceJob.getEcServiceInstance) @@ -79,10 +83,15 @@ class SimpleFlinkJobLaunchManager extends FlinkJobLaunchManager { logger.info(s"Job manager mode : ${managerMode}") Utils.tryCatch(fetchApplicationInfo(onceJob, jobInfo)) { t => val message = s"Unable to fetch the application info of launched job [${job.getJobName}], maybe the engine has been shutdown" - error(message, t) + logger.error(message, t) // Mark failed jobInfo.setStatus("failed") - jobInfo.setCompletedMsg(message) + jobInfo.setCompletedMsg(exceptionAnalyze(message,t)) + // kill ec + Utils.tryAndWarn { + logger.error(s"Will kill failed ec : ${jobInfo.getEcInstance().toString()} with appid : ${jobInfo.getApplicationId}, url : ${jobInfo.getApplicationUrl}") + onceJob.kill() + } } jobInfo.setJobParams(job.getParams.asInstanceOf[util.Map[String, Object]]) jobInfo.setResources(nodeInfo.get("nodeResource").asInstanceOf[util.Map[String, Object]]) @@ -149,6 +158,25 @@ class SimpleFlinkJobLaunchManager extends FlinkJobLaunchManager { getEngingConnAction.addRequestPayload(JobConstants.INSTANCE_KEY, ecInstance.getInstance) } val rs = SimpleOnceJobBuilder.getLinkisManagerClient.getEngineConn(getEngingConnAction) + if (JobLauncherConfiguration.ENABLE_STATUS_ON_FETCH_METRICS.getHotValue()) { + val engine = rs.getData.getOrDefault(JobConstants.RESULT_EC_ENGINE_KEY, new util.HashMap[String, AnyRef]).asInstanceOf[util.Map[String, AnyRef]] + if (!engine.isEmpty) { + val status = engine.getOrDefault(ECConstants.NODE_STATUS_KEY, "").toString + logger.info(s"Got ec : ${ecInstance.toString()} status : ${status}") + if (StringUtils.isNotBlank(status)) { + if (NodeStatus.isCompleted(NodeStatus.toNodeStatus(status))) { + val msg = s"Ec : ${ecInstance.toString()} has completed with status : ${status}" + logger.error(msg) + throw new StreamisJobLaunchException(JobLaunchErrorCode.JOB_EC_ERROR_CODE, msg, null) + } + } else { + logger.error(s"Got null status for ec : ${ecInstance.toString()}") + } + } else { + logger.error(s"Got null ec info for ec : ${ecInstance.toString()}") + } + } + val metricsStr = rs.getData.getOrDefault(JobConstants.RESULT_EC_METRICS_KEY, "{}") val metricsMap = if (null != metricsStr) { JsonUtils.jackson.readValue(metricsStr.toString, classOf[util.Map[String, AnyRef]]) diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/pom.xml b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/pom.xml index d0151ddeb..e80502c03 100755 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/pom.xml +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 @@ -36,7 +36,7 @@ com.webank.wedatasphere.streamis streamis-job-launcher-linkis - ${jobmanager.version} + ${streamis.version} org.apache.linkis @@ -45,12 +45,12 @@ com.webank.wedatasphere.streamis streamis-job-launcher-base - ${jobmanager.version} + ${streamis.version} com.webank.wedatasphere.streamis streamis-job-manager-base - ${jobmanager.version} + ${streamis.version} org.apache.linkis diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/JobLauncherAutoConfiguration.java b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/JobLauncherAutoConfiguration.java index b8bdbf06f..dc96e5c4b 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/JobLauncherAutoConfiguration.java +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/JobLauncherAutoConfiguration.java @@ -39,7 +39,7 @@ public class JobLauncherAutoConfiguration { public static final String DEFAULT_JOB_LAUNCH_MANGER = SimpleFlinkJobLaunchManager$.MODULE$.INSTANCE_NAME(); @Bean - @ConditionalOnMissingBean + @ConditionalOnMissingBean(JobLaunchManager.class) @SuppressWarnings("unchecked") public JobLaunchManager defaultJobLaunchManager(){ // First to scan the available job launch manager diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/utils/JobConfUtil.java b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/utils/JobConfUtil.java new file mode 100644 index 000000000..bcaef7f54 --- /dev/null +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/launcher/utils/JobConfUtil.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.streamis.jobmanager.launcher.utils; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants; +import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConstants; +import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.JobConfValue; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +import java.util.stream.Collectors; + +public class JobConfUtil { + + private JobConfUtil(){} + + public static List valuesHandler (List jobConfValueList){ + String manageMode = JobConfKeyConstants.MANAGE_MODE_KEY().getValue(); + List jobConfValues = jobConfValueList.stream() + .filter(jobConfValue -> jobConfValue.getKey().equals(manageMode) && jobConfValue.getValue().isEmpty()) + .peek(jobConfValue -> jobConfValue.setValue(JobConstants.MANAGE_MODE_DETACH())) + .collect(Collectors.toList()); + return jobConfValues; + } + + +} diff --git a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/service/DefaultStreamJobConfService.scala b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/service/DefaultStreamJobConfService.scala index 21a453ae9..e30ea52ee 100644 --- a/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/service/DefaultStreamJobConfService.scala +++ b/streamis-jobmanager/streamis-job-launcher/streamis-job-launcher-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/launcher/service/DefaultStreamJobConfService.scala @@ -1,4 +1,5 @@ package com.webank.wedatasphere.streamis.jobmanager.launcher.service + import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.vo.JobConfValueVo.ValueList @@ -6,6 +7,7 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.vo.{JobConfVa import com.webank.wedatasphere.streamis.jobmanager.launcher.entity.{JobConfDefinition, JobConfValue} import com.webank.wedatasphere.streamis.jobmanager.launcher.exception.ConfigurationException import com.webank.wedatasphere.streamis.jobmanager.launcher.service.tools.JobConfValueUtils +import com.webank.wedatasphere.streamis.jobmanager.launcher.utils.JobConfUtil import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob import org.apache.commons.lang3.StringUtils @@ -47,6 +49,7 @@ class DefaultStreamJobConfService extends StreamJobConfService with Logging{ // Can deserialize the value map at first val configValues = JobConfValueUtils.deserialize(valueMap, definitions) suppleDefaultConfValue(configValues, definitions) + JobConfUtil.valuesHandler(configValues) saveJobConfig(jobId, configValues) } @@ -97,20 +100,20 @@ class DefaultStreamJobConfService extends StreamJobConfService with Logging{ * @param valueSet value set */ override def saveJobConfValueSet(valueSet: JobConfValueSet): Unit = { - val configValues: util.List[JobConfValue] = new util.ArrayList[JobConfValue]() - val definitions = this.streamJobConfMapper.loadAllDefinitions() - val definitionMap: util.Map[String, JobConfDefinition] = definitions - .asScala.map(definition => (definition.getKey, definition)).toMap.asJava - configValues.addAll(convertToConfigValue( - valueSet.getResourceConfig, definitionMap, Option(definitionMap.get(JobConfKeyConstants.GROUP_RESOURCE.getValue)) match { - case Some(definition) => definition.getId - case _ => 0 - })) - configValues.addAll(convertToConfigValue( - valueSet.getParameterConfig, definitionMap, Option(definitionMap.get(JobConfKeyConstants.GROUP_FLINK_EXTRA.getValue)) match { - case Some(definition) => definition.getId - case _ => 0 - })) + val configValues: util.List[JobConfValue] = new util.ArrayList[JobConfValue]() + val definitions = this.streamJobConfMapper.loadAllDefinitions() + val definitionMap: util.Map[String, JobConfDefinition] = definitions + .asScala.map(definition => (definition.getKey, definition)).toMap.asJava + configValues.addAll(convertToConfigValue( + valueSet.getResourceConfig, definitionMap, Option(definitionMap.get(JobConfKeyConstants.GROUP_RESOURCE.getValue)) match { + case Some(definition) => definition.getId + case _ => 0 + })) + configValues.addAll(convertToConfigValue( + valueSet.getParameterConfig, definitionMap, Option(definitionMap.get(JobConfKeyConstants.GROUP_FLINK_EXTRA.getValue)) match { + case Some(definition) => definition.getId + case _ => 0 + })) configValues.addAll(convertToConfigValue( valueSet.getProduceConfig, definitionMap, Option(definitionMap.get(JobConfKeyConstants.GROUP_PRODUCE.getValue)) match { case Some(definition) => definition.getId @@ -147,7 +150,7 @@ class DefaultStreamJobConfService extends StreamJobConfService with Logging{ private def saveJobConfig(jobId: Long, configValues: util.List[JobConfValue]): Unit = { trace(s"Query and lock the StreamJob in [$jobId] before saving/update configuration") - Option(streamJobMapper.queryAndLockJobById(jobId)) match { + Option(streamJobMapper.queryJobById(jobId)) match { case None => throw new ConfigurationException(s"Unable to saving/update configuration, the StreamJob [$jobId] is not exists.") case Some(job: StreamJob) => // Delete all configuration @@ -179,7 +182,7 @@ class DefaultStreamJobConfService extends StreamJobConfService with Logging{ val configValue = new JobConfValue(definition.getKey, definition.getDefaultValue, definition.getId) configValues.add(configValue) } - ) + ) } /** * Resolve to config value view object @@ -188,30 +191,30 @@ class DefaultStreamJobConfService extends StreamJobConfService with Logging{ * @param definitionMap (key => definition) */ private def resolveConfigValueVo(group: String, jobConfig: util.Map[String, AnyRef], - definitionMap: util.Map[String, JobConfDefinition]): util.List[JobConfValueVo] = { - Option(jobConfig.get(group)) match { - case Some(configMap: util.Map[String, AnyRef]) => - configMap.asScala.map{ - case (key, value) => - val configValue = new JobConfValueVo(key, String.valueOf(value)) - Option(definitionMap.get(key)) match { - case Some(definition) => - configValue.setConfigkeyId(definition.getId) - configValue.setName(definition.getName) - val refValues = definition.getRefValues - if (StringUtils.isNotBlank(refValues)){ - val valueList = new util.ArrayList[ValueList]() - refValues.split(",").foreach(refValue =>{ - valueList.add(new ValueList(refValue, refValue.equals(value))) - }) - configValue.setValueLists(valueList) - } - case _ => - } - configValue - }.toList.asJava - case None => new util.ArrayList[JobConfValueVo]() - } + definitionMap: util.Map[String, JobConfDefinition]): util.List[JobConfValueVo] = { + Option(jobConfig.get(group)) match { + case Some(configMap: util.Map[String, AnyRef]) => + configMap.asScala.map{ + case (key, value) => + val configValue = new JobConfValueVo(key, String.valueOf(value)) + Option(definitionMap.get(key)) match { + case Some(definition) => + configValue.setConfigkeyId(definition.getId) + configValue.setName(definition.getName) + val refValues = definition.getRefValues + if (StringUtils.isNotBlank(refValues)){ + val valueList = new util.ArrayList[ValueList]() + refValues.split(",").foreach(refValue =>{ + valueList.add(new ValueList(refValue, refValue.equals(value))) + }) + configValue.setValueLists(valueList) + } + case _ => + } + configValue + }.toList.asJava + case None => new util.ArrayList[JobConfValueVo]() + } } /** diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/pom.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/pom.xml index 65a9e49f1..b153de718 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/pom.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigAutowired.java b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigAutowired.java index 046694c57..f0fef01b6 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigAutowired.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigAutowired.java @@ -48,12 +48,17 @@ public StreamisLogAppenderConfig logAppenderConfig(StreamisLogAppenderConfig.Bui if (gateway.endsWith("/")){ gateway = gateway.substring(0, gateway.length() - 1); } - gateway += this.configuration.getString(LOG_COLLECT_PATH, "/"); - builder.setRpcAddress(gateway); + String heartbeatAddress =gateway + this.configuration.getString(LOG_HEARTBEAT_PATH, "/"); + String rpcAddress = gateway + this.configuration.getString(LOG_COLLECT_PATH, "/"); + builder.setRpcAddress(rpcAddress); + builder.setRpcHeartbeatAddress(heartbeatAddress); } if (builder instanceof StreamisLog4j2AppenderConfig.Builder) { List filterStrategies = this.configuration.get(LOG_FILTER_STRATEGIES); for (String filterStrategy : filterStrategies) { + if (this.configuration.getBoolean(DEBUG_MODE)) { + System.out.println("Found strategy: " + filterStrategy); + } if ("LevelMatch".equals(filterStrategy)) { ((StreamisLog4j2AppenderConfig.Builder)builder).withFilter(LevelMatchFilter.newBuilder().setOnMatch(Filter.Result.ACCEPT).setOnMismatch(Filter.Result.DENY) .setLevel(Level.getLevel(this.configuration.getString(LOG_FILTER_LEVEL_MATCH))).build()); @@ -91,7 +96,9 @@ public StreamisLogAppenderConfig logAppenderConfig(StreamisLogAppenderConfig.Bui .setDiscard(this.configuration.getBoolean(LOG_RPC_CACHE_DISCARD)) .setDiscardWindow(this.configuration.getInteger(LOG_RPC_CACHE_DISCARD_WINDOW)) .setRpcBufferSize(this.configuration.getInteger(LOG_RPC_BUFFER_SIZE)) - .setRpcBufferExpireTimeInSec(this.configuration.getInteger(LOG_RPC_BUFFER_EXPIRE_TIME)).build(); + .setRpcBufferExpireTimeInSec(this.configuration.getInteger(LOG_RPC_BUFFER_EXPIRE_TIME)) + .setRpcHeartbeatEnable(this.configuration.getBoolean(LOG_HEARTBEAT_ENABLE)) + .setRpcHeartbeatInterval(this.configuration.getInteger(LOG_HEARTBEAT_INTERVAL)).build(); } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigDefine.java b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigDefine.java index b483b4eda..7df88ddd6 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigDefine.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/flink-streamis-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/flink/FlinkStreamisConfigDefine.java @@ -27,6 +27,18 @@ private FlinkStreamisConfigDefine(){} public static final ConfigOption LOG_COLLECT_PATH = ConfigOptions.key("stream.log.collect.path") .stringType().defaultValue("/api/rest_j/v1/streamis/streamJobManager/log/collect/events").withDescription("The entrypoint path of collecting log"); + + public static final ConfigOption LOG_HEARTBEAT_PATH = ConfigOptions.key("stream.log.heartbeat.path") + .stringType().defaultValue("/api/rest_j/v1/streamis/streamJobManager/log/heartbeat").withDescription("The entrypoint path of heartbeat log"); + + + public static final ConfigOption LOG_HEARTBEAT_INTERVAL = ConfigOptions.key("stream.log.heartbeat.interval") + .intType().defaultValue(30 * 60 * 1000).withDescription("Heartbeat interval (ms) in log RPC module"); + + + public static final ConfigOption LOG_HEARTBEAT_ENABLE = ConfigOptions.key("stream.log.heartbeat.enable") + .booleanType().defaultValue(true).withDescription("Heartbeat enable"); + /** * Connection timeout(in milliseconds) in log RPC module */ diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/pom.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/pom.xml index 1be8f531a..dea87c97c 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/pom.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/RpcLogSenderConfig.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/RpcLogSenderConfig.java index 0fb03185f..a102c7122 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/RpcLogSenderConfig.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/RpcLogSenderConfig.java @@ -45,6 +45,20 @@ public class RpcLogSenderConfig { /** * Auth config */ + /** + * If true, flink app will exit when registered failed + */ + private boolean heartbeatEnable = true; + /** + * send heartbeat address + */ + private String heartbeatAddress; + + /** + * Heartbeat interval + */ + + private int heartbeatInterval = 30 * 60 * 1000; private RpcAuthConfig authConfig = new RpcAuthConfig(); /** @@ -57,20 +71,22 @@ public class RpcLogSenderConfig { */ private SendBufferConfig bufferConfig = new SendBufferConfig(); + public RpcLogSenderConfig(){ } public RpcLogSenderConfig(String address, int sendRetryCnt, int connectionTimeout, int socketTimeout, int serverRecoveryTimeInSec, int maxDelayTimeInSec, - RpcAuthConfig authConfig, SendLogCacheConfig cacheConfig, SendBufferConfig bufferConfig){ + RpcAuthConfig authConfig, SendLogCacheConfig cacheConfig, SendBufferConfig bufferConfig, String heartbeatAddress, int heartbeatInterval){ this.address = address; this.sendRetryCnt = sendRetryCnt; this.connectionTimeout = connectionTimeout; this.socketTimeout = socketTimeout; this.serverRecoveryTimeInSec = serverRecoveryTimeInSec; this.maxDelayTimeInSec = maxDelayTimeInSec; - if (Objects.nonNull(authConfig)){ + this.heartbeatInterval = heartbeatInterval; + if (Objects.nonNull(authConfig)) { this.authConfig = authConfig; } if (Objects.nonNull(cacheConfig)){ @@ -79,6 +95,9 @@ public RpcLogSenderConfig(String address, int sendRetryCnt, int connectionTimeou if (Objects.nonNull(bufferConfig)){ this.bufferConfig = bufferConfig; } + if (Objects.nonNull(heartbeatAddress)) { + this.heartbeatAddress = heartbeatAddress; + } } public RpcAuthConfig getAuthConfig() { @@ -161,6 +180,30 @@ public void setDebugMode(boolean debugMode) { this.debugMode = debugMode; } + public String getHeartbeatAddress() { + return heartbeatAddress; + } + + public void setHeartbeatAddress(String heartbeatAddress) { + this.heartbeatAddress = heartbeatAddress; + } + + public int getHeartbeatInterval() { + return heartbeatInterval; + } + + public void setHeartbeatInterval(int heartbeatInterval) { + this.heartbeatInterval = heartbeatInterval; + } + + public boolean isHeartbeatEnable() { + return heartbeatEnable; + } + + public void setHeartbeatEnable(boolean heartbeatEnable) { + this.heartbeatEnable = heartbeatEnable; + } + @Override public String toString() { return "RpcLogSenderConfig{" + @@ -173,6 +216,9 @@ public String toString() { ", authConfig=" + authConfig + ", cacheConfig=" + cacheConfig + ", bufferConfig=" + bufferConfig + + ", heartbeatEnable=" + heartbeatEnable + + ", heartbeatAddress=" + heartbeatAddress + + ", heartbeatInterval=" + heartbeatInterval + ", debug=" + debugMode + '}'; } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/StreamisLogAppenderConfig.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/StreamisLogAppenderConfig.java index f874c8d8b..3f63faf03 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/StreamisLogAppenderConfig.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/config/StreamisLogAppenderConfig.java @@ -122,6 +122,31 @@ public StreamisLogAppenderConfig.Builder setRpcMaxDelayTimeInSec(int maxDelayTim return this; } + /** + * Rpc heartbeat enable + * @param heartbeatEnable + * @return + */ + public StreamisLogAppenderConfig.Builder setRpcHeartbeatEnable(boolean heartbeatEnable) { + this.rpcLogSenderConfig.setHeartbeatEnable(heartbeatEnable); + return this; + } + + /** + * + * @param heartbeatAddress + * @return + */ + public StreamisLogAppenderConfig.Builder setRpcHeartbeatAddress(String heartbeatAddress){ + this.rpcLogSenderConfig.setHeartbeatAddress(heartbeatAddress); + return this; + } + + public StreamisLogAppenderConfig.Builder setRpcHeartbeatInterval(int heartbeatInterval){ + this.rpcLogSenderConfig.setHeartbeatInterval(heartbeatInterval); + return this; + } + /** * Rpc auth token code key * @param tokenCodeKey key of token code diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/AbstractRpcLogSender.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/AbstractRpcLogSender.java index deced7918..9814b86b8 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/AbstractRpcLogSender.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/AbstractRpcLogSender.java @@ -339,6 +339,9 @@ public void cacheLog(T logElement) throws InterruptedException { cacheWaitTime.addAndGet(System.currentTimeMillis() - ws); } enqueue(logElement); + if (rpcSenderConfig.isDebugMode()) { + System.out.println("cache log at time: " + logElement.getLogTimeStamp()); + } }finally{ lock.unlock(); } @@ -395,6 +398,9 @@ public T takeLog(long timeout, TimeUnit unit) throws InterruptedException { } element = dequeue(); process.incrementAndGet(); + if (rpcSenderConfig.isDebugMode()) { + System.out.println("cache log at time: " + element.getLogTimeStamp()); + } } finally { lock.unlock(); } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/RpcHeartbeatService.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/RpcHeartbeatService.java new file mode 100644 index 000000000..1da5b2d2f --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/RpcHeartbeatService.java @@ -0,0 +1,176 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.collector.sender; + +import com.webank.wedatasphere.streamis.jobmanager.log.collector.config.RpcAuthConfig; +import com.webank.wedatasphere.streamis.jobmanager.log.collector.config.StreamisLogAppenderConfig; +import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisHeartbeat; +import org.apache.http.Header; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; +import java.util.Base64; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; + +public class RpcHeartbeatService { + + protected StreamisLogAppenderConfig logAppenderConfig; + + private CloseableHttpClient httpClient = HttpClients.createDefault(); + + public RpcHeartbeatService(StreamisLogAppenderConfig logAppenderConfig) { + this.logAppenderConfig = logAppenderConfig; + } + + private ScheduledExecutorService scheduler; + + private ThreadFactory threadFactory(String threadName, Boolean isDaemon) { + return new ThreadFactory() { + AtomicInteger num = new AtomicInteger(0); + + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r); + t.setDaemon(isDaemon); + t.setName(threadName + num.incrementAndGet()); + return t; + } + }; + } + + public void startHeartbeat() { + if (!logAppenderConfig.getSenderConfig().isHeartbeatEnable()) { + System.out.println("heartbeatEnable is false, will skip to register and heartBeat."); + return; + } + System.out.println("Start to heart register."); + ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1, threadFactory("Streamis-Log-Default-Scheduler-Thread-", true)); + scheduler.setMaximumPoolSize(1); + scheduler.setKeepAliveTime(30, TimeUnit.MINUTES); + this.scheduler = scheduler; + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + try { + httpClient.close(); + } catch (IOException e) { + // Ignore + } + })); + + String applicationName = logAppenderConfig.getApplicationName(); + String originalString = "streamisRegister"; + String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes()); + StreamisHeartbeat streamisHeartbeat = new StreamisHeartbeat(); + streamisHeartbeat.setApplicationName(applicationName); + streamisHeartbeat.setPasswordOrHeartbeat(encodedString); + streamisHeartbeat.setSign("register"); + String registerData = streamisHeartbeat.toJson(); + if (logAppenderConfig.getSenderConfig().isDebugMode()) { + System.out.println(registerData); + } + try { + StringEntity params = new StringEntity(registerData, "UTF-8"); + params.setContentType(ContentType.APPLICATION_JSON.toString()); + httpPostWithRetry(params); + } catch (Exception e) { + System.err.println("flink 应用请求注册streamis失败,即将退出。appName:" + applicationName + ". reason: " + e.getMessage()); + System.exit(200); + } + int interval = logAppenderConfig.getSenderConfig().getHeartbeatInterval(); + streamisHeartbeat.setPasswordOrHeartbeat("heartbeatData"); + streamisHeartbeat.setSign("heartbeat"); + String heartbeatData = streamisHeartbeat.toJson(); + scheduler.scheduleAtFixedRate(() -> { + try { + StringEntity params = new StringEntity(heartbeatData, "UTF-8"); + params.setContentType(ContentType.APPLICATION_JSON.toString()); + httpPostWithRetry(params); + } catch (Exception e) { + System.err.println("flink 应用请求心跳失败,appName:" + applicationName); + } + }, 1L * 10 * 1000, interval, TimeUnit.MILLISECONDS); + System.out.println("End to heart beat."); + } + + private void httpPostWithRetry(StringEntity params) throws Exception { + int retryCount = 0; + while (retryCount < 3) { + try { + httpPost(params); + return; // 如果执行成功则直接返回 + } catch (Exception e) { + System.err.println("send request : " + params.toString() + " failed. Because : " + e.getMessage()); + e.printStackTrace(); + retryCount++; + if (retryCount < 3) { + System.err.println("httpPost请求失败,重试第 " + retryCount + " 次"); + try { + Thread.sleep(5000); // 间隔5秒后重试 + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } else { + throw e; + } + } + } + throw new RuntimeException("httpPost请求重试次数达到上限,请求失败"); + } + + private void httpPost(StringEntity params) throws IOException { + boolean isDebug = logAppenderConfig.getSenderConfig().isDebugMode(); + if (isDebug) { + System.out.println("start method httpPost, params : " + params.toString()); + } + String address = logAppenderConfig.getSenderConfig().getHeartbeatAddress(); + RpcAuthConfig authConfig = logAppenderConfig.getSenderConfig().getAuthConfig(); + HttpPost httpPost = new HttpPost(address); + httpPost.setEntity(params); + httpPost.setHeader(authConfig.getTokenUserKey(), authConfig.getTokenUser()); + String tokenValue = logAppenderConfig.getSenderConfig().getAuthConfig().getTokenCode(); + if (null != tokenValue && !tokenValue.trim().equals("")){ + httpPost.setHeader(logAppenderConfig.getSenderConfig().getAuthConfig().getTokenCodeKey(), tokenValue); + } + CloseableHttpResponse response = null; + try { + if (isDebug) { + System.out.println("Start to send request. headers : "); + Header[] headers = httpPost.getAllHeaders(); + for (int i = 0; i < headers.length; i++) { + System.out.println(headers[i].getName() + "=" + headers[i].getValue()); + } + } + response = httpClient.execute(httpPost); + int status = response.getStatusLine().getStatusCode(); + if (isDebug) { + System.out.println("End to send request, status : " + status); + } + if (status >= 200 && status < 300) { + // 发送心跳成功 + String responseBody = EntityUtils.toString(response.getEntity()); + // 处理响应体 + if (isDebug) { + System.out.println("responseBody: \n" + responseBody); + } + } else { + System.err.println("Failed to request, status : " + status); + throw new RuntimeException("failed to send request : " + params.toString() + ". status is " + status); + } + } finally { + try { + if (response != null) { + response.close(); + } + } catch (IOException e) { + System.err.println("Failed to close I/O"); + } + } + } + +} + + diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/SendLogCacheConsumer.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/SendLogCacheConsumer.java index 9d68f408e..e7f4e0132 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/SendLogCacheConsumer.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector-core/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/sender/SendLogCacheConsumer.java @@ -46,6 +46,7 @@ protected SendLogCacheConsumer(String id, SendLogCache cache, long expireTimeInSec = rpcSenderConfig.getBufferConfig().getExpireTimeInSec(); this.bufferExpireTimeInMills = expireTimeInSec > 0 ? TimeUnit.SECONDS .toMillis(expireTimeInSec) : -1; + System.out.println("SendLogCacheConsumer with id : " + id + " started."); } @@ -85,6 +86,7 @@ public void run() { } } catch (Exception e){ if (this.isTerminated && e instanceof InterruptedException){ + System.out.println("SendLogCacheConsumer[" + Thread.currentThread().getName() + "] with id : " + id + " isTerminated or Interrupted."); return; } else { e.printStackTrace(); diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/pom.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/pom.xml index 3ab465c14..b32d95c66 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/pom.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/StreamisRpcLogAppender.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/StreamisRpcLogAppender.java index 841d055a8..32048be9f 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/StreamisRpcLogAppender.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/StreamisRpcLogAppender.java @@ -5,6 +5,7 @@ import com.webank.wedatasphere.streamis.jobmanager.log.collector.config.StreamisLogAppenderConfig; import com.webank.wedatasphere.streamis.jobmanager.log.collector.log4j2.StreamisLog4j2AppenderConfig; import com.webank.wedatasphere.streamis.jobmanager.log.collector.message.filters.LogMessageFilter; +import com.webank.wedatasphere.streamis.jobmanager.log.collector.sender.RpcHeartbeatService; import com.webank.wedatasphere.streamis.jobmanager.log.collector.sender.StreamisRpcLogSender; import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisLogEvent; import com.webank.wedatasphere.streamis.jobmanager.plugin.StreamisConfigAutowired; @@ -77,14 +78,20 @@ protected StreamisRpcLogAppender(String name, Filter filter, @Override public void append(LogEvent event) { - String content = Arrays.toString(getLayout().toByteArray(event)); + String content = new String(getLayout().toByteArray(event)); if (messageFilterFunction.test(event.getLoggerName(), content)) { StreamisLogEvent logEvent = new StreamisLogEvent(content, event.getTimeMillis()); try { + if (appenderConfig.getSenderConfig().isDebugMode()) { + System.out.println("debug: start to cache log at time : " + logEvent.getLogTimeStamp()); + } this.logCache.cacheLog(logEvent); } catch (InterruptedException e) { LOGGER.error("StreamisRpcLogAppender: {} interrupted when cache the log into the RPC sender, message: {}", this.getName(), e.getMessage()); - + } + } else { + if (appenderConfig.getSenderConfig().isDebugMode()) { + System.out.println("debug: event didn't pass messageFilterFunction, will ignore. content:\n" + content); } } } @@ -119,6 +126,7 @@ public static StreamisRpcLogAppender createAppender(@PluginAttribute("name") Str throw new IllegalArgumentException("Application name cannot be empty"); } System.out.println("StreamisRpcLogAppender: init with config => " + logAppenderConfig); + new RpcHeartbeatService(logAppenderConfig).startHeartbeat(); return new StreamisRpcLogAppender(name, logAppenderConfig.getFilter(), layout, ignoreExceptions, Property.EMPTY_ARRAY, logAppenderConfig); } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/config/RpcLogSenderConfig.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/config/RpcLogSenderConfig.java index f9dff1d10..0ba4a58d6 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/config/RpcLogSenderConfig.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/config/RpcLogSenderConfig.java @@ -17,8 +17,8 @@ public class RpcLogSenderConfig extends com.webank.wedatasphere.streamis.jobmanager.log.collector.config.RpcLogSenderConfig { public RpcLogSenderConfig(String address, int sendRetryCnt, int connectionTimeout, int socketTimeout, int serverRecoveryTimeInSec, int maxDelayTimeInSec, - RpcAuthConfig authConfig, SendLogCacheConfig cacheConfig, SendBufferConfig bufferConfig) { - super(address, sendRetryCnt, connectionTimeout, socketTimeout, serverRecoveryTimeInSec, maxDelayTimeInSec, authConfig, cacheConfig, bufferConfig); + RpcAuthConfig authConfig, SendLogCacheConfig cacheConfig, SendBufferConfig bufferConfig, String heartbeatAddress, int heartbeatInterval) { + super(address, sendRetryCnt, connectionTimeout, socketTimeout, serverRecoveryTimeInSec, maxDelayTimeInSec, authConfig, cacheConfig, bufferConfig, heartbeatAddress, heartbeatInterval); } @PluginFactory @@ -27,13 +27,17 @@ public static RpcLogSenderConfig createConfig( @PluginAttribute("connectionTimeout") String connectionTimeout, @PluginAttribute("socketTimeout") String socketTimeout, @PluginAttribute("serverRecoveryTimeInSec") String serverRecoveryTimeInSec, @PluginAttribute("maxDelayTimeInSec") String maxDelayTimeInSec, @PluginAttribute("debugMode")String debugMode, + @PluginAttribute("heartbeatEnable")String heartbeatEnable, + @PluginAttribute("heartbeatAddress")String heartbeatAddress, + @PluginAttribute("heartbeatInterval")String heartbeatInterval, @PluginElement("AuthConfig")RpcAuthConfig authConfig, @PluginElement("SendLogCache") SendLogCacheConfig cacheConfig, @PluginElement("SendBuffer")SendBufferConfig bufferConfig){ RpcLogSenderConfig config = new RpcLogSenderConfig(address, Integers.parseInt(sendRetryCnt, 3), Integers.parseInt(connectionTimeout, 3000), Integers.parseInt(socketTimeout, 15000), Integers.parseInt(serverRecoveryTimeInSec, 5), Integers.parseInt(maxDelayTimeInSec, 60), - authConfig, cacheConfig, bufferConfig); + authConfig, cacheConfig, bufferConfig, heartbeatAddress, Integers.parseInt(heartbeatInterval, 30 * 60 * 1000)); config.setDebugMode(Boolean.parseBoolean(debugMode)); + config.setHeartbeatEnable(Boolean.parseBoolean(heartbeatEnable)); return config; } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/filters/KeywordThresholdFilter.java b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/filters/KeywordThresholdFilter.java index ea51fd67a..59a2a3da9 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/filters/KeywordThresholdFilter.java +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/collector/log4j2/filters/KeywordThresholdFilter.java @@ -10,7 +10,6 @@ import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.filter.AbstractFilter; import org.apache.logging.log4j.message.Message; -import org.slf4j.LoggerFactory; import java.util.Optional; @@ -19,7 +18,6 @@ */ public class KeywordThresholdFilter extends AbstractFilter implements LogMessageFilterAdapter { - private static final org.slf4j.Logger logger = LoggerFactory.getLogger(KeywordThresholdFilter.class); /** * Level */ @@ -35,7 +33,7 @@ public KeywordThresholdFilter(String[] acceptKeywords, String[] excludeKeywords) // If accept keywords is empty, set the log level to warn if (null == acceptKeywords || acceptKeywords.length <= 0){ this.level = Level.WARN; - logger.info("The keywords is empty, set the log threshold level >= " + this.level); + System.out.println("The keywords is empty, set the log threshold level >= " + this.level); } else { this.level = Level.ALL; } diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/test/resources/log4j2.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/test/resources/log4j2.xml index 27aff1d6d..ee730140d 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/test/resources/log4j2.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector/src/test/resources/log4j2.xml @@ -26,7 +26,7 @@ - ` + diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector1x/pom.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector1x/pom.xml index ae0b2fda7..8ba5bd1c5 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector1x/pom.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/streamis-job-log-collector1x/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/job-log-collector/xspark-streamis-log-collector/pom.xml b/streamis-jobmanager/streamis-job-log/job-log-collector/xspark-streamis-log-collector/pom.xml index 1c13a8eb7..267fe1f84 100644 --- a/streamis-jobmanager/streamis-job-log/job-log-collector/xspark-streamis-log-collector/pom.xml +++ b/streamis-jobmanager/streamis-job-log/job-log-collector/xspark-streamis-log-collector/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/pom.xml b/streamis-jobmanager/streamis-job-log/pom.xml index 67d2098a4..2914e6c52 100644 --- a/streamis-jobmanager/streamis-job-log/pom.xml +++ b/streamis-jobmanager/streamis-job-log/pom.xml @@ -5,7 +5,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-common/pom.xml b/streamis-jobmanager/streamis-job-log/streamis-job-log-common/pom.xml index 63948d607..9d2cddb2a 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-common/pom.xml +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-common/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../pom.xml 4.0.0 diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-common/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/entities/StreamisHeartbeat.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-common/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/entities/StreamisHeartbeat.java new file mode 100644 index 000000000..4b60b709e --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-common/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/entities/StreamisHeartbeat.java @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.entities; + +public class StreamisHeartbeat { + + private String applicationName; + + private String passwordOrHeartbeat; + + private String sign; + + public String toJson() { + return "{" + + "\"applicationName\":" + "\"" + applicationName + "\"" + + ",\"passwordOrHeartbeat\":" + "\"" + passwordOrHeartbeat + "\"" + + ",\"sign\":" + "\"" + sign + "\"" + + "}"; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public StreamisHeartbeat() { + } + + public StreamisHeartbeat(String applicationName, String passwordOrHeartbeat, String sign) { + this.applicationName = applicationName; + this.passwordOrHeartbeat = passwordOrHeartbeat; + this.sign = sign; + } + + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + public String getPasswordOrHeartbeat() { + return passwordOrHeartbeat; + } + + public void setPasswordOrHeartbeat(String passwordOrHeartbeat) { + this.passwordOrHeartbeat = passwordOrHeartbeat; + } +} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/pom.xml b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/pom.xml index 0c485c5a8..7955add92 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/pom.xml +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/pom.xml @@ -5,7 +5,7 @@ streamis-job-log com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../pom.xml 4.0.0 @@ -21,7 +21,7 @@ com.webank.wedatasphere.streamis streamis-job-log-common - 0.3.0 + 0.3.1 org.apache.linkis @@ -33,5 +33,11 @@ ${junit.version} test + + com.webank.wedatasphere.streamis + streamis-job-manager-base + 0.3.1 + compile + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/StreamisJobLogAutoConfiguration.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/StreamisJobLogAutoConfiguration.java index f3f32e363..564c88e7a 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/StreamisJobLogAutoConfiguration.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/StreamisJobLogAutoConfiguration.java @@ -1,17 +1,27 @@ package com.webank.wedatasphere.streamis.jobmanager.log.server; +import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.JobLogStorage; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.StreamisJobLogStorage; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.StorageThresholdDriftPolicy; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.loadbalancer.RoundRobinLoadBalancer; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.loadbalancer.SimpleLoadBalancer; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import javax.annotation.Resource; + @Configuration public class StreamisJobLogAutoConfiguration { + @Resource + private StreamJobConfMapper streamJobConfMapper; + + @Resource + private StreamJobMapper streamJobMapper; + @Bean(initMethod = "init", destroyMethod = "destroy") @ConditionalOnMissingBean(JobLogStorage.class) public JobLogStorage streamisJobLogStorage(){ @@ -19,6 +29,8 @@ public JobLogStorage streamisJobLogStorage(){ jobLogStorage.addLoadBalancer(new RoundRobinLoadBalancer()); jobLogStorage.addLoadBalancer(new SimpleLoadBalancer()); jobLogStorage.setBucketDriftPolicy(new StorageThresholdDriftPolicy()); + jobLogStorage.setStreamJobConfMapper(streamJobConfMapper); + jobLogStorage.setStreamJobMapper(streamJobMapper); return jobLogStorage; } } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/restful/JobLogRestfulApi.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/restful/JobLogRestfulApi.java index f60d5b12f..4e553c2b8 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/restful/JobLogRestfulApi.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/restful/JobLogRestfulApi.java @@ -1,9 +1,16 @@ package com.webank.wedatasphere.streamis.jobmanager.log.server.restful; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisHeartbeat; import com.webank.wedatasphere.streamis.jobmanager.log.server.config.StreamJobLogConfig; import com.webank.wedatasphere.streamis.jobmanager.log.server.entities.StreamisLogEvents; import com.webank.wedatasphere.streamis.jobmanager.log.server.exception.StreamJobLogException; import com.webank.wedatasphere.streamis.jobmanager.log.server.service.StreamisJobLogService; +import com.webank.wedatasphere.streamis.jobmanager.log.server.service.StreamisRegisterService; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.utils.RegularUtils; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamRegister; import org.apache.commons.lang.StringUtils; import org.apache.linkis.server.Message; import org.apache.linkis.server.security.SecurityFilter; @@ -16,15 +23,21 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.*; @RestController @RequestMapping(path = "/streamis/streamJobManager/log") public class JobLogRestfulApi { - private static final Logger LOG = LoggerFactory.getLogger(JobLogRestfulApi.class); + private static final Logger logger = LoggerFactory.getLogger(JobLogRestfulApi.class); @Resource private StreamisJobLogService streamisJobLogService; + @Resource + private StreamisRegisterService streamisRegisterService; + + private Object REGISTER_LOCK = new Object(); + @RequestMapping(value = "/collect/events", method = RequestMethod.POST) public Message collectEvents(@RequestBody StreamisLogEvents events, HttpServletRequest request){ Message result; @@ -32,27 +45,21 @@ public Message collectEvents(@RequestBody StreamisLogEvents events, HttpServletR if (StringUtils.isBlank(events.getAppName())){ return Message.ok("Ignore the stream log events without application name"); } - String userName; - if (StreamJobLogConfig.NO_AUTH_REST.getValue()){ - userName = request.getHeader("Token-User"); - if (StringUtils.isBlank(userName)){ - try { - userName = SecurityFilter.getLoginUsername(request); - }catch(Exception e){ - LOG.error("获取登录用户失败. {}", e.getMessage(), e); - } - if (StringUtils.isBlank(userName)){ - LOG.error("获取登录用户失败, 使用默认用户: hadoop"); - userName = "hadoop"; - } - } - }else { - userName = SecurityFilter.getLoginUsername(request); - if (StringUtils.isBlank(userName)) { - throw new StreamJobLogException(-1, "The request should has token user"); - } + String userName = checkPermissions(request); + + String xForwardedForHeader = request.getHeader("X-Forwarded-For"); + if (xForwardedForHeader == null || xForwardedForHeader.isEmpty() || "unknown".equalsIgnoreCase(xForwardedForHeader)) { + xForwardedForHeader = request.getRemoteAddr(); } - this.streamisJobLogService.store(userName, events); + String eventIp = xForwardedForHeader.split(",")[0].trim(); + Arrays.stream(events.getEvents()) + .forEach(event -> event.setContent("ip: " +eventIp+" "+event.getContent())); + String appName = events.getAppName(); + String[] arr = RegularUtils.split(appName); + String projectName = arr[0]; + String jobName = arr[1]; + String productName = streamisJobLogService.getProductName(projectName, jobName,JobConf.PRODUCT_NAME_KEY().getHotValue()); + this.streamisJobLogService.store(userName, events,productName); result = Message.ok(); }catch (Exception e){ String message = "Fail to collect stream log events, message: " + e.getMessage(); @@ -61,4 +68,74 @@ public Message collectEvents(@RequestBody StreamisLogEvents events, HttpServletR return result; } + @RequestMapping(value = "/heartbeat", method = RequestMethod.POST) + public Message logHeartbeat(@RequestBody StreamisHeartbeat streamisHeartbeat, HttpServletRequest request) throws StreamJobLogException { + String applicationName = streamisHeartbeat.getApplicationName(); + if (StringUtils.isBlank(applicationName)){ + return Message.ok("Ignore the stream log heartbeat OR register without application name"); + } + String userName = checkPermissions(request); + if (streamisHeartbeat.getSign().equals("register")){ + String password =streamisHeartbeat.getPasswordOrHeartbeat(); + byte[] decodedBytes = Base64.getDecoder().decode(password); + String decodedString = new String(decodedBytes); + if (decodedString.equals("streamisRegister")){ + StreamRegister streamRegister = new StreamRegister(); + streamRegister.setApplicationName(applicationName); + streamRegister.setPassword(password); + streamRegister.setRegisterTime(new Date()); + streamRegister.setHeartbeatTime(new Date()); + StreamJob job = streamisRegisterService.getJobByApplicationName(applicationName); + if (null == job) { + logger.error("Cannot find job with applicationName : " + applicationName); + } else { + streamRegister.setJobId(job.getId()); + } + synchronized (REGISTER_LOCK) { + StreamRegister info = streamisRegisterService.getInfoByApplicationName(applicationName); + if (info != null) { + streamisRegisterService.deleteRegister(applicationName); + } + streamisRegisterService.addStreamRegister(streamRegister); + } + return Message.ok(); + } else { + return Message.error(applicationName + "Password error"); + } + } else if (streamisHeartbeat.getSign().equals("heartbeat")){ + StreamRegister streamRegister = new StreamRegister(); + streamRegister.setApplicationName(applicationName); + streamRegister.setHeartbeatTime(new Date()); + streamisRegisterService.updateHeartbeatTime(streamRegister); + return Message.ok(); + } else { + return Message.error("Unknown heartbeat type :" + streamisHeartbeat.getSign()); + } + } + + private String checkPermissions(HttpServletRequest request) throws StreamJobLogException { + String userName; + if (StreamJobLogConfig.NO_AUTH_REST.getValue()){ + userName = request.getHeader("Token-User"); + if (StringUtils.isBlank(userName)){ + try { + userName = SecurityFilter.getLoginUsername(request); + }catch(Exception e){ + logger.error("获取登录用户失败. {}", e.getMessage(), e); + } + if (StringUtils.isBlank(userName)){ + logger.error("获取登录用户失败, 使用默认用户: hadoop"); + userName = "hadoop"; + } + } + }else { + userName = SecurityFilter.getLoginUsername(request); + logger.error("request {} has no token user.", request.getRequestURI()); + if (StringUtils.isBlank(userName)) { + throw new StreamJobLogException(-1, "The request should has token user"); + } + } + return userName; + } + } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/DefaultStreamisJobLogService.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/DefaultStreamisJobLogService.java deleted file mode 100644 index 8fea4dab6..000000000 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/DefaultStreamisJobLogService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.webank.wedatasphere.streamis.jobmanager.log.server.service; - -import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisLogEvents; -import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.JobLogStorage; -import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucket; -import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucketConfig; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; - -/** - * Default implement - */ -@Service -public class DefaultStreamisJobLogService implements StreamisJobLogService{ - - @Resource - private JobLogStorage jobLogStorage; - - private JobLogBucketConfig jobLogBucketConfig; - - @PostConstruct - public void init(){ - jobLogBucketConfig = new JobLogBucketConfig(); - } - @Override - public void store(String user, StreamisLogEvents events) { - JobLogBucket jobLogBucket = jobLogStorage.getOrCreateBucket(user, events.getAppName(), jobLogBucketConfig); - // If cannot get log bucket, drop the events - if (null != jobLogBucket){ - jobLogBucket.getBucketStorageWriter().write(events); - } - } -} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisJobLogService.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisJobLogService.java index e8f8bfe4e..0f36e5d4e 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisJobLogService.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisJobLogService.java @@ -1,6 +1,7 @@ package com.webank.wedatasphere.streamis.jobmanager.log.server.service; import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisLogEvents; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; /** * Job log service @@ -12,5 +13,7 @@ public interface StreamisJobLogService { * @param user user own * @param events events */ - void store(String user, StreamisLogEvents events); + void store(String user, StreamisLogEvents events,String productName); + + String getProductName(String projectName,String jobName,String value); } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisRegisterService.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisRegisterService.java new file mode 100644 index 000000000..b0cb5e9e4 --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/StreamisRegisterService.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.server.service; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamRegister; + +public interface StreamisRegisterService { + + void addStreamRegister(StreamRegister streamRegister); + + void updateHeartbeatTime(StreamRegister streamRegister); + + void updateRegisterTime(StreamRegister streamRegister); + + StreamRegister getInfoByApplicationName(String applicationName); + + StreamJob getJobByApplicationName(String applicationName); + + void deleteRegister(String applicationName); +} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/DefaultStreamisJobLogService.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/DefaultStreamisJobLogService.java new file mode 100644 index 000000000..5d62ec5c6 --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/DefaultStreamisJobLogService.java @@ -0,0 +1,61 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.server.service.impl; + +import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisLogEvents; +import com.webank.wedatasphere.streamis.jobmanager.log.server.service.StreamisJobLogService; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.JobLogStorage; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucket; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucketConfig; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import org.apache.commons.lang.StringUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Default implement + */ +@Service +public class DefaultStreamisJobLogService implements StreamisJobLogService { + + @Resource + private JobLogStorage jobLogStorage; + + private JobLogBucketConfig jobLogBucketConfig; + + private Map productNameCache = new ConcurrentHashMap<>(); + + @PostConstruct + public void init(){ + jobLogBucketConfig = new JobLogBucketConfig(); + productNameCache = new ConcurrentHashMap<>(); + } + @Override + public void store(String user, StreamisLogEvents events,String productName) { + JobLogBucket jobLogBucket = jobLogStorage.getOrCreateBucket(user, events.getAppName(), jobLogBucketConfig,productName); + // If cannot get log bucket, drop the events + if (null != jobLogBucket){ + jobLogBucket.getBucketStorageWriter().write(events); + } + } + @Override + public String getProductName(String projectName,String jobName,String value) { + StreamJob job = jobLogStorage.getStreamJobMapper().getCurrentJob(projectName, jobName); + if (job == null){ + return null; + } + Long jobId = job.getId(); + if (productNameCache.containsKey(jobId)){ + return productNameCache.get(jobId); + }else{ + String productName = jobLogStorage.getStreamJobConfMapper().getRawConfValue(jobId,value); + if(StringUtils.isBlank(productName)){ + return null; + } + productNameCache.put(jobId,productName); + return productName; + } + } +} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/StreamisRegisterServiceImpl.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/StreamisRegisterServiceImpl.java new file mode 100644 index 000000000..b9a0204ff --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/service/impl/StreamisRegisterServiceImpl.java @@ -0,0 +1,52 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.server.service.impl; + +import com.webank.wedatasphere.streamis.jobmanager.log.entities.StreamisHeartbeat; +import com.webank.wedatasphere.streamis.jobmanager.log.server.service.StreamisRegisterService; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamRegisterMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamRegister; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class StreamisRegisterServiceImpl implements StreamisRegisterService { + + @Autowired + private StreamRegisterMapper streamRegisterMapper; + + @Autowired + private StreamJobMapper streamJobMapper; + + public void addStreamRegister(StreamRegister streamRegister) { + streamRegisterMapper.insert(streamRegister); + } + + @Override + public void updateHeartbeatTime(StreamRegister streamRegister) { + streamRegisterMapper.updateHeartbeatTime(streamRegister); + } + + @Override + public void updateRegisterTime(StreamRegister streamRegister) { + streamRegisterMapper.updateRegisterTime(streamRegister); + } + + @Override + public StreamRegister getInfoByApplicationName(String applicationName) { + return streamRegisterMapper.getInfoByApplicationName(applicationName); + } + + @Override + public StreamJob getJobByApplicationName(String applicationName) { + return streamJobMapper.getJobByProjectAndJobName(applicationName); + } + + @Override + public void deleteRegister(String applicationName) { + streamRegisterMapper.delete(applicationName); + } + +} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/JobLogStorage.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/JobLogStorage.java index 7dad9924d..163283ed9 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/JobLogStorage.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/JobLogStorage.java @@ -1,11 +1,13 @@ package com.webank.wedatasphere.streamis.jobmanager.log.server.storage; +import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper; import com.webank.wedatasphere.streamis.jobmanager.log.server.exception.StreamJobLogException; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucket; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucketConfig; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucketDriftPolicy; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.context.JobLogStorageContextListener; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.loadbalancer.JobLogStorageLoadBalancer; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; /** * Storage of job log @@ -19,7 +21,7 @@ public interface JobLogStorage { * @param bucketConfig bucket config * @return config */ - JobLogBucket getOrCreateBucket(String userName, String appName, JobLogBucketConfig bucketConfig); + JobLogBucket getOrCreateBucket(String userName, String appName, JobLogBucketConfig bucketConfig,String productName); /** * Set bucket drift policy @@ -47,4 +49,13 @@ public interface JobLogStorage { * Destroy method */ void destroy(); + + void setStreamJobConfMapper(StreamJobConfMapper streamJobConfMapper); + + StreamJobConfMapper getStreamJobConfMapper(); + + void setStreamJobMapper(StreamJobMapper streamJobMapper);; + + StreamJobMapper getStreamJobMapper(); + } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/StreamisJobLogStorage.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/StreamisJobLogStorage.java index 9ac620d5d..9de48798c 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/StreamisJobLogStorage.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/StreamisJobLogStorage.java @@ -1,5 +1,6 @@ package com.webank.wedatasphere.streamis.jobmanager.log.server.storage; +import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper; import com.webank.wedatasphere.streamis.jobmanager.log.server.config.StreamJobLogConfig; import com.webank.wedatasphere.streamis.jobmanager.log.server.exception.StreamJobLogException; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.bucket.JobLogBucket; @@ -9,6 +10,8 @@ import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.context.*; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.loadbalancer.JobLogStorageLoadBalancer; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.utils.MemUtils; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.utils.RegularUtils; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; import org.apache.commons.lang.StringUtils; import org.apache.linkis.common.utils.Utils; import org.slf4j.Logger; @@ -68,9 +71,12 @@ public class StreamisJobLogStorage implements JobLogStorage{ */ private Future monitorThread; + private StreamJobConfMapper streamJobConfMapper; + private StreamJobMapper streamJobMapper; + @Override - public JobLogBucket getOrCreateBucket(String userName, String appName, JobLogBucketConfig bucketConfig) { - String bucketName = toBucketName(userName, appName); + public JobLogBucket getOrCreateBucket(String userName, String appName, JobLogBucketConfig bucketConfig,String productName) { + String bucketName = toBucketName(userName, appName,productName); return buckets.computeIfAbsent(bucketName, name -> { // First to choose context JobLogStorageContext context = chooseStorageContext(bucketName, bucketConfig); @@ -108,6 +114,21 @@ public void setBucketDriftPolicy(JobLogBucketDriftPolicy bucketDriftPolicy) { this.bucketDriftPolicy = bucketDriftPolicy; } + public void setStreamJobConfMapper(StreamJobConfMapper streamJobConfMapper){ + this.streamJobConfMapper = streamJobConfMapper; + } + + public StreamJobConfMapper getStreamJobConfMapper(){ + return this.streamJobConfMapper; + } + + public StreamJobMapper getStreamJobMapper(){ + return this.streamJobMapper; + } + + public void setStreamJobMapper(StreamJobMapper streamJobMapper){ + this.streamJobMapper = streamJobMapper; + } @Override public void addContextListener(JobLogStorageContextListener listener) { this.contextListeners.add(listener); @@ -322,7 +343,12 @@ private void onContextEvent(JobLogStorageContextListener.ContextEvent event){ * @param appName app name * @return bucket name */ - private String toBucketName(String userName, String appName){ - return userName + "." + appName; + private String toBucketName(String userName, String appName,String productName){ + if (StringUtils.isBlank(productName)){ + return userName + "." + appName; + } else { + String[] arrs = RegularUtils.split(appName); + return userName + "." + arrs[0] + "." + productName + "." + arrs[1]; + } } } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/bucket/Log4j2JobLogBucket.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/bucket/Log4j2JobLogBucket.java index 186377e31..13d7d3c15 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/bucket/Log4j2JobLogBucket.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/bucket/Log4j2JobLogBucket.java @@ -2,6 +2,7 @@ import com.webank.wedatasphere.streamis.jobmanager.log.entities.LogElement; import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.context.JobLogStorageContext; +import com.webank.wedatasphere.streamis.jobmanager.log.server.storage.utils.RegularUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.linkis.common.conf.CommonVars; @@ -309,7 +310,7 @@ private RolloverStrategy createRolloverStrategy(Configuration configuration, if (fileHoldDay > 0){ // Create the actions to delete old file builder.withCustomActions(new Action[]{ - DeleteAction.createDeleteAction(new File(fileName).getParent(), false, 2, false, null, + DeleteAction.createDeleteAction(new File(FilenameUtils.normalize(fileName)).getParent(), false, 2, false, null, new PathCondition[]{ IfFileName.createNameCondition(null, ".*"), IfLastModified.createAgeCondition(Duration.parse(fileHoldDay + "d")) @@ -333,6 +334,10 @@ private String resolveFileName(String bucketRootPath, String bucketName){ basePath += "/"; } basePath += fileName.replace(".", "/"); + String[] fileNameArray = RegularUtils.split(fileName); + if (fileNameArray.length > 3){ + fileName = fileNameArray[0] + "." + fileNameArray[1] + "." + fileNameArray[3]; + } return basePath + "/" + fileName.substring(bucketName.indexOf(".") + 1) + ".log"; } diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/utils/RegularUtils.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/utils/RegularUtils.java new file mode 100644 index 000000000..428532114 --- /dev/null +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/log/server/storage/utils/RegularUtils.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.streamis.jobmanager.log.server.storage.utils; + +public class RegularUtils { + + private RegularUtils(){} + + public static String[] split(String str){ + return str.split("\\."); + } +} diff --git a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/test/java/com/webank/wedatasphere/streamis/jobmanager/log/server/JobLogStorageTest.java b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/test/java/com/webank/wedatasphere/streamis/jobmanager/log/server/JobLogStorageTest.java index fb3d600a1..56739618f 100644 --- a/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/test/java/com/webank/wedatasphere/streamis/jobmanager/log/server/JobLogStorageTest.java +++ b/streamis-jobmanager/streamis-job-log/streamis-job-log-server/src/test/java/com/webank/wedatasphere/streamis/jobmanager/log/server/JobLogStorageTest.java @@ -21,6 +21,7 @@ import java.net.URL; import java.util.Objects; +/* public class JobLogStorageTest { private static final Logger logger = LoggerFactory.getLogger(JobLogStorageTest.class); @@ -102,3 +103,4 @@ private JobLogStorage createJobLogStorage(){ return jobLogStorage; } } +*/ diff --git a/streamis-jobmanager/streamis-job-manager/pom.xml b/streamis-jobmanager/streamis-job-manager/pom.xml index 748a289de..5a18425a7 100755 --- a/streamis-jobmanager/streamis-job-manager/pom.xml +++ b/streamis-jobmanager/streamis-job-manager/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/pom.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/pom.xml index 0dc9bf21e..8405fe3c9 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/pom.xml +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 @@ -54,8 +54,9 @@ compile - commons-lang - commons-lang + org.apache.commons + commons-lang3 + ${commons.lang3.version} jakarta.servlet @@ -73,6 +74,10 @@ javax.validation validation-api + + org.apache.linkis + linkis-module + diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/conf/JobManagerConf.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/conf/JobManagerConf.java new file mode 100644 index 000000000..6d2b08643 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/conf/JobManagerConf.java @@ -0,0 +1,93 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.conf; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.utils.JobUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.linkis.common.conf.CommonVars; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class JobManagerConf { + + private static final Logger logger = LoggerFactory.getLogger(JobManagerConf.class); + + private static Map> hookProjectMap = null; + + public static final CommonVars ENABLE_JOB_SHUTDOWN_HOOKS = CommonVars.apply("wds.streamis.job.shutdown.hook.enable", true); + + + /* + eg: wds.streamis.job.shutdown.hooks=hook1=project1,project2;hook2=project1,project2 + */ + public static final CommonVars JOB_SHUTDOWN_HOOKS = CommonVars.apply("wds.streamis.job.shutdown.hooks", ""); + + public static final CommonVars JOB_SHUTDOWN_HOOK_TIMEOUT_MILLS = CommonVars.apply("wds.streamis.job.shutdown.hook.timeout.mills", 5 * 60 * 1000L); + + private static void initHookMap() { + hookProjectMap = new HashMap>(); + String hookConfig = JOB_SHUTDOWN_HOOKS.getValue(); + if (StringUtils.isNotBlank(hookConfig)) { + for (String hooksAndProjects : hookConfig.split(";")) { + if (hooksAndProjects.indexOf("=") > -1) { + String[] hookProjectArr = hooksAndProjects.split("="); + String hookName = hookProjectArr[0]; + List projectList = new ArrayList<>(); + if (hookProjectArr.length == 2) { + String projects = hookProjectArr[1]; + String[] projectArr = projects.split(","); + for (String project : projectArr) { + projectList.add(project); + } + } else { + logger.warn("Invalid hook : {} config {}={}", hookName, JOB_SHUTDOWN_HOOKS.key(), JOB_SHUTDOWN_HOOKS.getValue()); + } + if (hookProjectMap.containsKey(hookName)) { + logger.warn("hook : {} projects : {} will be replaced by {}", hookName, JobUtils.gson().toJson(hookProjectMap.get(hookName)), JobUtils.gson().toJson(projectList)); + } + hookProjectMap.put(hookName, projectList); + } else { + logger.warn("Invalid config {}={}", JOB_SHUTDOWN_HOOKS.key(), JOB_SHUTDOWN_HOOKS.getValue()); + } + } + } + } + + public static List getHookNames() { + List names = new ArrayList<>(); + if (ENABLE_JOB_SHUTDOWN_HOOKS.getValue()) { + if (null == hookProjectMap) { + initHookMap(); + } + } + for (String name : hookProjectMap.keySet()) { + names.add(name); + } + return names; + } + + public static List getHooksByProject(String projectName) { + List hookList = new ArrayList<>(); + if (ENABLE_JOB_SHUTDOWN_HOOKS.getValue() && StringUtils.isNotBlank(projectName)) { + for (Map.Entry> entry : hookProjectMap.entrySet()) { + for (String project : entry.getValue()) { + if (projectName.equalsIgnoreCase(project)) { + hookList.add(entry.getKey()); + } + } + } + } + return hookList; + } + + public static List getProjectByHook(String hookName) { + if (ENABLE_JOB_SHUTDOWN_HOOKS.getValue()) { + return hookProjectMap.getOrDefault(hookName, new ArrayList<>()); + } else { + return new ArrayList<>(); + } + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/constants/JobShutdownHookConstants.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/constants/JobShutdownHookConstants.java new file mode 100644 index 000000000..8c397e8aa --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/constants/JobShutdownHookConstants.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.constants; + +public class JobShutdownHookConstants { + + public static final String START_TIME_MILLS_KEY = "startTimeMills"; + + public static final String STATUS_KEY = "status"; + + public static final String ENGINE_TYPE_KEY = "engineType"; + + public static final String ENGINE_VERSION_KEY = "engineVersion"; + + public static final String APPLICATION_ID_KEY = "applicationId"; + + public static final String APPLICATION_URL_KEY = "applicationUrl"; + + public static final String CLUSTER_NAME_KEY = "clusterName"; + + public static final String IS_MANAGER_KEY = "isManager"; +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobMapper.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobMapper.java index b0d35c32d..18bec9db1 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobMapper.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobMapper.java @@ -26,7 +26,8 @@ public interface StreamJobMapper { List getJobLists(@Param("projectName") String projectName, @Param("userName") String userName, @Param("name") String name, - @Param("status") Integer status, @Param("createBy") String createBy, @Param("label") String label, @Param("manageModeKey") String manageModeKey, @Param("jobNameList") List jobNameList); + @Param("status") Integer status, @Param("createBy") String createBy, @Param("label") String label, @Param("manageModeKey") String manageModeKey, + @Param("jobNameList") List jobNameList, @Param("enable") Boolean enable, @Param("jobType")String jobType); List getJobVersionDetails(@Param("jobId") Long jobId); @@ -34,6 +35,8 @@ List getJobLists(@Param("projectName") String projectName, @Para List getJobByName(@Param("jobName") String jobName); + StreamJob getJobByProjectAndJobName(@Param("applicationName") String applicationName); + List getJobVersions(@Param("jobId") Long jobId); /** @@ -51,6 +54,10 @@ List getJobLists(@Param("projectName") String projectName, @Para void updateJob(StreamJob streamJob); + void updateJobContent(StreamJobVersion streamJobVersion); + + void updateSource(StreamJobVersion streamJobVersion); + List getJobListsByProjectName(String projectName); VersionDetailVo getVersionDetail(@Param("jobId") Long jobId, @Param("version") String version); @@ -74,5 +81,10 @@ List getJobLists(@Param("projectName") String projectName, @Para * @param jobId job id * @return stream job */ - StreamJob queryAndLockJobById(@Param("jobId")Long jobId); + StreamJob queryJobById(@Param("jobId")Long jobId); + + void updateJobEnable(StreamJob streamJob); + + StreamJobVersionFiles getJobFileById(@Param("id") Long jobVersionFileId); + } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobTemplateMapper.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobTemplateMapper.java new file mode 100644 index 000000000..ef3b1c0bc --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamJobTemplateMapper.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.dao; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.JobTemplateFiles; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface StreamJobTemplateMapper { + JobTemplateFiles getJobTemplate(@Param("id")Long id, @Param("enable") Boolean enable); + + void insertJobTemplate(JobTemplateFiles jobTemplateFiles); + + JobTemplateFiles selectJobTemplate(@Param("name")String name, @Param("version")String version, @Param("projectName")String projectName); + + void updateJobTemplateById (JobTemplateFiles jobTemplateFiles); + + String getLatestJobTemplate (@Param("projectName")String projectName,@Param("enable") Boolean enable); + + JobTemplateFiles getLatestJobTemplateFile (@Param("projectName")String projectName,@Param("enable") Boolean enable); + + Long getJobTemplateByProject(@Param("projectName")String projectName); + + + Integer setEnableByVersion(@Param("name")String name, @Param("version")String version,@Param("enable")Boolean enable); + + void deleteTemplateVersions(@Param("name")String name, @Param("projectName")String projectName); + + List selectTemplateId(@Param("name")String name, @Param("projectName")String projectName); + + void setEnable(@Param("templateIds")List templateIds,@Param("enable")Boolean enable); + + +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamRegisterMapper.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamRegisterMapper.java new file mode 100644 index 000000000..7d9d94185 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamRegisterMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.dao; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamRegister; + +import java.util.List; + +public interface StreamRegisterMapper { + + List getInfo (); + + StreamRegister getInfoByApplicationName(String applicationName); + + StreamRegister getInfoByJobId(Long jobId); + + void insert(StreamRegister streamRegister); + + void delete(String applicationName); + + void updateHeartbeatTime(StreamRegister streamRegister); + + void updateRegisterTime(StreamRegister streamRegister); +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamTaskMapper.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamTaskMapper.java index 2eae1e954..c96bf52da 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamTaskMapper.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/StreamTaskMapper.java @@ -34,7 +34,9 @@ public interface StreamTaskMapper { */ int updateTaskInStatus(@Param("task")StreamTask streamTask, @Param("status")Integer status); - List getByJobVersionId(@Param("jobVersionId") Long jobVersionId, @Param("version") String version); + List getByJobVersionId(@Param("jobVersionId") Long jobVersionId, @Param("version") String version, @Param("pageNow") Long pageNow, @Param("pageSize") Long pageSize); + + int countGetByJobVersionId(@Param("jobVersionId") Long jobVersionId, @Param("version") String version); /** * Get latest task by job version id @@ -82,4 +84,5 @@ public interface StreamTaskMapper { */ List getStatusInfoByJobIds(@Param("jobIds")List jobIds); + List getTaskInfoByTemplateId(@Param("templateId")List templateId); } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamAlertMapper.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamAlertMapper.xml index 9dfb1c2d9..6e25ee84f 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamAlertMapper.xml +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamAlertMapper.xml @@ -40,6 +40,7 @@ \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobMapper.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobMapper.xml index e9df41237..00165d966 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobMapper.xml +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobMapper.xml @@ -29,6 +29,7 @@ + @@ -47,6 +48,7 @@ + + + + + + + + + + + + + - `id`,`project_name`, `workspace_name`,`name`,`create_by`, `create_time`,`label`,`description`,`submit_user`,`job_type`, `current_version`, `status` + `id`,`project_name`, `workspace_name`,`name`,`create_by`, `create_time`,`label`,`description`,`submit_user`,`job_type`, `current_version`, `status`, `enable` @@ -95,6 +109,13 @@ linkis_stream_job WHERE name = #{jobName} + + @@ -104,7 +125,7 @@ select *, (SELECT jc.value FROM linkis_stream_job_config jc WHERE jc.job_id = aa.id and jc.key = #{manageModeKey} limit 1) AS manage_mode, (SELECT COUNT(1) FROM linkis_stream_job_version v WHERE v.job_id = aa.id AND v.id > aa.version_id) AS version_forward, (SELECT v.version FROM linkis_stream_job_version v WHERE v.job_id = aa.id ORDER BY v.id DESC LIMIT 1) AS last_version from ( - SELECT j.`id`,j.`project_name`, j.`workspace_name`,j.`name`,j.`create_by`, j.`create_time`,j.`label`,j.`description`, + SELECT j.`id`,j.`project_name`, j.`workspace_name`,j.`name`,j.`create_by`, j.`create_time`,j.`label`,j.`description`,j.`enable`, j.`job_type`, (CASE WHEN t.`status` IS NULL THEN 0 ELSE t.status END) AS status, j.`current_version` AS version, v.id as version_id, v.create_time AS lastVersionTime, t.start_time, lsp.id AS project_id FROM linkis_stream_job j @@ -130,6 +151,12 @@ AND aa.`status`=#{status} + + AND aa.`enable`=#{enable} + + + AND aa.`job_type`=#{jobType} + AND aa.`create_by` = #{createBy} @@ -180,14 +207,14 @@ @@ -198,15 +225,15 @@ linkis_stream_job WHERE project_name = #{projectName} AND `name` = #{jobName} FOR UPDATE; - SELECT FROM linkis_stream_job WHERE id = #{jobId}; - INSERT INTO linkis_stream_job(`project_name`,`name`,`create_by`,`label`,`description`,`job_type`,`submit_user`, `current_version`, `create_time`) - VALUES(#{projectName},#{name},#{createBy},#{label},#{description},#{jobType},#{submitUser},#{currentVersion, jdbcType=VARCHAR},#{createTime}) + INSERT INTO linkis_stream_job(`project_name`,`name`,`create_by`,`label`,`description`,`job_type`,`submit_user`, `current_version`, `create_time`, `enable`) + VALUES(#{projectName},#{name},#{createBy},#{label},#{description},#{jobType},#{submitUser},#{currentVersion, jdbcType=VARCHAR},#{createTime},#{enable}) + - UPDATE linkis_stream_job @@ -242,4 +278,34 @@ WHERE id=#{id} + + UPDATE linkis_stream_job_version + + + job_content=#{jobContent}, + + + WHERE job_id=#{jobId} and version=#{version} + + + + UPDATE linkis_stream_job_version + + + source=#{source}, + + + WHERE job_id=#{jobId} and version=#{version} + + + + UPDATE linkis_stream_job + + + enable=#{enable}, + + + WHERE id=#{id} + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobTemplateMapper.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobTemplateMapper.xml new file mode 100644 index 000000000..6648015a4 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamJobTemplateMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + INSERT INTO linkis_stream_project_job_template + (`name`,`version`,`store_path`,`meta_json`,`project_name`,`date`,`enable`) + VALUES (#{name},#{version},#{storePath},#{metaJson},#{projectName},#{date},#{enable}) + + + + + + update linkis_stream_project_job_template set store_path = #{storePath},date = #{date},name=#{name},project_name=#{projectName},enable=#{enable}, + version = #{version},meta_json = #{metaJson} + where id = #{id} + + + + + + + + + + UPDATE linkis_stream_project_job_template + + + enable=#{enable}, + + + where name = #{name} AND version = #{version} + + + + DELETE FROM linkis_stream_project_job_template WHERE project_name = + #{projectName} AND name = #{name} + ORDER BY version desc LIMIT 1 + + + + + + UPDATE linkis_stream_project_job_template + + + enable=#{enable}, + + + WHERE id in + + #{templateId} + + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamRegisterMapper.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamRegisterMapper.xml new file mode 100644 index 000000000..b1d0988a4 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamRegisterMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + INSERT INTO linkis_stream_register_info(job_id, application_name, password, register_time, heartbeat_time) VALUES(#{jobId}, #{applicationName}, #{password}, #{registerTime},#{heartbeatTime}) + + + + + UPDATE linkis_stream_register_info SET heartbeat_time = #{heartbeatTime} WHERE application_name = #{applicationName} + + + UPDATE linkis_stream_register_info SET register_time = #{registerTime} WHERE application_name = #{applicationName} + + + + DELETE FROM linkis_stream_register_info WHERE application_name = #{applicationName} + + + + + + + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamTaskMapper.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamTaskMapper.xml index c3c39bc06..71009eed8 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamTaskMapper.xml +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/StreamTaskMapper.xml @@ -29,7 +29,11 @@ + + + + @@ -38,15 +42,16 @@ + - `id`,`job_version_id`,`job_id`,`status`,`start_time`,`last_update_time`,`err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info` + `id`,`job_version_id`,`job_id`,`status`,`start_time`,`last_update_time`,`err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info`, `server_instance` - INSERT INTO linkis_stream_task(`job_version_id`,`job_id`,`version`,`status`,`start_time`,`last_update_time`,`err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info`) - VALUES(#{jobVersionId},#{jobId},#{version},#{status},#{startTime},#{lastUpdateTime},#{errDesc},#{submitUser},#{linkisJobId},#{linkisJobInfo}) + INSERT INTO linkis_stream_task(`job_version_id`,`job_id`,`version`,`status`,`start_time`,`last_update_time`,`err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info`,`server_instance`,`job_start_config`,`solution`,`template_id`) + VALUES(#{jobVersionId},#{jobId},#{version},#{status},#{startTime},#{lastUpdateTime},#{errDesc},#{submitUser},#{linkisJobId},#{linkisJobInfo},#{serverInstance},#{jobStartConfig},#{solution},#{templateId}) @@ -67,6 +72,9 @@ err_desc=#{errDesc}, + + solution=#{solution}, + WHERE id=#{id} @@ -89,6 +97,9 @@ err_desc=#{task.errDesc}, + + solution=#{task.solution}, + WHERE id=#{task.id} AND status = #{status}; @@ -96,7 +107,7 @@ + + SELECT `id`,`job_version_id`,`job_id`,`version`, status ,`start_time`,`last_update_time`, - `err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info` + `err_desc`,`submit_user`, `linkis_job_id`, `linkis_job_info`,`solution`,`template_id` FROM linkis_stream_task where `job_id`=#{jobId} ORDER BY start_time DESC, id DESC LIMIT 1 @@ -192,4 +217,15 @@ #{item} GROUP BY job_id) + + + \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/JobTemplateFiles.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/JobTemplateFiles.java new file mode 100644 index 000000000..4089bf1f8 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/JobTemplateFiles.java @@ -0,0 +1,88 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.entity; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamisFile; + +import java.util.Date; + +public class JobTemplateFiles { + + private Long id; + + private String storePath; + + private String name; + + private String metaJson; + + private String version; + + private String projectName; + + private Date date; + + private Boolean enable; + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStorePath() { + return storePath; + } + + public void setStorePath(String storePath) { + this.storePath = storePath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMetaJson() { + return metaJson; + } + + public void setMetaJson(String metaJson) { + this.metaJson = metaJson; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJob.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJob.java index 19505be37..df3d60c26 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJob.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJob.java @@ -29,6 +29,16 @@ public class StreamJob { private String description; private String submitUser; private Date createTime; + private Boolean enable; + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } + /** * Current version tab in used */ diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJobVersionFiles.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJobVersionFiles.java index cd52691a7..7bc8c7e0d 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJobVersionFiles.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamJobVersionFiles.java @@ -40,7 +40,17 @@ public class StreamJobVersionFiles implements StreamisFile { private String storeType = StreamisFile.BML_STORE_TYPE; private Date createTime; private String createBy; + private String source; + private String materialType; + @Override + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } public Long getId() { return id; @@ -118,4 +128,13 @@ public String getCreateBy() { public void setCreateBy(String createBy) { this.createBy = createBy; } + + public String getMaterialType() { + return materialType; + } + + @Override + public void setMaterialType(String materialType) { + this.materialType = materialType; + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamRegister.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamRegister.java new file mode 100644 index 000000000..0c276753d --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamRegister.java @@ -0,0 +1,81 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.entity; + +import java.util.Date; + +public class StreamRegister { + + private Long id; + + private Long jobId; + + private String applicationName; + + private String password; + + private Date registerTime; + + private Date heartbeatTime; + + + public StreamRegister() { + } + + public StreamRegister(Long id, Long jobId, String applicationName, String password, Date registerTime, Date heartbeatTime) { + this.id = id; + this.jobId = jobId; + this.applicationName = applicationName; + this.password = password; + this.registerTime = registerTime; + this.heartbeatTime = heartbeatTime; + } + + + + public Date getHeartbeatTime() { + return heartbeatTime; + } + + public void setHeartbeatTime(Date heartbeatTime) { + this.heartbeatTime = heartbeatTime; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Date getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(Date registerTime) { + this.registerTime = registerTime; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamTask.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamTask.java index 03836157f..2bcd6ed13 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamTask.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamTask.java @@ -15,6 +15,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.entity; + import java.util.Calendar; import java.util.Date; @@ -33,13 +34,29 @@ public class StreamTask { private String version; private Integer status; - public StreamTask(){ + private String serverInstance; + + private String jobStartConfig; + + private String solution; + + private Long templateId; + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public StreamTask() { Calendar calendar = Calendar.getInstance(); this.lastUpdateTime = calendar.getTime(); this.startTime = calendar.getTime(); } - public StreamTask(Long jobId, Long jobVersionId, String version, String submitUser){ + public StreamTask(Long jobId, Long jobVersionId, String version, String submitUser) { this(); this.jobId = jobId; this.jobVersionId = jobVersionId; @@ -142,6 +159,30 @@ public void setJobType(String jobType) { this.jobType = jobType; } + public String getServerInstance() { + return serverInstance; + } + + public void setServerInstance(String serverInstance) { + this.serverInstance = serverInstance; + } + + public String getJobStartConfig() { + return jobStartConfig; + } + + public void setJobStartConfig(String jobStartConfig) { + this.jobStartConfig = jobStartConfig; + } + + public String getSolution() { + return solution; + } + + public void setSolution(String solution) { + this.solution = solution; + } + @Override public String toString() { return "StreamTask{" + @@ -157,6 +198,7 @@ public String toString() { ", errDesc='" + errDesc + '\'' + ", version='" + version + '\'' + ", status=" + status + + ", serverInstance='" + serverInstance + '\'' + '}'; } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamisFile.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamisFile.java index 9f85630ea..3c623c22c 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamisFile.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/StreamisFile.java @@ -32,4 +32,9 @@ public interface StreamisFile { String getCreateBy(); + String getSource(); + + void setMaterialType(String materialType); + + String getMaterialType(); } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobHighAvailableVo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobHighAvailableVo.java new file mode 100644 index 000000000..4e59e6989 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobHighAvailableVo.java @@ -0,0 +1,38 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo; + +import java.util.Locale; + +public class JobHighAvailableVo implements JobInspectVo{ + private boolean highAvailable; + + private String msg; + + public JobHighAvailableVo() { + } + + public JobHighAvailableVo(boolean highAvailable, String msg) { + this.highAvailable = highAvailable; + this.msg = msg; + } + + public boolean isHighAvailable() { + return highAvailable; + } + + public void setHighAvailable(boolean highAvailable) { + this.highAvailable = highAvailable; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + @Override + public String getInspectName() { + return Types.HIGHAVAILABLE.name().toLowerCase(Locale.ROOT); + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobInspectVo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobInspectVo.java index 0998277a5..a26681b7d 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobInspectVo.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/JobInspectVo.java @@ -10,7 +10,7 @@ public interface JobInspectVo { enum Types{ - VERSION, SNAPSHOT, STATUS, LIST + VERSION, SNAPSHOT, STATUS, LIST, HIGHAVAILABLE } @JsonIgnore String getInspectName(); diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/QueryJobListVo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/QueryJobListVo.java index b8326080d..ad47ed89c 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/QueryJobListVo.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/QueryJobListVo.java @@ -30,6 +30,7 @@ public class QueryJobListVo { private Date createTime; private Integer status; private String version; + private Boolean enable; /** * Last version */ @@ -168,4 +169,12 @@ public String getLastVersion() { public void setLastVersion(String lastVersion) { this.lastVersion = lastVersion; } + + public Boolean getEnable() { + return enable; + } + + public void setEnable(Boolean enable) { + this.enable = enable; + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskListVo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskListVo.java index e36daaa03..b7c4ce717 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskListVo.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskListVo.java @@ -30,6 +30,8 @@ public class StreamTaskListVo { private String versionContent; + private String jobStartConfig; + public Long getTaskId() { return taskId; } @@ -117,4 +119,12 @@ public String getVersionContent() { public void setVersionContent(String versionContent) { this.versionContent = versionContent; } + + public String getJobStartConfig() { + return jobStartConfig; + } + + public void setJobStartConfig(String jobStartConfig) { + this.jobStartConfig = jobStartConfig; + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskPageInfo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskPageInfo.java new file mode 100644 index 000000000..3cfce2131 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/StreamTaskPageInfo.java @@ -0,0 +1,26 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo; + +import java.util.List; + +public class StreamTaskPageInfo { + private List streamTaskList; + + private Integer total; + + + public List getStreamTaskList() { + return streamTaskList; + } + + public void setStreamTaskList(List streamTaskList) { + this.streamTaskList = streamTaskList; + } + + public Integer getTotal() { + return total; + } + + public void setTotal(Integer total) { + this.total = total; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/TaskCoreNumVo.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/TaskCoreNumVo.java index 7bb738289..70e3d6032 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/TaskCoreNumVo.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/entity/vo/TaskCoreNumVo.java @@ -15,6 +15,9 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo; +import java.util.ArrayList; +import java.util.List; + /** * job核心指标 */ @@ -35,6 +38,29 @@ public class TaskCoreNumVo { private Integer successNum = 0; //已停止数目 private Integer stoppedNum = 0; + //启动中数目 + private Integer startingNum = 0; + + private List jobShutdownHooks = new ArrayList<>(); + + public Integer getStartingNum() { + return startingNum; + } + + public void setStartingNum(Integer startingNum) { + this.startingNum = startingNum; + } + + public Integer getStoppingNum() { + return stoppingNum; + } + + public void setStoppingNum(Integer stoppingNum) { + this.stoppingNum = stoppingNum; + } + + //停止中数目 + private Integer stoppingNum = 0; public Integer getStoppedNum() { return stoppedNum; @@ -107,4 +133,12 @@ public Long getProjectId() { public void setProjectId(Long projectId) { this.projectId = projectId; } + + public List getJobShutdownHooks() { + return jobShutdownHooks; + } + + public void setJobShutdownHooks(List jobShutdownHooks) { + this.jobShutdownHooks = jobShutdownHooks; + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookExecutionException.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookExecutionException.java new file mode 100644 index 000000000..fcfbe0f31 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookExecutionException.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.exception; + +import org.apache.linkis.common.exception.ErrorException; + +public class HookExecutionException extends ErrorException { + + + public HookExecutionException(String desc) { + super(JobManagerErrorCode.HOOK_EXECUTION_ERROR_CODE, desc); + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookInitException.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookInitException.java new file mode 100644 index 000000000..7a6e57225 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/HookInitException.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.exception; + + +import org.apache.linkis.common.exception.ErrorException; + +public class HookInitException extends ErrorException { + + + public HookInitException(String desc) { + super(JobManagerErrorCode.HOOK_INIT_ERROR_CODE, desc); + } + +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/JobManagerErrorCode.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/JobManagerErrorCode.java new file mode 100644 index 000000000..ae65d6993 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/exception/JobManagerErrorCode.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.exception; + +public class JobManagerErrorCode { + + public static final int HOOK_INIT_ERROR_CODE = 30604; + + public static final int HOOK_EXECUTION_ERROR_CODE = 30605; + +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHook.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHook.java new file mode 100644 index 000000000..b08a3075e --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHook.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.hook; + +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; + +public interface StreamisJobShutdownHook { + + String getName(); + + void doBeforeJobShutdown(String taskId, String projectName, String jobName, long timeoutMills, Map params) throws ExecutionException, TimeoutException, InterruptedException; + + void doAfterJobShutdown(String taskId, String projectName, String jobName, long timeoutMills, Map params) throws ExecutionException, TimeoutException, InterruptedException; + + void cancel() throws ExecutionException, TimeoutException, InterruptedException; +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHookFactory.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHookFactory.java new file mode 100644 index 000000000..5f99402e4 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/hook/StreamisJobShutdownHookFactory.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.hook; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class StreamisJobShutdownHookFactory { + + private static final Logger logger = LoggerFactory.getLogger(StreamisJobShutdownHookFactory.class); + + private static final Map hookMap = new HashMap(); + + public static boolean registerJobShutdownHook(StreamisJobShutdownHook hook) { + if (null == hook) { + return false; + } + StreamisJobShutdownHook oldHook = hookMap.getOrDefault(hook.getName(), null); + if (null != oldHook) { + logger.warn("there are already a hook with name : {} and class : {}, will cover it with new hook name : {} class : {}" + , oldHook.getName(), oldHook.getClass().getName(), hook.getName(), hook.getClass().getName()); + } else { + logger.info("registered a new hook name : {} and class : {}", hook.getName(), hook.getClass().getName()); + } + hookMap.put(hook.getName(), hook); + return true; + } + + public static List getAllHooks() { + List hooks = new ArrayList<>(); + hookMap.values().stream().forEach(hook -> hooks.add(hook)); + return hooks; + } + + public static StreamisJobShutdownHook getHookByName(String hookName) { + if (StringUtils.isNotBlank(hookName)) { + return hookMap.getOrDefault(hookName, null); + } else { + return null; + } + } + +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/IoUtils.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/IoUtils.java index c92e28ffd..26082cbef 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/IoUtils.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/IoUtils.java @@ -15,6 +15,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.util; +import org.apache.commons.io.FilenameUtils; import org.apache.linkis.common.conf.CommonVars; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,6 +25,8 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class IoUtils { @@ -31,12 +34,22 @@ public class IoUtils { private static final String dateFormatDay = "yyyyMMdd"; private static final String dateFormatTime = "HHmmss"; private static final String ioUrl = CommonVars.apply("wds.streamis.zip.dir", "/tmp").getValue(); + private static final String FILE_NAME_REGEX = "^[a-zA-Z0-9._-]+$"; + + private static final Pattern generateExportOutputStreamPattern = Pattern.compile(FILE_NAME_REGEX); + + private static final Pattern validateFileNamePattern = Pattern.compile(FILE_NAME_REGEX); private IoUtils(){} public static String generateIOPath(String userName, String projectName, String subDir) { String baseIOUrl = ioUrl; - String file = subDir.substring(0,subDir.lastIndexOf(".")); + String file; + if (!subDir.contains(".")) { + file =subDir; + } else { + file = subDir.substring(0,subDir.lastIndexOf(".")); + } String dayStr = new SimpleDateFormat(dateFormatDay).format(new Date()); String timeStr = new SimpleDateFormat(dateFormatTime).format(new Date()); return addFileSeparator(baseIOUrl, projectName, dayStr, userName, file + "_" + timeStr, subDir); @@ -47,7 +60,13 @@ private static String addFileSeparator(String... str) { } public static OutputStream generateExportOutputStream(String path) throws IOException { + String fileName = FilenameUtils.getName(path); + fileName = fileName.replace("..", ""); File file = new File(path); + Matcher matcher = generateExportOutputStreamPattern.matcher(fileName); + if (!matcher.matches()) { + file.delete(); + } if (file.exists()) { logger.warn(String.format("%s is exist,delete it", path)); boolean success = file.delete(); @@ -66,4 +85,15 @@ public static OutputStream generateExportOutputStream(String path) throws IOExce public static InputStream generateInputInputStream(String path) throws IOException { return new FileInputStream(path); } + + public static void validateFileName(String fileName) throws IllegalArgumentException { + // 检查文件名是否包含目录名("../")以及是否仅包含字母和数字 + if (fileName.contains("../")) { + throw new IllegalArgumentException("File name cannot contain directory traversal (\"../\")"); + } + Matcher matcher = validateFileNamePattern.matcher(fileName); + if (!matcher.matches()) { + throw new IllegalArgumentException("Invalid characters in file name: " + fileName); + } + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/JsonUtils.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/JsonUtils.java new file mode 100644 index 000000000..8312a31ce --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/JsonUtils.java @@ -0,0 +1,39 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.util; + +import com.google.gson.JsonSyntaxException; +import org.apache.linkis.server.BDPJettyServerHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class JsonUtils { + + private static final Logger LOG = LoggerFactory.getLogger(JsonUtils.class); + public static String manageArgs(String jobContent, List args){ + try { + Map map = BDPJettyServerHelper.gson().fromJson(jobContent, Map.class); + map.put("args",args); + return BDPJettyServerHelper.gson().toJson(map); + } catch (JsonSyntaxException e) { + LOG.error("Failed to source parse JSON"); + } + return null; + } + + public static String manageSource(String getSource,Boolean isHighAvailable , String highAvailableMessage){ + HashMap hashMap = new HashMap<>(); + try { + hashMap = BDPJettyServerHelper.gson().fromJson(getSource, HashMap.class); + hashMap.put("isHighAvailable",isHighAvailable); + hashMap.put("highAvailableMessage",highAvailableMessage); + } catch (JsonSyntaxException e) { + LOG.error("Failed to source parse JSON"); + hashMap.put("isHighAvailable",isHighAvailable); + hashMap.put("highAvailableMessage",highAvailableMessage); + } + return BDPJettyServerHelper.gson().toJson(hashMap); + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ReaderUtils.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ReaderUtils.java index dd295b4df..96248104c 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ReaderUtils.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ReaderUtils.java @@ -18,20 +18,27 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.constants.JobConstants; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.MetaJsonInfo; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.PublishRequestVo; import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileException; import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileExceptionManager; import org.apache.commons.lang.StringUtils; +import org.apache.linkis.server.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ReaderUtils { private static final String metaFileName = "meta.txt"; private static final String metaFileJsonName = "meta.json"; + + private static final String templateMetaFileJsonName = "-meta.json"; private static final String type = "type"; private static final String fileName = "filename"; private static final String projectName = "projectname"; @@ -49,6 +56,9 @@ public class ReaderUtils { private String zipName; private boolean hasTags = false; private boolean hasProjectName = false; + private static final String templateName = "-meta.json"; + private static final String JSON_TYPE = ".json"; + private static final String PRODUCE_PARAM = "wds.linkis.flink.produce"; private static final Logger LOG = LoggerFactory.getLogger(ReaderUtils.class); @@ -68,11 +78,24 @@ public String setName(Object name) { } public boolean checkName(String fileName) { - String name = fileName.substring(0, fileName.lastIndexOf(".")); - if (fileName.endsWith(".jar")) { - return name.matches(jarRegex); + if (!fileName.contains(".")) { + return fileName.matches(regex); + } else { + String name = fileName.substring(0, fileName.lastIndexOf(".")); + if (fileName.endsWith(".jar")) { + return name.matches(jarRegex); + } + return name.matches(regex); } - return name.matches(regex); + } + + public static boolean isValidFileFormat(String fileName) { + String fileFormats = JobConf.STREAMIS_CHECK_FILE_FORMAT().getHotValue(); + String regexPattern = ".*\\.(" + fileFormats + ")$"; + Pattern pattern = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(fileName); + + return matcher.matches(); } public List listFiles(String path) throws FileException { @@ -299,5 +322,62 @@ public static boolean isLetterDigitOrChinese(String str) { String regex = "^[a-zA-Z0-9_\u4e00-\u9fa5]+$"; return str.matches(regex); } + public Boolean checkMetaTemplate(String fileName,String inputPath,String projectName) throws FileException, IOException { + if (!fileName.endsWith(templateName)) { + return false; + } + int index = fileName.indexOf('-'); + if (index == -1) { + return false; + } + if (projectName.equals(fileName.substring(0, index))) { + String path = inputPath.replace(JSON_TYPE, ""); + MetaJsonInfo metaJsonInfo = parseJson(path,projectName); + Map jobConfig = metaJsonInfo.getJobConfig(); + if (jobConfig != null && jobConfig.containsKey(PRODUCE_PARAM)) { + return false; + } + if ((metaJsonInfo.getJobName() == null || metaJsonInfo.getJobName().isEmpty()) && + (metaJsonInfo.getJobType() == null || metaJsonInfo.getJobType().isEmpty()) && + (metaJsonInfo.getTags() == null || metaJsonInfo.getTags().isEmpty()) && + (metaJsonInfo.getDescription() == null || metaJsonInfo.getDescription().isEmpty())) { + return true; + } + } + return false; + } + public MetaJsonInfo parseJson(String dirPath,String projectName) throws IOException, FileException { + getBasePath(dirPath); + InputStream inputStream = null; + InputStreamReader streamReader = null; + try { + inputStream = generateInputStream(basePath,projectName); + streamReader = new InputStreamReader(inputStream); + BufferedReader reader = new BufferedReader(streamReader); + return readJson(reader); + } catch (Exception e) { + LOG.error(e.getMessage()); + throw e; + } finally { + try { + if (null != inputStream) { + inputStream.close(); + } + if (null != streamReader) { + streamReader.close(); + } + } catch (Exception e1) { + LOG.warn("close stream error, {}", e1.getMessage()); + } + } + } + + private InputStream generateInputStream(String basePath,String projectName) throws IOException, FileException { + File metaFile = new File(basePath + File.separator + projectName +templateMetaFileJsonName); + if (!metaFile.exists()) { + throw new FileException(30603, metaFileJsonName); + } + return IoUtils.generateInputInputStream(basePath + File.separator + projectName +templateMetaFileJsonName); + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ZipHelper.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ZipHelper.java index 914edce53..373ba4ca1 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ZipHelper.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-base/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/util/ZipHelper.java @@ -25,6 +25,7 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; public class ZipHelper { @@ -32,9 +33,16 @@ public class ZipHelper { private static final String UN_ZIP_CMD = "unzip"; private static final String ZIP_TYPE = ".zip"; + private static final Pattern pattern = Pattern.compile("[;|&><`!]"); + private ZipHelper(){} public static String unzip(String dirPath)throws Exception { + + if (!isValidDirPath(dirPath)) { + throw new IllegalArgumentException("Invalid directory path: " + dirPath); + } + File file = new File(dirPath); if(!file.exists()){ logger.error("{} does not exist, can not unzip", dirPath); @@ -89,4 +97,8 @@ public static String unzip(String dirPath)throws Exception { public static boolean isZip(String fileName){ return fileName.substring(fileName.lastIndexOf('.')).equals(ZIP_TYPE); } + + private static boolean isValidDirPath(String dirPath) { + return StringUtils.isNotBlank(dirPath) && !pattern.matcher(dirPath).find(); + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/pom.xml b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/pom.xml index d2de5d4dc..e7fff5e6d 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/pom.xml +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 ../../pom.xml 4.0.0 @@ -45,17 +45,22 @@ com.webank.wedatasphere.streamis streamis-job-manager-base - ${jobmanager.version} + ${streamis.version} com.webank.wedatasphere.streamis streamis-job-launcher-linkis - ${jobmanager.version} + ${streamis.version} com.webank.wedatasphere.streamis streamis-job-launcher-service - ${jobmanager.version} + ${streamis.version} + + + com.webank.wedatasphere.streamis + streamis-job-errorcode + ${streamis.version} org.apache.linkis diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/handler/StreamisHeartbeatHandler.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/handler/StreamisHeartbeatHandler.java new file mode 100644 index 000000000..743e00048 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/handler/StreamisHeartbeatHandler.java @@ -0,0 +1,155 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.handler; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.manager.alert.AlertLevel; +import com.webank.wedatasphere.streamis.jobmanager.manager.alert.Alerter; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamRegisterMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamTaskMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamRegister; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamTask; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; +import org.apache.commons.lang3.StringUtils; +import org.apache.linkis.common.utils.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.*; +import java.util.concurrent.TimeUnit; + +@Component +public class StreamisHeartbeatHandler { + + @Autowired + private StreamRegisterMapper streamRegisterMapper; + + @Autowired + private StreamJobMapper streamJobMapper; + + @Autowired + private StreamTaskMapper streamTaskMapper; + + @Autowired + private StreamJobService jobService; + + @Autowired + private Alerter[] alert; + + private static final Logger logger = LoggerFactory.getLogger(StreamisHeartbeatHandler.class); + + @PostConstruct + public void startHeartbeatCheckThread() { + if ((Boolean) JobConf.LOGS_HEARTBEAT_CHECK_ENABLE().getValue()) { + int interval = Integer.parseInt(JobConf.LOGS_HEARTBEAT_CHECK_INTERVAL().getHotValue().toString()); + Utils.defaultScheduler().scheduleAtFixedRate(() -> { + try { + checkRegisterStatus(); + checkHeartbeatStatus(); + } catch (Exception e) { + logger.error("stream checkHeartbeatStatus failed"); + } + }, 1L *60 *1000, interval ,TimeUnit.MILLISECONDS); + logger.info("heartbeat info check started."); + } else { + logger.info("heartbeat info check not started."); + } + + } + + public void checkHeartbeatStatus() { + List streamRegisterInfo = streamRegisterMapper.getInfo(); + if (!streamRegisterInfo.isEmpty()) { + boolean alarmEnable = (boolean) JobConf.LOGS_HEARTBEAT_ALARMS_ENABLE().getHotValue(); + if (!alarmEnable) { + logger.info("heartbeat status alarm is disabled."); + } + for (StreamRegister streamRegister : streamRegisterInfo) { + StreamTask lastTask = streamTaskMapper.getLatestByJobId(streamRegister.getJobId()); + if (!JobConf.isRunning(lastTask.getStatus())) { + continue; + } + Date heartbeatTime = streamRegister.getHeartbeatTime(); + String applicationName = streamRegister.getApplicationName(); + String[] parts = applicationName.split("\\."); + String projectName = parts[0]; + String jobName = parts[1]; + long currentTime = System.currentTimeMillis(); + long diffInMillies = currentTime - heartbeatTime.getTime(); + int timeout = Integer.parseInt(JobConf.LOGS_HEARTBEAT_INTERVAL_TIMEOUT().getHotValue().toString()); + if (diffInMillies > timeout) { + StreamJob job = streamJobMapper.getCurrentJob(projectName, jobName); + String alertMsg = "流式" + job.getJobType() + "应用[" + job.getProjectName() + "." + job.getName() + "] 回调日志心跳超过" + timeout + "ms未响应, 请及时确认应用是否正常!"; + logger.warn(alertMsg); + if (alarmEnable) { + List userList = getAllAlertUsers(job); + StreamTask streamTask = streamTaskMapper.getLatestByJobId(job.getId()); + alert(jobService.getAlertLevel(job), alertMsg, userList, streamTask); + } + } + } + } + } + + private void checkRegisterStatus() { + ArrayList statusList = new ArrayList<>(); + statusList.add((int)JobConf.FLINK_JOB_STATUS_RUNNING().getValue()); + List streamTasks = streamTaskMapper.getTasksByStatus(statusList); + if (null == streamTasks || streamTasks.isEmpty()) { + return ; + } + boolean alarmEnable = (boolean) JobConf.LOGS_HEARTBEAT_REGISTER_ALARMS_ENABLE().getHotValue(); + if (!alarmEnable) { + logger.info("heartbeat register status alarm is disabled."); + } + for (StreamTask streamTask : streamTasks) { + StreamJob streamJob = streamJobMapper.getJobById(streamTask.getJobId()); + String appName = streamJob.getProjectName() +"."+streamJob.getName(); + StreamRegister register = streamRegisterMapper.getInfoByApplicationName(appName); + if (null == register) { + List userList = getAllAlertUsers(streamJob); + String alertMsg ="流式" + streamJob.getJobType() + "应用[" + appName + "] 回调日志没有注册, 请及时确认应用是否正常!"; + logger.info(alertMsg); + if (alarmEnable) { + alert(jobService.getAlertLevel(streamJob), alertMsg, userList, streamTask); + } + } + } + } + + protected void alert(AlertLevel alertLevel, String alertMsg, List users, StreamTask streamTask) { + for (Alerter alerter : alert) { + try { + alerter.alert(alertLevel, alertMsg, users, streamTask); + } catch (Exception t) { + logger.error("failed to send alert message to " + alerter.getClass().getSimpleName() + ".", t); + } + } + } + + protected List getAllAlertUsers(StreamJob job) { + Set allUsers = new LinkedHashSet<>(); + List alertUsers = jobService.getAlertUsers(job); + boolean isValid = false; + if (alertUsers != null) { + for (String user : alertUsers) { + if (StringUtils.isNotBlank(user) && !user.toLowerCase().contains("hduser")) { + isValid = true; + allUsers.add(user); + } + } + if (!allUsers.contains(job.getSubmitUser())) { + allUsers.add(job.getSubmitUser()); + } + } + if (!isValid) { + allUsers.add(job.getSubmitUser()); + allUsers.add(job.getCreateBy()); + } + return new ArrayList<>(allUsers); + } + +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/project/service/impl/ProjectPrivilegeServiceImpl.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/project/service/impl/ProjectPrivilegeServiceImpl.java index 67b6d556f..6cb416745 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/project/service/impl/ProjectPrivilegeServiceImpl.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/project/service/impl/ProjectPrivilegeServiceImpl.java @@ -77,6 +77,10 @@ private Map getResponseData(String reqPath, HttpServletRequest r headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity requestEntity = new HttpEntity<>(headers); LOG.info("obtain the operation privilege of the user,request url {}", url); + if (!url.startsWith("http://") && !url.startsWith("https://")) { + LOG.error("Unsupported protocol in the request URL: {}", url); + return null; + } ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, Map.class); LOG.info("obtain the operation privilege of the user,return response body:{}", responseEntity.getBody()); if(responseEntity.getBody()!=null && ((int)(responseEntity.getBody().get("status")))==0){ diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/service/InstanceService.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/service/InstanceService.java new file mode 100644 index 000000000..411fe4f66 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/service/InstanceService.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.service; + +import org.apache.linkis.common.utils.Utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +@Service +public class InstanceService { + + private static final Logger logger = LoggerFactory.getLogger(InstanceService.class); + @Value("${server.port}") + private String serverPort; + + public String getThisServiceInstance() { + + String hostname = Utils.getComputerName(); + int port = 0; + try { + port = Integer.parseInt(serverPort); + } catch (Exception e){ + logger.warn("Parse system property 'server.port' failed. {}", e.getMessage()); + } + return hostname + ':' + port; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/RealtimeLogEntity.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/RealtimeLogEntity.java new file mode 100644 index 000000000..fb7412596 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/RealtimeLogEntity.java @@ -0,0 +1,36 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity; + +import java.util.List; + +public class RealtimeLogEntity { + private String logPath; + + private List logs; + + private Long endLine; + + + public String getLogPath() { + return logPath; + } + + public void setLogPath(String logPath) { + this.logPath = logPath; + } + + public List getLogs() { + return logs; + } + + public void setLogs(List logs) { + this.logs = logs; + } + + public Long getEndLine() { + return endLine; + } + + public void setEndLine(Long endLine) { + this.endLine = endLine; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/StreamisJarTransformJobContent.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/StreamisJarTransformJobContent.java index 476705968..12b9d3ef1 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/StreamisJarTransformJobContent.java +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/transform/entity/StreamisJarTransformJobContent.java @@ -15,8 +15,10 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.JobTemplateFiles; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamisFile; import java.util.List; +import java.util.Map; /** * Created by enjoyyin on 2021/9/23. @@ -26,10 +28,20 @@ public class StreamisJarTransformJobContent implements StreamisTransformJobConte private StreamisFile mainClassJar; private String mainClass; private List args; - + private Boolean isHighAvailable; + private String highAvailableMessage; private List dependencyJars; private List hdfsJars; private List resources; + private String source; + private JobTemplateFiles jobTemplate; + public JobTemplateFiles getJobTemplate() { + return jobTemplate; + } + + public void setJobTemplate(JobTemplateFiles jobTemplate) { + this.jobTemplate = jobTemplate; + } public StreamisFile getMainClassJar() { return mainClassJar; @@ -78,4 +90,28 @@ public List getResources() { public void setResources(List resources) { this.resources = resources; } + + public Boolean getHighAvailable() { + return isHighAvailable; + } + + public void setHighAvailable(Boolean highAvailable) { + isHighAvailable = highAvailable; + } + + public String getHighAvailableMessage() { + return highAvailableMessage; + } + + public void setHighAvailableMessage(String highAvailableMessage) { + this.highAvailableMessage = highAvailableMessage; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/utils/SourceUtils.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/utils/SourceUtils.java new file mode 100644 index 000000000..218a20931 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/java/com/webank/wedatasphere/streamis/jobmanager/manager/utils/SourceUtils.java @@ -0,0 +1,68 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.utils; + +import com.google.gson.JsonSyntaxException; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.JobHighAvailableVo; +import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.impl.ProjectPrivilegeServiceImpl; +import org.apache.linkis.server.BDPJettyServerHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.actuate.autoconfigure.metrics.export.wavefront.WavefrontProperties; + +import java.util.Map; +import java.util.Optional; + +public class SourceUtils { + + private static final Logger LOG = LoggerFactory.getLogger(SourceUtils.class); + + public static JobHighAvailableVo manageJobProjectFile(String highAvailablePolicy,String source) { + highAvailablePolicy = Optional.ofNullable(highAvailablePolicy).orElse(JobConf.HIGHAVAILABLE_DEFAULT_POLICY().getHotValue()); + JobHighAvailableVo highAvailableVo = new JobHighAvailableVo(); + if (source.equalsIgnoreCase("update args")) { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("用户在页面手动修改args,任务不再支持高可用"); + return highAvailableVo; + } + try { + if (!Boolean.parseBoolean(JobConf.HIGHAVAILABLE_ENABLE().getValue().toString())) { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("管理员未开启高可用配置"); + return highAvailableVo; + } else { + //查job conf wds.streamis.app.highavailable.policy 值 + if (highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_DOUBLE().getValue()) || highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_DOUBLE_BAK().getValue()) + || highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE().getValue()) || highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE_BAK().getValue())){ + Map map = BDPJettyServerHelper.gson().fromJson(source, Map.class); + if (map.containsKey("source")) { + String sourceValue = map.get("source").toString(); + if (sourceValue.equals(JobConf.HIGHAVAILABLE_SOURCE().getValue())) { + if (map.containsKey("isHighAvailable")) { + highAvailableVo.setHighAvailable(Boolean.parseBoolean(map.get("isHighAvailable").toString()) ); + } + highAvailableVo.setMsg(map.getOrDefault("highAvailableMessage","高可用信息为空,请联系管理员").toString()); + return highAvailableVo; + } else { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("非标准来源,不检测高可用"); + return highAvailableVo; + } + } else { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("非标准来源,不检测高可用"); + return highAvailableVo; + } + } else { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("任务未开启高可用"); + return highAvailableVo; + } + } + } catch (JsonSyntaxException e) { + highAvailableVo.setHighAvailable(true); + highAvailableVo.setMsg("任务未开启高可用"); + LOG.error("Failed to source parse JSON"); + } + return highAvailableVo; + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/constrants/JobConstrants.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/constrants/JobConstrants.scala new file mode 100644 index 000000000..91a46b401 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/constrants/JobConstrants.scala @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.constrants + +object JobConstrants { + + val DEFAULT_JSON: String = """{"deployUser": "default","createTime": "default","pkgName": "default","highAvailableMessage": "default","isHighAvailable": false,"source": "aomp"}""" + + val JOB_RESET_ON_RESTART_WAIT_MILLS = 10 * 1000 + + val TYPE_PROJECT = "project" + + val TYPE_JOB = "job" + + val FIELD_WORKSPACE_NAME = "workspaceName" + + val FIELD_METAINFO_NAME = "metaInfo" + + val FIELD_JOB_NAME = "jobName" + + val FIELD_JOB_TYPE = "jobType" + val FIELD_JOB_TAG = "tags" + val FIELD_JOB_COMMENT = "comment" + val FIELD_JOB_DESCRIPTION = "description" + + val PRODUCE_PARAM = "wds.linkis.flink.produce" +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/hook/DefaultEmptyStreamisJobShutdownHook.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/hook/DefaultEmptyStreamisJobShutdownHook.scala new file mode 100644 index 000000000..662a4ca4a --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/hook/DefaultEmptyStreamisJobShutdownHook.scala @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.hook + +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.utils.JobUtils +import org.apache.linkis.common.utils.Logging +import org.springframework.stereotype.Component + +import java.util +import javax.annotation.PostConstruct + +class DefaultEmptyStreamisJobShutdownHook extends StreamisJobShutdownHook with Logging { + + + override def doBeforeJobShutdown(taskId: String, projectName: String, jobName: String, timeoutMills: Long, params: util.Map[String, AnyRef]): Unit = { + Thread.sleep(1000L) + logger.info(s"hook : ${getName} called doBeforeJobShutdown(${taskId}, ${projectName}, ${jobName}, ${timeoutMills}), params : " + + JobUtils.gson.toJson(params)) + } + + override def doAfterJobShutdown(taskId: String, projectName: String, jobName: String, timeoutMills: Long, params: util.Map[String, AnyRef]): Unit = { + Thread.sleep(1000L) + logger.info(s"hook : ${getName} called doAfterJobShutdown(${taskId}, ${projectName}, ${jobName}, ${timeoutMills}), params : " + + JobUtils.gson.toJson(params)) + } + + override def getName: String = "emptyJobShutdownHook" + + override def cancel(): Unit = {} +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobInspectService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobInspectService.scala index 49fda7aa6..76b56c896 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobInspectService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobInspectService.scala @@ -1,15 +1,18 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service + import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.constants.JobConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.errorcode.JobLaunchErrorCode import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.{JobCreateErrorException, JobErrorException, JobFetchErrorException} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.client.LinkisFlinkManagerJobClient import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamTaskMapper} -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion} -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{JobInspectVo, JobListInspectVo, JobSnapshotInspectVo, JobVersionInspectVo} -import org.apache.commons.lang3.StringUtils +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion, StreamJobVersionFiles} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{JobHighAvailableVo, JobInspectVo, JobListInspectVo, JobSnapshotInspectVo, JobVersionInspectVo} +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.SourceUtils +import org.apache.commons.lang.StringUtils import org.apache.linkis.common.exception.ErrorException import org.apache.linkis.common.utils.{JsonUtils, Logging, Utils} import org.springframework.beans.factory.annotation.Autowired @@ -21,7 +24,7 @@ import java.util import scala.collection.JavaConverters.asScalaBufferConverter @Service -class DefaultStreamJobInspectService extends StreamJobInspectService with Logging{ +class DefaultStreamJobInspectService extends StreamJobInspectService with Logging { @Autowired private var streamTaskService: StreamTaskService = _ @@ -34,6 +37,7 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin @Autowired private var streamJobConfMapper: StreamJobConfMapper = _ + /** * Inspect method * @@ -44,27 +48,30 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin @throws(classOf[ErrorException]) @Transactional(rollbackFor = Array(classOf[Exception])) override def inspect(jobId: Long, types: Array[JobInspectVo.Types]): util.List[JobInspectVo] = { - val inspectVos: util.List[JobInspectVo] = new util.ArrayList[JobInspectVo] - // Lock the stream job - Option(this.streamJobMapper.queryAndLockJobById(jobId)) match { - case Some(streamJob) => - types.foreach { - case JobInspectVo.Types.VERSION => - Option(versionInspect(streamJob)).foreach(inspectVos.add(_)) - case JobInspectVo.Types.SNAPSHOT => - Option(snapshotInspect(streamJob)).foreach(inspectVos.add(_)) - case JobInspectVo.Types.LIST => - Option(listInspect(streamJob)).foreach(inspectVos.add(_)) - case _ => null - // Do nothing - } - case _ => //Ignore - } - inspectVos + val inspectVos: util.List[JobInspectVo] = new util.ArrayList[JobInspectVo] + // Lock the stream job + Option(this.streamJobMapper.queryJobById(jobId)) match { + case Some(streamJob) => + types.foreach { + case JobInspectVo.Types.VERSION => + Option(versionInspect(streamJob)).foreach(inspectVos.add(_)) + case JobInspectVo.Types.SNAPSHOT => + Option(snapshotInspect(streamJob)).foreach(inspectVos.add(_)) + case JobInspectVo.Types.LIST => + Option(listInspect(streamJob)).foreach(inspectVos.add(_)) + case JobInspectVo.Types.HIGHAVAILABLE => + Option(highAvailableInspect(streamJob)).foreach(inspectVos.add(_)) + case _ => null + // Do nothing + } + case _ => //Ignore + } + inspectVos } /** * Inspect the job version + * * @param streamJob stream job * @return */ @@ -83,6 +90,7 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin /** * Inspect the snapshot + * * @param streamJob stream job * @return */ @@ -111,7 +119,7 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin private def listInspect(job: StreamJob): JobListInspectVo = { // 如果分离式特性开关开启,就获取分离式client,发送list请求 val listVo = new JobListInspectVo - if (JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE.getValue && JobLauncherConfiguration.ENABLE_FLINK_LIST_INSPECT.getHotValue) { + if (JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE.getHotValue() && JobLauncherConfiguration.ENABLE_FLINK_LIST_INSPECT.getHotValue) { val appName = s"${job.getProjectName}.${job.getName}" Utils.tryCatch { val appType = if (job.getJobType.toLowerCase().contains("flink")) { @@ -129,7 +137,7 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin logger.info(s"job appType is : ${appType}") val appList = LinkisFlinkManagerJobClient.listYarnApp(appName, job.getSubmitUser, "streamis", appTypeList) if (null != appList && !appList.isEmpty) { - appList.asScala.foreach{ + appList.asScala.foreach { app => if (app.getApplicationName().equalsIgnoreCase(appName)) { listVo.addYarnApp(app) @@ -137,7 +145,13 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin logger.info(s"yarn app name : ${app.getApplicationName()} like but not equals job name : ${appName}, ignore it. ") } } - logger.info(s"There are ${listVo.getList.size()} apps with same name : ${appName}") + var size = 0 + if (listVo.getList != null) { + size = listVo.getList.size + } else { + listVo.addOneUrl(null, "无", null) + } + logger.info(s"There are ${size} apps with same name : ${appName}") logger.info(JsonUtils.jackson.writeValueAsString(appList)) } else { listVo.addOneUrl(null, "无", null) @@ -157,4 +171,23 @@ class DefaultStreamJobInspectService extends StreamJobInspectService with Loggin listVo } + private def highAvailableInspect(job: StreamJob): JobHighAvailableVo = { + Utils.tryAndError { + var inspectVo = new JobHighAvailableVo + val jobId = job.getId + val jobVersion = streamJobMapper.getLatestJobVersion(jobId) + val highAvailablePolicy = streamJobConfMapper.getRawConfValue(jobId, JobConf.HIGHAVAILABLE_POLICY_KEY.getValue) + val sourceOption: Option[String] = Option(jobVersion.getSource) + sourceOption match { + case Some(source) => + inspectVo = SourceUtils.manageJobProjectFile(highAvailablePolicy, source) + case None => + logger.warn("this job source is null") + inspectVo.setHighAvailable(true) + inspectVo.setMsg("用户直接从页面上传,job的source为空,跳过高可用检查") + } + inspectVo + } + } + } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobService.scala index 874348c33..bdf6f3910 100755 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamJobService.scala @@ -16,21 +16,25 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service import java.util -import java.util.{Date, List} +import java.util.{Date, List, Map} import com.github.pagehelper.PageInfo import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.constants.JobConstants -import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.{JobCreateErrorException, JobFetchErrorException} +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.{JobCreateErrorException, JobErrorException, JobFetchErrorException} import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService import com.webank.wedatasphere.streamis.jobmanager.manager.alert.AlertLevel -import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamAlertMapper, StreamJobMapper, StreamTaskMapper} +import com.webank.wedatasphere.streamis.jobmanager.manager.conf.JobManagerConf +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants.PRODUCE_PARAM +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamAlertMapper, StreamJobMapper, StreamJobTemplateMapper, StreamTaskMapper} import com.webank.wedatasphere.streamis.jobmanager.manager.entity._ -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{QueryJobListVo, TaskCoreNumVo, VersionDetailVo} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{JobStatusVo, QueryJobListVo, TaskCoreNumVo, VersionDetailVo} import com.webank.wedatasphere.streamis.jobmanager.manager.service.DefaultStreamJobService.JobDeployValidateResult import com.webank.wedatasphere.streamis.jobmanager.manager.transform.JobContentParser import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.StreamisTransformJobContent -import com.webank.wedatasphere.streamis.jobmanager.manager.util.{JobUtils, ReaderUtils, ZipHelper} +import com.webank.wedatasphere.streamis.jobmanager.manager.util.{JobUtils, JsonUtils, ReaderUtils, ZipHelper} +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.{JobContentUtils, MergeUtils, SourceUtils} import org.apache.commons.lang.StringUtils import org.apache.commons.lang3.ObjectUtils import org.apache.linkis.common.exception.ErrorException @@ -57,21 +61,26 @@ class DefaultStreamJobService extends StreamJobService with Logging { private var streamJobConfService: StreamJobConfService = _ @Autowired private var streamAlertMapper:StreamAlertMapper = _ + @Autowired + private var streamJobTemplateMapper:StreamJobTemplateMapper = _ override def getJobById(jobId: Long): StreamJob = { this.streamJobMapper.getJobById(jobId) } + override def getLatestJobVersion(jobId: Long): StreamJobVersion = { + this.streamJobMapper.getLatestJobVersion(jobId) + } override def getJobByName(jobName: String): util.List[StreamJob] = streamJobMapper.getJobByName(jobName) - override def getByProList(projectName: String, userName: String, jobName: String, jobStatus: Integer, jobCreator: String, label: String): PageInfo[QueryJobListVo] = { + override def getByProList(projectName: String, userName: String, jobName: String, jobStatus: Integer, jobCreator: String, label: String, enable: java.lang.Boolean = null,jobType :String): PageInfo[QueryJobListVo] = { var streamJobList: util.List[QueryJobListVo] = null - if (StringUtils.isNotBlank(jobName) && jobName.contains(JobConstants.JOB_NAME_DELIMITER)) { + if (StringUtils.isNotBlank(jobName) && jobName.contains(JobConstants.DELIMITER_COMMA)) { val jobNameList = new util.ArrayList[String]() - jobName.split(JobConstants.JOB_NAME_DELIMITER).filter(StringUtils.isNotBlank(_)).foreach(jobNameList.add) - streamJobList = streamJobMapper.getJobLists(projectName, userName, null, jobStatus, jobCreator, JobUtils.escapeChar(label), JobConfKeyConstants.MANAGE_MODE_KEY.getValue, jobNameList) + jobName.split(JobConstants.DELIMITER_COMMA).filter(StringUtils.isNotBlank(_)).foreach(jobNameList.add) + streamJobList = streamJobMapper.getJobLists(projectName, userName, null, jobStatus, jobCreator, JobUtils.escapeChar(label), JobConfKeyConstants.MANAGE_MODE_KEY.getValue, jobNameList, enable,jobType) } else { - streamJobList = streamJobMapper.getJobLists(projectName, userName, JobUtils.escapeChar(jobName), jobStatus, jobCreator, JobUtils.escapeChar(label), JobConfKeyConstants.MANAGE_MODE_KEY.getValue, null) + streamJobList = streamJobMapper.getJobLists(projectName, userName, JobUtils.escapeChar(jobName), jobStatus, jobCreator, JobUtils.escapeChar(label), JobConfKeyConstants.MANAGE_MODE_KEY.getValue, null, enable,jobType) } if (streamJobList != null && !streamJobList.isEmpty) { val pageInfo = new PageInfo[QueryJobListVo](streamJobList) @@ -97,7 +106,7 @@ class DefaultStreamJobService extends StreamJobService with Logging { * COre indicator(核心指标) */ override def countByCores(projectName: String, userName: String): TaskCoreNumVo = { - val jobs = streamJobMapper.getJobLists(projectName, userName, null, null, null, null, JobConfKeyConstants.MANAGE_MODE_KEY.getValue, null) + val jobs = streamJobMapper.getJobLists(projectName, userName, null, null, null, null, JobConfKeyConstants.MANAGE_MODE_KEY.getValue, null,null,null) val taskNum = new TaskCoreNumVo() taskNum.setProjectName(projectName) if (jobs != null && !jobs.isEmpty) { @@ -109,8 +118,13 @@ class DefaultStreamJobService extends StreamJobService with Logging { else if (fo._1.equals(JobConf.FLINK_JOB_STATUS_RUNNING.getValue)) taskNum.setRunningNum(fo._2) else if (fo._1.equals(JobConf.FLINK_JOB_STATUS_FAILED.getValue)) taskNum.setFailureNum(fo._2) else if (fo._1.equals(JobConf.FLINK_JOB_STATUS_STOPPED.getValue)) taskNum.setStoppedNum(fo._2) + else if (fo._1.equals(JobConf.FLINK_JOB_STATUS_STARTING.getValue)) taskNum.setStartingNum(fo._2) + else if (fo._1.equals(JobConf.FLINK_JOB_STATUS_STOPPING.getValue)) taskNum.setStoppingNum(fo._2) }) } + if (JobManagerConf.ENABLE_JOB_SHUTDOWN_HOOKS.getValue) { + taskNum.setJobShutdownHooks(JobManagerConf.getHooksByProject(projectName)) + } taskNum } @@ -148,13 +162,13 @@ class DefaultStreamJobService extends StreamJobService with Logging { override def deployStreamJob(streamJob: StreamJob, - metaJsonInfo: MetaJsonInfo, userName: String, updateVersion: Boolean): StreamJobVersion = { + metaJsonInfo: MetaJsonInfo, userName: String, updateVersion: Boolean,source: String = null): StreamJobVersion = { if(StringUtils.isBlank(metaJsonInfo.getJobType)) throw new JobCreateErrorException(30030, s"jobType is needed.") else if(!JobConf.SUPPORTED_JOB_TYPES.getValue.contains(metaJsonInfo.getJobType)) { throw new JobCreateErrorException(30030, s"jobType ${metaJsonInfo.getJobType} is not supported.") } - if(metaJsonInfo.getJobContent == null || metaJsonInfo.getJobContent.isEmpty) + if (metaJsonInfo.getJobContent == null || metaJsonInfo.getJobContent.isEmpty) throw new JobCreateErrorException(30030, s"jobContent is needed.") val jobVersion = new StreamJobVersion() val newStreamJob = new StreamJob() @@ -170,6 +184,7 @@ class DefaultStreamJobService extends StreamJobService with Logging { newStreamJob.setLabel(metaJsonInfo.getTags) newStreamJob.setName(metaJsonInfo.getJobName) newStreamJob.setProjectName(metaJsonInfo.getProjectName) + newStreamJob.setEnable(true) streamJobMapper.insertJob(newStreamJob) } else { val jobVersions = streamJobMapper.getJobVersions(streamJob.getId) @@ -196,7 +211,7 @@ class DefaultStreamJobService extends StreamJobService with Logging { jobVersion.setJobContent(metaJsonInfo.getMetaInfo) jobVersion.setCreateBy(userName) jobVersion.setCreateTime(new Date) - jobVersion.setSource("upload by user.") + jobVersion.setSource(source) if (StringUtils.isNotBlank(metaJsonInfo.getComment)) jobVersion.setComment(metaJsonInfo.getComment) else jobVersion.setComment("upload by user.") @@ -207,21 +222,34 @@ class DefaultStreamJobService extends StreamJobService with Logging { @throws(classOf[ErrorException]) @Transactional(rollbackFor = Array(classOf[Exception])) - override def uploadJob(projectName: String, userName: String, inputZipPath: String): StreamJobVersion = { + override def uploadJob(projectName: String, userName: String, inputZipPath: String,source: String): StreamJobVersion = { val inputPath = ZipHelper.unzip(inputZipPath) val readerUtils = new ReaderUtils val metaJsonInfo = readerUtils.parseJson(inputPath) if (StringUtils.isNotBlank(projectName) && !projectName.equals(metaJsonInfo.getProjectName)) { + if (JobConf.PROJECT_NAME_STRICT_CHECK_SWITCH.getHotValue && StringUtils.isNotBlank(metaJsonInfo.getProjectName)){ + logger.error(s"The projectName [${projectName}] dose not match metaJson ProjectName [${metaJsonInfo.getProjectName}]") + throw new JobCreateErrorException(30030,s"The projectName [${projectName}] dose not match metaJson ProjectName [${metaJsonInfo.getProjectName}]") + } logger.warn(s"The projectName [${metaJsonInfo.getProjectName}] is not matching the project, will change it to [${projectName}] automatically") metaJsonInfo.setProjectName(projectName) + } val validateResult = validateJobDeploy(metaJsonInfo.getProjectName, metaJsonInfo.getJobName, userName) // 生成StreamJob,根据StreamJob生成StreamJobVersion - val version = deployStreamJob(validateResult.streamJob, metaJsonInfo, userName, validateResult.updateVersion) + val version = deployStreamJob(validateResult.streamJob, metaJsonInfo, userName, validateResult.updateVersion, source) // Save the job configuration, lock the job again if exists if (null != metaJsonInfo.getJobConfig){ - this.streamJobConfService.saveJobConfig(version.getJobId, metaJsonInfo.getJobConfig.asInstanceOf[util.Map[String, AnyRef]]) + if(metaJsonInfo.getJobConfig.containsKey(PRODUCE_PARAM)){ + if(metaJsonInfo.getJobConfig.get(PRODUCE_PARAM) == null) throw new JobCreateErrorException(30030,s"jobConfig does not contain wds.linkis.flink.produce, please check") + this.streamJobConfService.saveJobConfig(version.getJobId, metaJsonInfo.getJobConfig.asInstanceOf[util.Map[String, AnyRef]]) + }else{ + throw new JobCreateErrorException(30030,s"jobConfig does not contain wds.linkis.flink.produce, please check") + } + }else{ + throw new JobCreateErrorException(30030,s"meta_json does not contain jobConfig, please check") } +// this.streamJobConfService.saveJobConfig(version.getJobId, finalJobConfig.asInstanceOf[util.Map[String, AnyRef]]) // 上传所有非meta.json的文件 uploadFiles(metaJsonInfo, version, inputZipPath) version @@ -233,6 +261,7 @@ class DefaultStreamJobService extends StreamJobService with Logging { val validateResult = validateJobDeploy(metaJsonInfo.getProjectName, metaJsonInfo.getJobName, userName) val readerUtils = new ReaderUtils metaJsonInfo.setMetaInfo(readerUtils.readAsJson(metaJsonInfo)) + val projectName = metaJsonInfo.getProjectName val version = deployStreamJob(validateResult.streamJob, metaJsonInfo, userName, validateResult.updateVersion) // Save the job configuration, lock the job again if exists if (null != metaJsonInfo.getJobConfig){ @@ -249,10 +278,73 @@ class DefaultStreamJobService extends StreamJobService with Logging { } else streamJobMapper.getJobVersionById(jobId, version) if(jobVersion == null) throw new JobFetchErrorException(30030, s"job has no versions.") - jobContentParsers.find(_.canParse(job, jobVersion)).map(_.parseTo(job, jobVersion)) + val streamJob: StreamJob = streamJobMapper.getJobById(jobId) + val projectName: String = streamJob.getProjectName + val streamTask = streamTaskMapper.getLatestByJobId(jobId) + val jobTemplate: JobTemplateFiles = if (null != streamTask) { + if (streamTask.getStatus.equals(JobConf.FLINK_JOB_STATUS_RUNNING.getValue)) { + streamJobTemplateMapper.getJobTemplate(streamTask.getTemplateId,true) + }else{ + streamJobTemplateMapper.getLatestJobTemplateFile(projectName,true) + } + }else{ + streamJobTemplateMapper.getLatestJobTemplateFile(projectName,true) + } + jobContentParsers.find(_.canParse(job, jobVersion)).map(_.parseTo(job, jobVersion,jobTemplate)) .getOrElse(throw new JobFetchErrorException(30030, s"Cannot find a JobContentParser to parse jobContent.")) } + override def updateArgs(jobId: Long, version: String,args: util.List[String],isHighAvailable: Boolean, highAvailableMessage: String): StreamisTransformJobContent = { + val jobVersion =streamJobMapper.getLatestJobVersion(jobId) + val checkContent = getJobContent(jobId, jobVersion.getVersion) + val streamJob = streamJobMapper.queryJobById(jobId) + val jobContent = jobVersion.getJobContent + if (args != null){ + val newJobContent = JsonUtils.manageArgs(jobContent,args) + val streamJobVersion = new StreamJobVersion + streamJobVersion.setJobId(jobVersion.getJobId) + streamJobVersion.setCreateBy(jobVersion.getCreateBy) + streamJobVersion.setManageMode(jobVersion.getManageMode) + streamJobVersion.setCreateTime(new Date()) + streamJobVersion.setJobContent(newJobContent) + streamJobVersion.setSource("update args") + streamJobVersion.setVersion(rollingJobVersion(jobVersion.getVersion)) + streamJobVersion.setComment("用户"+ jobVersion.getCreateBy + "修改args") + streamJobMapper.insertJobVersion(streamJobVersion) + val oldVersionFiles: util.List[StreamJobVersionFiles] = streamJobMapper.getStreamJobVersionFiles(jobId, jobVersion.getId) + oldVersionFiles.asScala.foreach { version => + val jobVersionFiles = new StreamJobVersionFiles + jobVersionFiles.setJobId(version.getJobId) + jobVersionFiles.setJobVersionId(streamJobVersion.getId) + jobVersionFiles.setCreateBy(version.getCreateBy) + jobVersionFiles.setVersion(streamJobVersion.getVersion) + jobVersionFiles.setFileName(version.getFileName) + jobVersionFiles.setCreateTime(new Date(System.currentTimeMillis())) + jobVersionFiles.setStorePath(version.getStorePath) + streamJobMapper.insertJobVersionFiles(jobVersionFiles) + } + val task = streamTaskMapper.getLatestByJobId(streamJob.getId) + if (task != null && !JobConf.isCompleted(task.getStatus)) { + logger.warn(s"StreamJob-${streamJob.getName} is in status ${task.getStatus}, your deployment will not update the version in job") + } else { + streamJob.setCurrentVersion(rollingJobVersion(jobVersion.getVersion)) + streamJobMapper.updateJob(streamJob) + } + getJobContent(jobId,streamJobVersion.getVersion) + } else { + var source = jobVersion.getSource + if (source == null){ + source = JsonUtils.manageSource(JobConstrants.DEFAULT_JSON, isHighAvailable, highAvailableMessage) + } + else { + source = JsonUtils.manageSource(jobVersion.getSource, isHighAvailable, highAvailableMessage) + } + jobVersion.setSource(source) + streamJobMapper.updateSource(jobVersion) + getJobContent(jobId,jobVersion.getVersion) + } + } + override def hasPermission(jobId: Long, username: String): Boolean = { hasPermission(this.streamJobMapper.getJobById(jobId), username) @@ -297,10 +389,18 @@ class DefaultStreamJobService extends StreamJobService with Logging { username.equals(job.getCreateBy) } - override def getAlert(username: String, jobId: Long, version: String): util.List[StreamAlertRecord] = { + override def getJobVersionById(username: String, jobId: Long, version: String): StreamJobVersion = { val job = streamJobMapper.getJobVersionById(jobId, version) - if (job == null) return null - streamAlertMapper.getAlertByJobIdAndVersion(username,jobId,job.getId) + job + } + + override def getAlertByProList(username: String, jobId: Long, versionId: Long): PageInfo[StreamAlertRecord] = { + val streamJobList = streamAlertMapper.getAlertByJobIdAndVersion(username,jobId,versionId) + if (streamJobList != null && !streamJobList.isEmpty) { + val pageInfo = new PageInfo[StreamAlertRecord](streamJobList) + return pageInfo + } + new PageInfo[StreamAlertRecord](new util.ArrayList[StreamAlertRecord]()) } private def validateJobDeploy(projectName: String, jobName: String, userName: String): JobDeployValidateResult = { @@ -326,6 +426,78 @@ class DefaultStreamJobService extends StreamJobService with Logging { @Transactional(rollbackFor = Array(classOf[Exception])) override def updateLabel(streamJob: StreamJob): Unit = streamJobMapper.updateJob(streamJob) + override def canBeDisabled(jobId: Long): Boolean = { + val streamJob = streamJobMapper.getJobById(jobId); + if(streamJob == null) throw new JobFetchErrorException(30030, s"job does not exist.") + //处理job是首次上传且未被启动的情况 + if (streamJob.getStatus == 0){ + val streamTask = this.streamTaskMapper.getLatestByJobId(jobId) + if (streamTask != null) { + val statusCode = streamTask.getStatus + val status = JobConf.getStatusString(statusCode) + if (!JobConf.isFinished(statusCode)) { + logger.warn(s"StreamJob-${jobId} is in status ${status}, the job has not completed, can not be disabled") + return false + } + } + } + if (!streamJob.getEnable) { + logger.warn(s"StreamJob-${jobId} has been disabled, could not be disabled again") + false + } else { + true + } + } + + + override def disableJob(streamJob: StreamJob): Unit = { + if(streamJob == null) throw new JobFetchErrorException(30030, s"job does not exist.") + streamJob.setEnable(false) + streamJobMapper.updateJobEnable(streamJob) + } + + override def canbeActivated(jobId: Long): Boolean = { + val streamJob = streamJobMapper.getJobById(jobId) + if(streamJob == null) throw new JobFetchErrorException(30030, s"job does not exist.") + if (streamJob.getEnable){ + false + } else { + true + } + } + + override def activateJob(streamJob: StreamJob): Unit = { + streamJob.setEnable(true) + streamJobMapper.updateJobEnable(streamJob) + } + + override def getEnableStatus(jobId: Long): Boolean = { + val streamJob = streamJobMapper.getJobById(jobId) + if (streamJob.getEnable) { + true + } else { + false + } + } + + override def getJobFileById(id: Long): StreamJobVersionFiles = { + val streamJobVersionFiles = streamJobMapper.getJobFileById(id) + streamJobVersionFiles + } + + override def getLatestJobTemplate(projectName: String): String = { + streamJobTemplateMapper.getLatestJobTemplate(projectName,true) + } + + override def getJobTemplateConfMap(streamJob: StreamJob): util.Map[String, AnyRef] = { + val jobTemplate = streamJobTemplateMapper.getLatestJobTemplate(streamJob.getProjectName,true) + MergeUtils.getJobTemplateConfMap(jobTemplate) + } + + override def mergeJobConfig(destination: util.Map[String, AnyRef], source: util.Map[String, AnyRef]): Unit={ + MergeUtils.merge(destination,source) + } + } object DefaultStreamJobService{ diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamTaskService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamTaskService.scala index 18efc62d3..c3b8577cc 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamTaskService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/DefaultStreamTaskService.scala @@ -15,33 +15,45 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service +import com.webank.wedatasphere.streamis.errorcode.entity.StreamErrorCode +import com.google.gson.JsonParser + import java.util -import java.util.concurrent.Future -import java.util.{Calendar, function} +import java.util.concurrent.{Executors, Future, ScheduledExecutorService, TimeUnit} +import java.util.{Calendar, Map, function} import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants -import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper -import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.{JobConf, StreamJobLauncherConf} import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.{JobErrorException, JobExecuteErrorException, JobFetchErrorException, JobPauseErrorException, JobTaskErrorException} import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobLaunchManager import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.{JobGenericState, JobState} -import com.webank.wedatasphere.streamis.jobmanager.launcher.job.{JobInfo, LaunchJob} +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.{JobClient, JobInfo, LaunchJob} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.entity.LogRequestPayload import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.client.{AbstractJobClient, EngineConnJobClient} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.manager.SimpleFlinkJobLaunchManager import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.state.{FlinkCheckpoint, FlinkSavepoint} import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.EngineConnJobInfo import com.webank.wedatasphere.streamis.jobmanager.manager.SpringContextHolder -import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamTaskMapper} +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamJobTemplateMapper, StreamTaskMapper} import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo._ -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobMode, StreamTask} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, MetaJsonInfo, StreamJob, StreamJobMode, StreamJobVersion, StreamTask} import com.webank.wedatasphere.streamis.jobmanager.manager.scheduler.FutureScheduler import com.webank.wedatasphere.streamis.jobmanager.manager.scheduler.events.AbstractStreamisSchedulerEvent.StreamisEventInfo import com.webank.wedatasphere.streamis.jobmanager.manager.scheduler.events.StreamisPhaseInSchedulerEvent import com.webank.wedatasphere.streamis.jobmanager.manager.scheduler.events.StreamisPhaseInSchedulerEvent.ScheduleCommand +import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.RealtimeLogEntity import com.webank.wedatasphere.streamis.jobmanager.manager.transform.exception.TransformFailedErrorException import com.webank.wedatasphere.streamis.jobmanager.manager.transform.{StreamisTransformJobBuilder, TaskMetricsParser, Transform} import com.webank.wedatasphere.streamis.jobmanager.manager.util.DateUtils -import com.webank.wedatasphere.streamis.jobmanager.manager.utils.StreamTaskUtils +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.{JobContentUtils, StreamTaskUtils} +import com.webank.wedatasphere.streamis.errorcode.handler.StreamisErrorCodeHandler +import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.utils.JobUtils +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService +import com.webank.wedatasphere.streamis.jobmanager.manager.conf.JobManagerConf +import com.webank.wedatasphere.streamis.jobmanager.manager.constants.JobShutdownHookConstants +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants +import com.webank.wedatasphere.streamis.jobmanager.manager.exception.HookExecutionException +import com.webank.wedatasphere.streamis.jobmanager.manager.hook.StreamisJobShutdownHookFactory import javax.annotation.Resource import org.apache.commons.lang.StringUtils @@ -49,11 +61,15 @@ import org.apache.linkis.common.utils.{Logging, Utils} import org.apache.linkis.httpclient.dws.DWSHttpClient import org.apache.linkis.scheduler.queue import org.apache.linkis.scheduler.queue.{Job, SchedulerEvent} +import org.apache.linkis.server.BDPJettyServerHelper import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import scala.collection.JavaConverters._ +import scala.concurrent.duration.Duration +import scala.util.{Failure, Success} +import scala.util.control.Breaks.{break, breakable} @Service @@ -63,18 +79,31 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ @Autowired private var streamJobMapper:StreamJobMapper=_ @Autowired private var streamisTransformJobBuilders: Array[StreamisTransformJobBuilder] = _ @Autowired private var taskMetricsParser: Array[TaskMetricsParser] = _ + @Autowired private var streamJobService: StreamJobService = _ + @Autowired private var streamJobTemplateMapper:StreamJobTemplateMapper = _ @Resource private var jobLaunchManager: JobLaunchManager[_ <: JobInfo] = _ @Resource private var streamJobConfMapper: StreamJobConfMapper = _ + + @Resource + private var streamJobConfService: StreamJobConfService = _ + + @Resource + private var streamTaskService: StreamTaskService = _ /** * Scheduler */ @Resource private var scheduler: FutureScheduler = _ + @Autowired + private var instanceService: InstanceService = _ + + private val errorCodeHandler = StreamisErrorCodeHandler.getInstance() + /** * * @param Id @@ -84,7 +113,15 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ this.streamTaskMapper.getTaskById(Id) } - + override def getTaskStatusById(jobId: Long): JobStatusVo = { + val streamTask = this.streamTaskMapper.getLatestByJobId(jobId) + val statusVo = new JobStatusVo() + statusVo.setStatusCode(streamTask.getStatus) + statusVo.setStatus(JobConf.getStatusString(streamTask.getStatus)) + statusVo.setJobId(streamTask.getJobId) + statusVo.setMessage(streamTask.getErrDesc) + statusVo + } /** * Sync to execute job(task) * 1) create a new task @@ -196,37 +233,46 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ } override def schedule(context: StreamisPhaseInSchedulerEvent.StateContext, jobInfo: queue.JobInfo): util.Map[String, AnyRef] = { - val newTaskId = context.getVar("newTaskId") - if (null != newTaskId){ - val restoreTaskId = taskId - val jobState: JobState = if (restoreTaskId <= 0){ - getStateInfo(streamTaskMapper.getLatestLaunchedById(jobId)) - } else getStateInfo(restoreTaskId) - if (null != jobState){ - // If jobState.setToRestore(true) means that using the job state to restore stream task - jobState.setToRestore(restore) - } - // Launch entrance - launch(newTaskId.asInstanceOf[Long], execUser, jobState) - } else { - // cannot find the new task id - } - null + val newTaskId = context.getVar("newTaskId") + if (null != newTaskId){ + val restoreTaskId = taskId + val jobState: JobState = if (restoreTaskId <= 0){ + getStateInfo(streamTaskMapper.getLatestLaunchedById(jobId)) + } else getStateInfo(restoreTaskId) + if (null != jobState){ + // If jobState.setToRestore(true) means that using the job state to restore stream task + jobState.setToRestore(restore) + } + // Launch entrance + launch(newTaskId.asInstanceOf[Long], execUser, jobState) + } else { + // cannot find the new task id + } + null } override def onErrorHandle(context: StreamisPhaseInSchedulerEvent.StateContext, scheduleJob: queue.JobInfo, t: Throwable): Unit = { // Change the task status val newTaskId = context.getVar("newTaskId") if (null != newTaskId) { - info(s"Error to launch StreamTask [$newTaskId], now try to persist the status and message output", t) - val finalTask = new StreamTask() - finalTask.setId(newTaskId.asInstanceOf[Long]) - finalTask.setStatus(JobConf.FLINK_JOB_STATUS_FAILED.getValue) - // Output message equals error message, you can use t.getMessage() + info(s"Error to launch StreamTask [$newTaskId], now try to persist the status and message output", t) + val finalTask = new StreamTask() + finalTask.setId(newTaskId.asInstanceOf[Long]) + finalTask.setStatus(JobConf.FLINK_JOB_STATUS_FAILED.getValue) + // Output message equals error message, you can use t.getMessage() + val result = errorCodeMatchException(scheduleJob.getOutput) + val errorMsg = result._1 + val solution = result._2 + if(StringUtils.isBlank(errorMsg)){ finalTask.setErrDesc(scheduleJob.getOutput) - if (streamTaskMapper.updateTaskInStatus(finalTask, JobConf.FLINK_JOB_STATUS_STARTING.getValue) > 0) { - info(s"Transient the StreamTask [$newTaskId]'status from STARTING to FAILED and flush the output message.") - } + }else{ + finalTask.setErrDesc(errorMsg) + finalTask.setSolution(solution) + } + finalTask.setServerInstance(instanceService.getThisServiceInstance) + if (streamTaskMapper.updateTaskInStatus(finalTask, JobConf.FLINK_JOB_STATUS_STARTING.getValue) > 0) { + info(s"Transient the StreamTask [$newTaskId]'status from STARTING to FAILED and flush the output message.") + } } } }) @@ -241,8 +287,8 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @param taskId task id * @param operator user name */ - override def pause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean): PauseResultVo = { - val result: Future[PauseResultVo] = asyncPause(jobId, taskId, operator, snapshot) + override def pause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean, skipHookError: Boolean): PauseResultVo = { + val result: Future[PauseResultVo] = asyncPause(jobId, taskId, operator, snapshot, skipHookError) val pauseResult = result.get() if (StringUtils.isNotBlank(pauseResult.getMessage)){ throw new JobExecuteErrorException(-1, s"Fail to pause StreamJob(Task), message output: ${pauseResult.getMessage}"); @@ -251,8 +297,8 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ } - override def asyncPause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean): Future[PauseResultVo] = { - pause(jobId, taskId, operator, snapshot, new function.Function[SchedulerEvent, PauseResultVo] { + override def asyncPause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean, skipHookError: Boolean): Future[PauseResultVo] = { + pause(jobId, taskId, operator, snapshot, skipHookError, new function.Function[SchedulerEvent, PauseResultVo] { override def apply(event: SchedulerEvent): PauseResultVo = { val resultVo: PauseResultVo = new PauseResultVo(jobId, taskId) event match { @@ -280,30 +326,30 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @param snapshot snapshot * @return */ - override def bulkPause(jobIds: util.List[Long], taskIds: util.List[Long], operator: String, snapshot: Boolean): util.List[PauseResultVo] = { + override def bulkPause(jobIds: util.List[Long], taskIds: util.List[Long], operator: String, snapshot: Boolean, skipHookError: Boolean): util.List[PauseResultVo] = { val result: util.List[Future[PauseResultVo]] = new util.ArrayList[Future[PauseResultVo]]() val counter = (jobIds.size(), taskIds.size()) val iterateNum: Int = math.max(counter._1, counter._2) for (i <- 0 until iterateNum) { val jobId = if (i < counter._1) jobIds.get(i) else 0L val taskId = if (i < counter._2) taskIds.get(i) else 0L - result.add(asyncPause(jobId, taskId, operator, snapshot)) + result.add(asyncPause(jobId, taskId, operator, snapshot, skipHookError)) } result.asScala.map(_.get()).asJava } - def pause[T](jobId: Long, taskId: Long, operator: String, snapshot: Boolean, returnMapping: function.Function[SchedulerEvent, T]): (SchedulerEvent, Future[T]) = { + def pause[T](jobId: Long, taskId: Long, operator: String, snapshot: Boolean, skipHookError: Boolean, returnMapping: function.Function[SchedulerEvent, T]): (SchedulerEvent, Future[T]) = { val self = SpringContextHolder.getBean(classOf[StreamTaskService]) var finalJobId = jobId val event = new StreamisPhaseInSchedulerEvent(if (jobId > 0) "pauseJob-" + jobId else "pauseTask-" + taskId, new ScheduleCommand { override def onPrepare(context: StreamisPhaseInSchedulerEvent.StateContext, scheduleJob: queue.JobInfo): Unit = { - if (finalJobId < 0){ - finalJobId = getTaskInfo(taskId)._1 - } - // Assign the status STOPPING default - val pauseTaskId = self.transitionTaskStatus(jobId, taskId, JobConf.FLINK_JOB_STATUS_STOPPING.getValue) - if (pauseTaskId > 0) context.addVar("pauseTaskId", pauseTaskId) + if (finalJobId < 0){ + finalJobId = getTaskInfo(taskId)._1 + } + // Assign the status STOPPING default + val pauseTaskId = self.transitionTaskStatus(jobId, taskId, JobConf.FLINK_JOB_STATUS_STOPPING.getValue) + if (pauseTaskId > 0) context.addVar("pauseTaskId", pauseTaskId) } override def onErrorHandle(context: StreamisPhaseInSchedulerEvent.StateContext, scheduleJob: queue.JobInfo, t: Throwable): Unit = { @@ -313,6 +359,7 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ val finalTask = new StreamTask() finalTask.setId(pauseTaskId.asInstanceOf[Long]) finalTask.setStatus(JobConf.FLINK_JOB_STATUS_RUNNING.getValue) + finalTask.setServerInstance(instanceService.getThisServiceInstance) // Not need to store the output message if (streamTaskMapper.updateTaskInStatus(finalTask, JobConf.FLINK_JOB_STATUS_STOPPING.getValue) > 0) { info(s"Restore the StreamTask [$pauseTaskId]'status from STOPPING return to RUNNING.") @@ -321,56 +368,123 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ } override def schedule(context: StreamisPhaseInSchedulerEvent.StateContext, jobInfo: queue.JobInfo): util.Map[String, AnyRef] = { - val pauseTaskId = context.getVar("pauseTaskId") - val resultSet = new util.HashMap[String, AnyRef]() - if (null != pauseTaskId){ - val streamTask = streamTaskMapper.getTaskById(pauseTaskId.asInstanceOf[Long]) - if (null == streamTask){ - throw new JobPauseErrorException(-1, s"Not found the StreamTask [$pauseTaskId] to pause, please examined the system runtime status!") - } - if (StringUtils.isBlank(streamTask.getLinkisJobId)){ - throw new JobPauseErrorException(-1, s"Unable to pause the StreamTask [$pauseTaskId}], the linkis job id is null") - } - val streamJob = streamJobMapper.getJobById(finalJobId) - logger.info(s"Try to stop StreamJob [${streamJob.getName} with task(taskId: ${streamTask.getId}, linkisJobId: ${streamTask.getLinkisJobId}).") - val jobClient = getJobLaunchManager(streamTask).connect(streamTask.getLinkisJobId, streamTask.getLinkisJobInfo) - val status = JobConf.linkisStatusToStreamisStatus(jobClient.getJobInfo(true).getStatus) - if (!JobConf.isCompleted(status)) { - val jobStateInfo = Utils.tryCatch(jobClient.stop(snapshot)){ - case e: Exception => - val pauseError = new JobPauseErrorException(-1, s"Fail to stop the StreamJob [${streamJob.getName}] " + - s"with task(taskId: ${streamTask.getId}, linkisJobId: ${streamTask.getLinkisJobId}), reason: ${e.getMessage}.") - pauseError.initCause(e) - throw pauseError - case pauseE: JobPauseErrorException => - throw pauseE - } - Option(jobStateInfo).foreach(stateInfo => resultSet.put("snapshotPath", stateInfo.getLocation)) + val pauseTaskId = context.getVar("pauseTaskId") + val resultSet = new util.HashMap[String, AnyRef]() + if (null != pauseTaskId){ + val streamTask = streamTaskMapper.getTaskById(pauseTaskId.asInstanceOf[Long]) + if (null == streamTask){ + throw new JobPauseErrorException(-1, s"Not found the StreamTask [$pauseTaskId] to pause, please examined the system runtime status!") + } + if (StringUtils.isBlank(streamTask.getLinkisJobId)){ + throw new JobPauseErrorException(-1, s"Unable to pause the StreamTask [$pauseTaskId}], the linkis job id is null") + } + val streamJob = streamJobMapper.getJobById(finalJobId) + executeJobShutdownHook(skipHookError, streamTask, streamJob) + logger.info(s"Try to stop StreamJob [${streamJob.getName} with task(taskId: ${streamTask.getId}, linkisJobId: ${streamTask.getLinkisJobId}).") + val jobClient = getJobLaunchManager(streamTask).connect(streamTask.getLinkisJobId, streamTask.getLinkisJobInfo) + val status = JobConf.linkisStatusToStreamisStatus(jobClient.getJobInfo(true).getStatus) + if (!JobConf.isCompleted(status)) { + val jobStateInfo = Utils.tryCatch(jobClient.stop(snapshot)){ + case e: Exception => + val pauseError = new JobPauseErrorException(-1, s"Fail to stop the StreamJob [${streamJob.getName}] " + + s"with task(taskId: ${streamTask.getId}, linkisJobId: ${streamTask.getLinkisJobId}), reason: ${e.getMessage}.") + pauseError.initCause(e) + throw pauseError + case pauseE: JobPauseErrorException => + throw pauseE } - streamTask.setLastUpdateTime(Calendar.getInstance.getTime) - streamTask.setStatus(JobConf.FLINK_JOB_STATUS_STOPPED.getValue) - streamTaskMapper.updateTask(streamTask) + Option(jobStateInfo).foreach(stateInfo => resultSet.put("snapshotPath", stateInfo.getLocation)) } - resultSet + streamTask.setLastUpdateTime(Calendar.getInstance.getTime) + streamTask.setStatus(JobConf.FLINK_JOB_STATUS_STOPPED.getValue) + streamTaskMapper.updateTask(streamTask) + } + resultSet } }) (event, this.scheduler.submit(event, returnMapping)) } + private def executeJobShutdownHook[T](skipHookError: Boolean, streamTask: StreamTask, streamJob: StreamJob): Unit = { + if (!JobManagerConf.ENABLE_JOB_SHUTDOWN_HOOKS.getValue) { + return + } + val hookNameList = JobManagerConf.getHooksByProject(streamJob.getProjectName).asScala + val hooksNames = hookNameList.mkString(",") + val hookList = hookNameList.map(name => { + val hook = StreamisJobShutdownHookFactory.getHookByName(name) + if (null == hook) { + val msg = s"Got null hook for name : ${name}" + logger.error(msg) + if (!skipHookError) { + throw new HookExecutionException(msg) + } + } + hook + }).filter(null != _) + logger.info(s"will execute jobShutdownHooks : ${hooksNames} for project : ${streamJob.getProjectName} and job : ${streamJob.getName}") + val hookExtraParams = new util.HashMap[String, Object]() + hookExtraParams.put(JobShutdownHookConstants.START_TIME_MILLS_KEY, streamTask.getStartTime.getTime.toString) + hookExtraParams.put(JobShutdownHookConstants.STATUS_KEY, JobConf.getStatusString(streamTask.getStatus)) + // hookExtraParams.put(JobShutdownHookConstants.ENGINE_TYPE_KEY, streamJob.getEngineType) + // hookExtraParams.put(JobShutdownHookConstants.ENGINE_TYPE_KEY, streamJob.getEngineVersion) + val jobInfo = DWSHttpClient.jacksonJson.readValue(streamTask.getLinkisJobInfo, classOf[EngineConnJobInfo]) + hookExtraParams.put(JobShutdownHookConstants.APPLICATION_ID_KEY, jobInfo.getApplicationId) + hookExtraParams.put(JobShutdownHookConstants.APPLICATION_URL_KEY, jobInfo.getApplicationUrl) + hookExtraParams.put(JobShutdownHookConstants.CLUSTER_NAME_KEY, StreamJobLauncherConf.HIGHAVAILABLE_CLUSTER_NAME.getHotValue) + hookExtraParams.put(JobShutdownHookConstants.IS_MANAGER_KEY, StreamJobLauncherConf.WHETHER_MANAGER_CLUSTER.getHotValue.toString) + val startTimeMills = System.currentTimeMillis() + hookList.foreach(hook => { + val hookStartTimeMills = System.currentTimeMillis() + var hookFuture: Future[_] = null + Utils.tryCatch { + val hookTask = new Runnable { + override def run(): Unit = { + hook.doBeforeJobShutdown(streamTask.getId.toString, streamJob.getProjectName, streamJob.getName, + JobManagerConf.JOB_SHUTDOWN_HOOK_TIMEOUT_MILLS.getHotValue(), hookExtraParams) + logger.info(s"hook : ${hook.getName} internal succeed, costed ${System.currentTimeMillis() - hookStartTimeMills}mills.") + } + } + hookFuture = Utils.defaultScheduler.submit(hookTask) + val rs = hookFuture.get(JobManagerConf.JOB_SHUTDOWN_HOOK_TIMEOUT_MILLS.getHotValue(), TimeUnit.MILLISECONDS) + logger.info(s"hook : ${hook.getName} outside succeed, costed ${System.currentTimeMillis() - hookStartTimeMills}mills.") + } { + case e: Exception => + logger.error(s"hook : ${hook.getName} failed, costed ${System.currentTimeMillis() - hookStartTimeMills}mills.") + val reason = if (null != e.getCause) { + e.toString + ". cause : " + e.getCause.toString + } else { + e.toString + } + val msg = s"job : ${streamJob.getProjectName}.${streamJob.getName} execute hook : ${hook.getName} failed, because : ${reason}" + logger.error(msg, e) + Utils.tryAndWarn(hook.cancel()) + if (null != hookFuture && !hookFuture.isDone) { + hookFuture.cancel(true) + } + if (!skipHookError) { + throw new HookExecutionException(msg) + } + } + }) + logger.info(s"execute all ${hookList.size} cost ${System.currentTimeMillis() - startTimeMills}mills.") + } + /** * Query execute history(查询运行历史) + * * @param jobId * @param version * @return */ - def queryHistory(jobId: Long, version: String): util.List[StreamTaskListVo] ={ + def queryHistory(jobId: Long, version: String,pageNow: Long, pageSize: Long): StreamTaskPageInfo ={ if(StringUtils.isEmpty(version)) throw new JobFetchErrorException(30355, "version cannot be empty.") val job = streamJobMapper.getJobById(jobId) if(job == null) throw new JobFetchErrorException(30355, s"Unknown job $jobId.") val jobVersion = streamJobMapper.getJobVersionById(jobId, version) - if(jobVersion == null) return new util.ArrayList[StreamTaskListVo] - val tasks = streamTaskMapper.getByJobVersionId(jobVersion.getId, version) - if(tasks == null || tasks.isEmpty) return new util.ArrayList[StreamTaskListVo] + if(jobVersion == null) return new StreamTaskPageInfo + val tasks = streamTaskMapper.getByJobVersionId(jobVersion.getId, version,(pageNow - 1) * pageSize,pageSize) + if(tasks == null || tasks.isEmpty) return new StreamTaskPageInfo val list = new util.ArrayList[StreamTaskListVo] tasks.asScala.foreach{ f => val svo = new StreamTaskListVo() @@ -386,18 +500,23 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ svo.setVersionContent(jobVersion.getJobContent) svo.setRunTime(DateUtils.intervals(f.getStartTime, f.getLastUpdateTime)) svo.setStopCause(sub(f.getErrDesc)) + svo.setJobStartConfig(f.getJobStartConfig) list.add(svo) } - list + val total = streamTaskMapper.countGetByJobVersionId(jobVersion.getId, version) + val pageInfo =new StreamTaskPageInfo + pageInfo.setStreamTaskList(list) + pageInfo.setTotal(total) + pageInfo } - def getRealtimeLog(jobId: Long, taskId: Long, operator: String, requestPayload: LogRequestPayload): util.Map[String, Any] = { - val returnMap = new util.HashMap[String, Any] - returnMap.put("logPath", "undefined") - returnMap.put("logs", util.Arrays.asList("No log content is available. Perhaps the task has not been scheduled")) - returnMap.put("endLine", 1); + def getRealtimeLog(jobId: Long, taskId: Long, operator: String, requestPayload: LogRequestPayload): RealtimeLogEntity = { + val realtimeLogEntity = new RealtimeLogEntity + realtimeLogEntity.setLogPath("undefined") + realtimeLogEntity.setLogs(util.Arrays.asList("No log content is available. Perhaps the task has not been scheduled")) + realtimeLogEntity.setEndLine(1); val streamTask = if(taskId > 0) streamTaskMapper.getTaskById(taskId) - else streamTaskMapper.getLatestByJobId(jobId) + else streamTaskMapper.getLatestByJobId(jobId) if (null != streamTask && StringUtils.isNotBlank(streamTask.getLinkisJobId)) { Utils.tryCatch { val jobClient = getJobLaunchManager(streamTask).connect(streamTask.getLinkisJobId, streamTask.getLinkisJobInfo) @@ -406,9 +525,9 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ case client: EngineConnJobClient => requestPayload.setLogHistory(JobConf.isCompleted(streamTask.getStatus)) val logIterator = client.fetchLogs(requestPayload) - returnMap.put("logPath", logIterator.getLogPath) - returnMap.put("logs", logIterator.getLogs) - returnMap.put("endLine", logIterator.getEndLine) + realtimeLogEntity.setLogPath(logIterator.getLogPath) + realtimeLogEntity.setLogs(logIterator.getLogs) + realtimeLogEntity.setEndLine(logIterator.getEndLine); logIterator.close() jobClient.getJobInfo match { case linkisInfo: EngineConnJobInfo => @@ -431,7 +550,7 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ s"[id: ${streamTask.getId}, jobId: ${streamTask.getJobId}, linkis_id: ${streamTask.getLinkisJobId}]", e) } } - returnMap + realtimeLogEntity } /** @@ -443,7 +562,7 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ */ override def snapshot(jobId: Long, taskId: Long, operator: String): String = { val streamTask = if (taskId > 0) streamTaskMapper.getTaskById(taskId) - else streamTaskMapper.getLatestByJobId(jobId) + else streamTaskMapper.getLatestByJobId(jobId) if (null != streamTask && StringUtils.isNotBlank(streamTask.getLinkisJobId)){ val jobClient = getJobLaunchManager(streamTask).connect(streamTask.getLinkisJobId, streamTask.getLinkisJobInfo) return jobClient match { @@ -478,17 +597,17 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @param jobIds job ids */ override def getStatusList(jobIds: util.List[Long]): util.List[JobStatusVo] = { - val streamTask: util.List[StreamTask] = this.streamTaskMapper.getStatusInfoByJobIds(jobIds.asScala.map(id => { - id.asInstanceOf[java.lang.Long] - }).asJava) - streamTask.asScala.map(task => { - val statusVo = new JobStatusVo() - statusVo.setStatusCode(task.getStatus) - statusVo.setStatus(JobConf.getStatusString(task.getStatus)) - statusVo.setJobId(task.getJobId) - statusVo.setMessage(task.getErrDesc) - statusVo - }).asJava + val streamTask: util.List[StreamTask] = this.streamTaskMapper.getStatusInfoByJobIds(jobIds.asScala.map(id => { + id.asInstanceOf[java.lang.Long] + }).asJava) + streamTask.asScala.map(task => { + val statusVo = new JobStatusVo() + statusVo.setStatusCode(task.getStatus) + statusVo.setStatus(JobConf.getStatusString(task.getStatus)) + statusVo.setJobId(task.getJobId) + statusVo.setMessage(task.getErrDesc) + statusVo + }).asJava } def getTaskJobInfo(jobId:Long, version: String): EngineConnJobInfo ={ @@ -510,11 +629,11 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ @Transactional(rollbackFor = Array(classOf[Exception])) override def transitionTaskStatus(jobId: Long, taskId: Long, status: Int): Long = { trace(s"Query and lock the StreamJob in [$jobId] before updating status of StreamTask") - Option(streamJobMapper.queryAndLockJobById(jobId)) match { + Option(streamJobMapper.queryJobById(jobId)) match { case None => throw new JobTaskErrorException(-1, s"Unable to update status of StreamTask, the StreamJob [$jobId] is not exists.") case Some(job) => val streamTask = if(taskId > 0) streamTaskMapper.getTaskById(taskId) - else streamTaskMapper.getLatestByJobId(jobId) + else streamTaskMapper.getLatestByJobId(jobId) if (null == streamTask){ throw new JobTaskErrorException(-1, s"Unable to find any StreamTask for job [id: ${job.getId}, name: ${job.getName}]") } @@ -545,35 +664,41 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ @Transactional(rollbackFor = Array(classOf[Exception])) override def createTask(jobId: Long, status: Int, creator: String): StreamTask = { logger.trace(s"Query and lock the StreamJob in [$jobId] before creating StreamTask") - Option(streamJobMapper.queryAndLockJobById(jobId)) match { - case None => throw new JobTaskErrorException(-1, s"Unable to create StreamTask, the StreamJob [$jobId] is not exists.") - case Some(job) => - // Then to fetch latest job version - Option(streamJobMapper.getLatestJobVersion(jobId)) match { - case None => throw new JobTaskErrorException(-1, s"No versions can be found for job [id: ${job.getId}, name: ${job.getName}]") - case Some(jobVersion) => - var noticeMessage = s"Fetch the latest version: ${jobVersion.getVersion} for job [id: ${job.getId}, name: ${job.getName}]" - if (!jobVersion.getVersion.equals(job.getCurrentVersion)){ - noticeMessage += s", last version used for task is ${job.getCurrentVersion}" - // Update job current version - job.setCurrentVersion(jobVersion.getVersion) - streamJobMapper.updateJob(job) - } - logger.info(noticeMessage) - // Get the latest task by job id - val latestTask = streamTaskMapper.getLatestByJobId(jobId) - if (null == latestTask || JobConf.isCompleted(latestTask.getStatus)){ - val streamTask = new StreamTask(jobId, jobVersion.getId, jobVersion.getVersion, creator) - streamTask.setStatus(status) - logger.info(s"Produce a new StreamTask [jobId: $jobId, version: ${jobVersion.getVersion}, creator: $creator, status: ${streamTask.getStatus}]") - streamTaskMapper.insertTask(streamTask) - streamTask - } else { - throw new JobTaskErrorException(-1, s"Unable to create new task, StreamTask [${latestTask.getId}] is still " + - s"not completed for job [id: ${job.getId}, name: ${job.getName}]") - } - } - } + Option(streamJobMapper.queryJobById(jobId)) match { + case None => throw new JobTaskErrorException(-1, s"Unable to create StreamTask, the StreamJob [$jobId] is not exists.") + case Some(job) => + // Then to fetch latest job version + Option(streamJobMapper.getLatestJobVersion(jobId)) match { + case None => throw new JobTaskErrorException(-1, s"No versions can be found for job [id: ${job.getId}, name: ${job.getName}]") + case Some(jobVersion) => + var noticeMessage = s"Fetch the latest version: ${jobVersion.getVersion} for job [id: ${job.getId}, name: ${job.getName}]" + if (!jobVersion.getVersion.equals(job.getCurrentVersion)){ + noticeMessage += s", last version used for task is ${job.getCurrentVersion}" + // Update job current version + job.setCurrentVersion(jobVersion.getVersion) + streamJobMapper.updateJob(job) + } + logger.info(noticeMessage) + // Get the latest task by job id + val latestTask = streamTaskMapper.getLatestByJobId(jobId) + if (null == latestTask || JobConf.isCompleted(latestTask.getStatus)){ + val streamTask = new StreamTask(jobId, jobVersion.getId, jobVersion.getVersion, creator) + streamTask.setStatus(status) + streamTask.setServerInstance(instanceService.getThisServiceInstance) + logger.info(s"Produce a new StreamTask [jobId: $jobId, version: ${jobVersion.getVersion}, creator: $creator, status: ${streamTask.getStatus}]") + val jobTemplateId = streamJobTemplateMapper.getJobTemplateByProject(job.getProjectName) + streamTask.setTemplateId(jobTemplateId) + val jobTemplate = streamJobTemplateMapper.getJobTemplate(jobTemplateId,true) + val jobStartConfig = generateJobStartConfig(job, jobVersion, creator,jobTemplate) + streamTask.setJobStartConfig(jobStartConfig) + streamTaskMapper.insertTask(streamTask) + streamTask + } else { + throw new JobTaskErrorException(-1, s"Unable to create new task, StreamTask [${latestTask.getId}] is still " + + s"not completed for job [id: ${job.getId}, name: ${job.getName}]") + } + } + } } override def updateTask(streamTask: StreamTask): Unit = streamTaskMapper.updateTask(streamTask) @@ -584,7 +709,7 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @param taskId task id */ override def launch(taskId: Long, execUser: String): Unit = { - launch(taskId, execUser, null) + launch(taskId, execUser, null) } /** @@ -626,7 +751,8 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ streamTaskMapper.updateTask(streamTask) info(s"StreamJob [${streamJob.getName}] is ${jobInfo.getStatus} with $jobInfo.") if (JobConf.FLINK_JOB_STATUS_FAILED.getValue == streamTask.getStatus){ - throw new JobExecuteErrorException(-1, s"(提交流式应用状态失败, 请检查日志), errorDesc: ${streamTask.getErrDesc}") + val result: Future[_] = streamTaskService.errorCodeMatching(streamJob.getId,streamTask) + throw new JobExecuteErrorException(-1, s"(提交流式应用状态失败, 请检查日志), errorDesc: ${streamTask.getErrDesc}") } // Drop the temporary configuration Utils.tryQuietly(streamJobConfMapper.deleteTemporaryConfValue(streamTask.getJobId), { @@ -651,11 +777,11 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @return */ private def getTaskInfo(taskId: Long): (Long, StreamTask) = { - val oldStreamTask = streamTaskMapper.getTaskById(taskId) - if (Option(oldStreamTask).isEmpty){ - throw new JobTaskErrorException(-1, s"Cannot find the StreamTask in id: $taskId") - } - (oldStreamTask.getJobId, oldStreamTask) + val oldStreamTask = streamTaskMapper.getTaskById(taskId) + if (Option(oldStreamTask).isEmpty){ + throw new JobTaskErrorException(-1, s"Cannot find the StreamTask in id: $taskId") + } + (oldStreamTask.getJobId, oldStreamTask) } /** @@ -664,18 +790,18 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ * @return */ private def sub(str:String):String = { - if (StringUtils.isBlank(str) || str.length <= 100){ + if (StringUtils.isBlank(str) || str.length <= 300){ str }else { if (str.contains("message")){ val subStr = str.substring(str.indexOf("message") - 1) - if (subStr.length <= 100){ + if (subStr.length <= 300){ subStr + "..." }else { - subStr.substring(0,100) + "..." + subStr.substring(0,300) + "..." } }else { - str.substring(0,100) + "..." + str.substring(0,300) + "..." } } } @@ -711,13 +837,14 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ val jobInfo = jobClient.getJobInfo // Get the JobStateManager val jobStateManager = jobLaunchManager.getJobStateManager + val highAvailablePolicy = this.streamJobConfMapper.getRawConfValue(task.getJobId, JobConf.HIGHAVAILABLE_POLICY_KEY.getValue) // First to fetch the latest Savepoint information - Option(jobStateManager.getJobState[FlinkSavepoint](classOf[FlinkSavepoint], jobInfo)).foreach(savepoint => stateList.add(savepoint)) + Option(jobStateManager.getJobState[FlinkSavepoint](classOf[FlinkSavepoint], jobInfo,highAvailablePolicy)).foreach(savepoint => stateList.add(savepoint)) // Determinate if need the checkpoint information this.streamJobConfMapper.getRawConfValue(task.getJobId, JobConfKeyConstants.CHECKPOINT_SWITCH.getValue) match { case "ON" => // Then to fetch the latest Checkpoint information - Option(jobStateManager.getJobState[FlinkCheckpoint](classOf[FlinkCheckpoint], jobInfo)).foreach(checkpoint => stateList.add(checkpoint)) + Option(jobStateManager.getJobState[FlinkCheckpoint](classOf[FlinkCheckpoint], jobInfo,highAvailablePolicy)).foreach(checkpoint => stateList.add(checkpoint)) case _ => } // At last fetch the state information from storage @@ -758,16 +885,16 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ manageMod = Option(Utils.tryAndWarn(StreamJobMode.valueOf(value))).getOrElse(StreamJobMode.ENGINE_CONN) } else { manageMod = Option(streamJobMapper.getJobVersionById(streamJob.getId, version)) match { - case Some(jobVersion) => - Option(Utils.tryQuietly(StreamJobMode - .valueOf(jobVersion.getManageMode))).getOrElse(StreamJobMode.ENGINE_CONN) - case _ => StreamJobMode.ENGINE_CONN - } + case Some(jobVersion) => + Option(Utils.tryQuietly(StreamJobMode + .valueOf(jobVersion.getManageMode))).getOrElse(StreamJobMode.ENGINE_CONN) + case _ => StreamJobMode.ENGINE_CONN + } } val metricsStr = if (JobConf.SUPPORTED_MANAGEMENT_JOB_TYPES.getValue.contains(streamJob.getJobType)) null - else if(jobStateInfos == null || jobStateInfos.length == 0) null - else jobStateInfos(0).getLocation + else if(jobStateInfos == null || jobStateInfos.length == 0) null + else jobStateInfos(0).getLocation taskMetricsParser.find(_.canParse(streamJob)).map(_.parse(metricsStr)).filter { jobDetailsVO => jobDetailsVO.setLinkisJobInfo(flinkJobInfo) jobDetailsVO.setManageMode(manageMod.getClientType) @@ -795,4 +922,165 @@ class DefaultStreamTaskService extends StreamTaskService with Logging{ case _ => this.jobLaunchManager } } + + override def queryErrorCode(jobId: Long): StreamTask = { + streamTaskMapper.getLatestByJobId(jobId) + } + + override def errorCodeMatching(jobId: Long, streamTask: StreamTask): Future[_] = { + var errorMsg ="" + var solution ="" + val taskId =streamTask.getId + val user =streamTask.getSubmitUser + Utils.defaultScheduler.submit(new Runnable { + override def run(): Unit = { + Utils.tryCatch{ + breakable( + for(i<-0 to 100) { + val logs = getLog(jobId, taskId, user, "yarn",i*100) + val result = exceptionAnalyze(errorMsg,logs,solution) + errorMsg = result._1 + solution = result._2 + if (errorMsg.nonEmpty) { + break() + } + }) + }{ + case e: Exception => + logger.error("errorCodeMatching failed. ", e) + val streamTask = new StreamTask() + streamTask.setErrDesc(JobConf.ANALYZE_ERROR_MSG.getHotValue()) + streamTaskService.updateTask(streamTask) + } + if (errorMsg.isEmpty){ + Utils.tryCatch{ + breakable( + for(i<-0 to 100) { + val logs = getLog(jobId, taskId, user, "client",i*100) + val result =exceptionAnalyze(errorMsg,logs,solution) + errorMsg = result._1 + solution = result._2 + if (errorMsg.nonEmpty) { + break() + } + }) + if (errorMsg.isEmpty){ + errorMsg =JobConf.DEFAULT_ERROR_MSG.getHotValue() + } + val streamTask = new StreamTask() + streamTask.setId(taskId); + streamTask.setErrDesc(errorMsg) + streamTask.setSolution(solution) + streamTaskService.updateTask(streamTask) + }{ + case e: Exception => + logger.error("errorCodeMatching failed. ", e) + val streamTask = new StreamTask() + streamTask.setErrDesc(JobConf.ANALYZE_ERROR_MSG.getHotValue()) + streamTaskService.updateTask(streamTask) + } + } + val streamTask = new StreamTask() + streamTask.setId(taskId); + if(errorMsg.equals(JobConf.DEFAULT_ERROR_MSG.getHotValue())) { + streamTask.setErrDesc(JobConf.FINAL_ERROR_MSG.getHotValue()) + }else{ + streamTask.setErrDesc(errorMsg) + } + streamTask.setSolution(solution) + streamTaskService.updateTask(streamTask) + } + }) + } + + override def errorCodeMatchException(exception: String): (String,String) = { + var errorMsg = "" + var solution = "" + val result = exceptionAnalyze(errorMsg, exception, solution) + errorMsg = result._1 + solution = result._2 + (errorMsg,solution) + } + + def getLog(jobId : Long,taskId: Long, username: String,logType: String, fromLine: Int): String = { + val payload = new LogRequestPayload + payload.setLogType(logType) + payload.setFromLine(fromLine+1) + payload.setPageSize(100) + val realtimeLog = streamTaskService.getRealtimeLog(jobId, if (null != taskId) taskId else 0L, username, payload) + val logs = realtimeLog.getLogs + val logString =logs.asScala.mkString("\n") + logString + } + + def exceptionAnalyze(errorMsg: String, log: String,solution: String): (String,String) = { + if (null != log && log.nonEmpty) { + val errorCodes = errorCodeHandler.handle(log) + if (errorCodes != null && errorCodes.size() > 0) { + val errorDescs = errorCodes.asScala.head.getErrorDesc + val errorSolutions = errorCodes.asScala.flatMap(e => Option(e.getSolution)).filter(_.nonEmpty) + val errorSolution = errorSolutions.headOption.getOrElse(solution) + (errorDescs,errorSolution) + } else { + (errorMsg,solution) + } + } else { + (errorMsg,solution) + } + } + + override def generateJobStartConfig(job: StreamJob, jobVersion: StreamJobVersion, creator: String,jobTemplate: JobTemplateFiles): String = { + val metaJsonInfo = new MetaJsonInfo +// metaJsonInfo.setWorkspaceName(job.getWorkspaceName) + metaJsonInfo.setProjectName(job.getProjectName) + metaJsonInfo.setJobName(job.getName) + metaJsonInfo.setJobType(job.getJobType) + metaJsonInfo.setComment("Start config") + metaJsonInfo.setTags(job.getLabel) + metaJsonInfo.setDescription(job.getDescription) + val jobContent: Map[String, Object] = Utils.tryAndWarn(JobUtils.gson.fromJson(jobVersion.getJobContent, classOf[Map[String, Object]])) + var finalJobContent = jobContent + if (null != jobTemplate) { + finalJobContent = JobContentUtils.getFinalJobContent(jobVersion, jobTemplate.getMetaJson) + } + metaJsonInfo.setJobContent(finalJobContent) + // get job config + val jobConfig: util.Map[String, AnyRef] = Option(streamJobConfService.getJobConfig(job.getId)) + .getOrElse(new util.HashMap[String, AnyRef]()) + val jobTemplateMapOption = Option(streamJobService.getJobTemplateConfMap(job)) + val finalJobConfig: util.Map[String, AnyRef] = jobTemplateMapOption match { + case Some(jobTemplateMap) => + val mergedConfig = new util.HashMap[String, Object](jobTemplateMap) + streamJobService.mergeJobConfig(mergedConfig, jobConfig) + mergedConfig + case None => + jobConfig + } + metaJsonInfo.setJobConfig(finalJobConfig) + val configJson = JobUtils.gson.toJson(metaJsonInfo) + val jsonObj = new JsonParser().parse(configJson).getAsJsonObject + if (jsonObj.has(JobConstrants.FIELD_WORKSPACE_NAME)) { + jsonObj.remove(JobConstrants.FIELD_WORKSPACE_NAME) + } + if (jsonObj.has(JobConstrants.FIELD_METAINFO_NAME)) { + jsonObj.remove(JobConstrants.FIELD_METAINFO_NAME) + } + val parsedConfigJson = jsonObj.toString + logger.debug(s"new task with creator : ${creator} configJson: ${parsedConfigJson}") + parsedConfigJson + } + + override def generateJobTemplate(jobTemplate: JobTemplateFiles): String = { + val jsonObj = new JsonParser().parse(jobTemplate.getMetaJson).getAsJsonObject + if (jsonObj.has(JobConstrants.FIELD_METAINFO_NAME)) { + jsonObj.remove(JobConstrants.FIELD_METAINFO_NAME) + } + val parsedConfigJson = jsonObj.toString + parsedConfigJson + } + + override def getLatestByJobId(jobId: Long):StreamTask = { + val streamTask = streamTaskMapper.getLatestByJobId(jobId) + streamTask + } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamJobService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamJobService.scala index 2d7c32c76..5e246728a 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamJobService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamJobService.scala @@ -2,8 +2,8 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service import com.github.pagehelper.PageInfo import com.webank.wedatasphere.streamis.jobmanager.manager.alert.AlertLevel -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{MetaJsonInfo, StreamAlertRecord, StreamJob, StreamJobVersion} -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{QueryJobListVo, TaskCoreNumVo, VersionDetailVo} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, MetaJsonInfo, StreamAlertRecord, StreamJob, StreamJobVersion, StreamJobVersionFiles} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{JobStatusVo, QueryJobListVo, TaskCoreNumVo, VersionDetailVo} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.StreamisTransformJobContent import java.util @@ -16,6 +16,8 @@ trait StreamJobService { def getJobById(jobId: Long): StreamJob + def getLatestJobVersion(jobId :Long): StreamJobVersion + def getJobByName(jobName: String): util.List[StreamJob] /** @@ -27,7 +29,7 @@ trait StreamJobService { * @param jobCreator job creator * @return */ - def getByProList(projectName: String, userName: String, jobName: String, jobStatus: Integer, jobCreator: String, label: String): PageInfo[QueryJobListVo] + def getByProList(projectName: String, userName: String, jobName: String, jobStatus: Integer, jobCreator: String, label: String, enable: java.lang.Boolean = null,jobType :String): PageInfo[QueryJobListVo] /** * Page list query of version info @@ -77,7 +79,7 @@ trait StreamJobService { * @param updateVersion should update version * @return */ - def deployStreamJob(streamJob: StreamJob, metaJsonInfo: MetaJsonInfo, userName: String, updateVersion: Boolean): StreamJobVersion + def deployStreamJob(streamJob: StreamJob, metaJsonInfo: MetaJsonInfo, userName: String, updateVersion: Boolean,source: String = null): StreamJobVersion /** * Upload job @@ -87,7 +89,7 @@ trait StreamJobService { * @param inputZipPath input zip path * @return */ - def uploadJob(projectName: String, userName: String, inputZipPath: String): StreamJobVersion + def uploadJob(projectName: String, userName: String, inputZipPath: String, source: String): StreamJobVersion /** * Create or update job with meta json @@ -107,6 +109,14 @@ trait StreamJobService { */ def getJobContent(jobId: Long, version: String): StreamisTransformJobContent + /** + * + * @param jobId + * @param version + * @return + */ + def updateArgs(jobId: Long, version: String, args: util.List[String], isHighAvailable: Boolean, highAvailableMessage: String): StreamisTransformJobContent + /** * Has permission * @@ -151,9 +161,30 @@ trait StreamJobService { * @param version version * @return */ - def getAlert(username: String, jobId: Long, version: String): util.List[StreamAlertRecord] + def getJobVersionById(username: String, jobId: Long, version: String): StreamJobVersion + + def getAlertByProList(username: String, jobId: Long, versionId: Long): PageInfo[StreamAlertRecord] + def updateLabel(streamJob: StreamJob): Unit def getLinkisFlinkAlertLevel(job: StreamJob): AlertLevel + + def canBeDisabled(jobId: Long): Boolean + + def disableJob(streamJob: StreamJob): Unit + + def canbeActivated(jobId: Long): Boolean + + def activateJob(streamJob: StreamJob): Unit + + def getEnableStatus(jobId: Long): Boolean + + def getJobFileById(id: Long): StreamJobVersionFiles + + def getLatestJobTemplate(projectName: String): String + + def getJobTemplateConfMap(streamJob: StreamJob): util.Map[String, AnyRef] + + def mergeJobConfig(destination: util.Map[String, AnyRef], source: util.Map[String, AnyRef]): Unit } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamTaskService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamTaskService.scala index 296ebb3ef..312e3cbde 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamTaskService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/StreamTaskService.scala @@ -18,10 +18,13 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service import com.webank.wedatasphere.streamis.jobmanager.launcher.job.state.JobState import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.entity.LogRequestPayload import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.EngineConnJobInfo -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamTask} -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{ExecResultVo, JobDetailsVo, JobProgressVo, JobStatusVo, PauseResultVo, StreamTaskListVo} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion, StreamTask} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.{ExecResultVo, JobDetailsVo, JobProgressVo, JobStatusVo, PauseResultVo, StreamTaskListVo, StreamTaskPageInfo} +import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.RealtimeLogEntity + import java.util import java.util.concurrent.Future + /** * Include the method related by stream task (such as execute/pause) */ @@ -30,136 +33,168 @@ trait StreamTaskService { def getTaskById(Id: Long): StreamTask - + def getTaskStatusById(jobId: Long): JobStatusVo /** * Sync to execute job(task) * 1) create a new task * 2) launch the new task - * @param jobId job id - * @param taskId task id + * + * @param jobId job id + * @param taskId task id * @param execUser user name - * @param restore restore from job state + * @param restore restore from job state */ - def execute(jobId: Long, taskId: Long, execUser: String, restore: Boolean = false): Unit + def execute(jobId: Long, taskId: Long, execUser: String, restore: Boolean = false): Unit - def execute(jobId: Long, taskId: Long, execUser: String): Unit + def execute(jobId: Long, taskId: Long, execUser: String): Unit /** * Async to execute job(task) - * @param jobId job id - * @param taskId task id + * + * @param jobId job id + * @param taskId task id * @param execUser user name - * @param restore restore from job state + * @param restore restore from job state * @return */ - def asyncExecute(jobId: Long, taskId: Long, execUser: String, restore: Boolean = false): Future[String] + def asyncExecute(jobId: Long, taskId: Long, execUser: String, restore: Boolean = false): Future[String] + + def asyncExecute(jobId: Long, taskId: Long, execUser: String): Future[String] - def asyncExecute(jobId: Long, taskId: Long, execUser: String): Future[String] /** * Bulk executing - * @param jobIds jobIds - * @param taskIds taskIds + * + * @param jobIds jobIds + * @param taskIds taskIds * @param execUser execUser - * @param restore restore from job state + * @param restore restore from job state */ - def bulkExecute(jobIds: util.List[Long], taskIds: util.List[Long], execUser: String, restore: Boolean = false): util.List[ExecResultVo] + def bulkExecute(jobIds: util.List[Long], taskIds: util.List[Long], execUser: String, restore: Boolean = false): util.List[ExecResultVo] + + def bulkExecute(jobIds: util.List[Long], taskIds: util.List[Long], execUser: String): util.List[ExecResultVo] - def bulkExecute(jobIds: util.List[Long], taskIds: util.List[Long], execUser: String): util.List[ExecResultVo] /** * Sync to pause job(task) - * @param jobId job id - * @param taskId task id + * + * @param jobId job id + * @param taskId task id * @param operator user name */ - def pause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean): PauseResultVo + def pause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean, skipHookError: Boolean): PauseResultVo - def asyncPause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean): Future[PauseResultVo] + def asyncPause(jobId: Long, taskId: Long, operator: String, snapshot: Boolean, skipHookError: Boolean): Future[PauseResultVo] /** * Bulk pausing - * @param jobIds jobIds - * @param taskIds taskIds + * + * @param jobIds jobIds + * @param taskIds taskIds * @param operator operator * @param snapshot snapshot * @return */ - def bulkPause(jobIds: util.List[Long], taskIds: util.List[Long], operator: String, snapshot: Boolean): util.List[PauseResultVo] + def bulkPause(jobIds: util.List[Long], taskIds: util.List[Long], operator: String, snapshot: Boolean, skipHookError: Boolean): util.List[PauseResultVo] + /** * Just launch task by task id + * * @param taskId task id */ - def launch(taskId: Long, execUser: String): Unit + def launch(taskId: Long, execUser: String): Unit - def getLatestTaskByJobId(jobId: Long): StreamTask + def getLatestTaskByJobId(jobId: Long): StreamTask /** * Create new task use the latest job version - * @param jobId job id - * @param status init status + * + * @param jobId job id + * @param status init status * @param creator creator */ - def createTask(jobId: Long, status: Int, creator: String): StreamTask + def createTask(jobId: Long, status: Int, creator: String): StreamTask - def updateTask(streamTask: StreamTask): Unit + def updateTask(streamTask: StreamTask): Unit /** * Update the task status - * @param jobId job id + * + * @param jobId job id * @param status status code * @return task id of latest task */ - def transitionTaskStatus(jobId: Long, taskId: Long, status: Int) : Long + def transitionTaskStatus(jobId: Long, taskId: Long, status: Int): Long + /** * Query the task history list - * @param jobId job id + * + * @param jobId job id * @param version version * @return */ - def queryHistory(jobId: Long, version: String): util.List[StreamTaskListVo] + def queryHistory(jobId: Long, version: String, pageNow: Long, pageSize: Long): StreamTaskPageInfo + + + def queryErrorCode(jobId: Long): StreamTask /** * Get realtime log - * @param jobId job id - * @param operator user name + * + * @param jobId job id + * @param operator user name * @param requestPayload request payload * @return */ - def getRealtimeLog(jobId: Long, taskId: Long, operator: String, requestPayload: LogRequestPayload): util.Map[String, Any] + def getRealtimeLog(jobId: Long, taskId: Long, operator: String, requestPayload: LogRequestPayload): RealtimeLogEntity /** * Do snapshot - * @param jobId job id - * @param taskId task id + * + * @param jobId job id + * @param taskId task id * @param operator operator * @return snapshot url */ - def snapshot(jobId: Long, taskId: Long, operator: String): String + def snapshot(jobId: Long, taskId: Long, operator: String): String + /** * Fetch the progress(job progress/the progress of latest task) by job id and version - * @param jobId job id + * + * @param jobId job id * @param version version * @return */ - def getProgress(jobId: Long, version: String): JobProgressVo + def getProgress(jobId: Long, version: String): JobProgressVo /** * Fetch the status list by job id list + * * @param jobIds job ids */ - def getStatusList(jobIds: util.List[Long]): util.List[JobStatusVo] + def getStatusList(jobIds: util.List[Long]): util.List[JobStatusVo] + /** * Get latest task info by job id and version number - * @param jobId job id + * + * @param jobId job id * @param version version * @return */ - def getTaskJobInfo(jobId: Long, version: String): EngineConnJobInfo + def getTaskJobInfo(jobId: Long, version: String): EngineConnJobInfo - def getStateInfo(taskId: Long): JobState + def getStateInfo(taskId: Long): JobState - def getStateInfo(streamTask: StreamTask): JobState + def getStateInfo(streamTask: StreamTask): JobState def getJobDetailsVO(streamJob: StreamJob, version: String): JobDetailsVo + def errorCodeMatching(jobId: Long, streamTask: StreamTask): Future[_] + + def errorCodeMatchException(exception: String): (String,String) + + def generateJobStartConfig(job: StreamJob, jobVersion: StreamJobVersion, creator: String,jobTemplate: JobTemplateFiles): String + + def generateJobTemplate(jobTemplate: JobTemplateFiles): String + + def getLatestByJobId(jobId: Long ):StreamTask } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/TaskMonitorService.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/TaskMonitorService.scala index 2788eae1a..8c2f8e9be 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/TaskMonitorService.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/service/TaskMonitorService.scala @@ -16,8 +16,8 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.service import java.util -import java.util.Date -import java.util.concurrent.{Future, TimeUnit} +import java.util.{Date, Optional, function} +import java.util.concurrent.{CompletableFuture, ExecutorService, Future, TimeUnit} import com.webank.wedatasphere.streamis.jobmanager.launcher.JobLauncherAutoConfiguration import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.dao.StreamJobConfMapper @@ -26,9 +26,11 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobLaunchManager import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.jobInfo.{EngineConnJobInfo, LinkisJobInfo} import com.webank.wedatasphere.streamis.jobmanager.manager.alert.{AlertLevel, Alerter} -import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamTaskMapper} +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamRegisterMapper, StreamTaskMapper} import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamTask} import com.webank.wedatasphere.streamis.jobmanager.manager.utils.StreamTaskUtils +import com.webank.wedatasphere.streamis.errorcode.handler.StreamisErrorCodeHandler +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants import javax.annotation.{PostConstruct, PreDestroy, Resource} import org.apache.commons.lang.exception.ExceptionUtils @@ -47,7 +49,7 @@ class TaskMonitorService extends Logging { @Autowired private var streamTaskMapper:StreamTaskMapper=_ @Autowired private var streamJobMapper:StreamJobMapper=_ @Autowired private var jobService: StreamJobService =_ - + @Autowired private var streamRegisterMapper:StreamRegisterMapper =_ @Autowired private var alerters:Array[Alerter] = _ @Resource @@ -56,6 +58,9 @@ class TaskMonitorService extends Logging { @Resource private var streamJobConfMapper: StreamJobConfMapper = _ + @Autowired + private var instanceService: InstanceService = _ + private var future: Future[_] = _ @PostConstruct @@ -67,6 +72,35 @@ class TaskMonitorService extends Logging { }("Monitor the status of all tasks failed!") }, JobConf.TASK_MONITOR_INTERVAL.getValue.toLong, JobConf.TASK_MONITOR_INTERVAL.getValue.toLong, TimeUnit.MILLISECONDS) } + if (JobConf.STREAMIS_JOB_RESET_ON_START_ENABLE.getHotValue()) { + Utils.defaultScheduler.submit(new Runnable { + override def run(): Unit = Utils.tryAndError { + Thread.sleep(JobConstrants.JOB_RESET_ON_RESTART_WAIT_MILLS) + logger.info("Start to clean halt jobs started in on day after server started.") + val statusList = new util.ArrayList[Integer]() + statusList.add(JobConf.FLINK_JOB_STATUS_STARTING.getValue) + val thisServerInstance = instanceService.getThisServiceInstance + val streamTasks = streamTaskMapper.getTasksByStatus(statusList).filter(e => thisServerInstance.equalsIgnoreCase(e.getServerInstance)) + if (null != streamTasks && !streamTasks.isEmpty) { + logger.info(s"There are ${streamTasks.size} starting tasks to be killed.") + val jobLaunchManager = JobLaunchManager.getJobManager(JobLauncherAutoConfiguration.DEFAULT_JOB_LAUNCH_MANGER) + streamTasks.foreach(task => { + val tmpTask = new StreamTask() + tmpTask.setId(task.getId) + Utils.tryAndWarn { + val jobClient = jobLaunchManager.connect(task.getLinkisJobId, task.getLinkisJobInfo) + jobClient.stop() + } + tmpTask.setStatus(JobConf.FLINK_JOB_STATUS_FAILED.getValue) + val msg = s"Task ${task.getId} of job id : ${task.getJobId} in server : ${task.getServerInstance} was killed after streamis server restarted." + logger.warn(msg) + tmpTask.setErrDesc(msg) + streamTaskMapper.updateTask(tmpTask) + }) + } + } + }) + } } @PreDestroy @@ -93,7 +127,7 @@ class TaskMonitorService extends Logging { } else { streamTask.setLastUpdateTime(new Date) streamTaskMapper.updateTask(streamTask) - info(s"Try to update status of StreamJob-${job.getName}.") + info(s"Try to update status of StreamJob ${job.getProjectName}.${job.getName} with id ${job.getId}.") val retryHandler = new RetryHandler {} retryHandler.setRetryNum(3) retryHandler.setRetryMaxPeriod(2000) @@ -115,6 +149,7 @@ class TaskMonitorService extends Logging { } streamTaskMapper.updateTask(streamTask) if(streamTask.getStatus == JobConf.FLINK_JOB_STATUS_FAILED.getValue) { + warn(s"StreamJob-${job.getName} is failed, please be noticed.") var extraMessage = "" Option(jobInfo) match { @@ -124,19 +159,22 @@ class TaskMonitorService extends Logging { } // Need to add restart feature if user sets the restart parameters. var alertMsg = s"Streamis 流式应用[${job.getName}${extraMessage}]已经失败, 请登陆Streamis查看应用日志." + streamTask.setErrDesc("原因分析中,请稍后重试"+streamTask.getErrDesc) + streamTaskMapper.updateTask(streamTask) + val result: Future[_] = streamTaskService.errorCodeMatching(job.getId,streamTask) + var highAvailablePolicy = this.streamJobConfMapper.getRawConfValue(job.getId, JobConf.HIGHAVAILABLE_POLICY_KEY.getValue) + highAvailablePolicy = Optional.ofNullable(highAvailablePolicy).orElse(JobConf.HIGHAVAILABLE_DEFAULT_POLICY.getHotValue) this.streamJobConfMapper.getRawConfValue(job.getId, JobConfKeyConstants.FAIL_RESTART_SWITCH.getValue) match { case "ON" => alertMsg = s"${alertMsg} 现将自动拉起该应用" - Utils.tryCatch{ - info(s"Start to reLaunch the StreamisJob [${job.getName}], now to submit and schedule it...") - // Use submit user to start job - val startAutoRestoreSwitch = "ON".equals(this.streamJobConfMapper.getRawConfValue(job.getId, JobConfKeyConstants.START_AUTO_RESTORE_SWITCH.getValue)) - val future: Future[String] = streamTaskService.asyncExecute(job.getId, 0L, job.getSubmitUser, startAutoRestoreSwitch) - }{ - case e:Exception => - warn(s"Fail to reLaunch the StreamisJob [${job.getName}]", e) - } + restartJob(job,streamTask) case _ => + if (JobConf.AUTO_RESTART_JOB.getHotValue()) { + if (!highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_SINGLE_BAK.getValue) && !highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_DEFAULT_POLICY.getValue)) { + alertMsg = s"${alertMsg} 现将自动拉起该应用" + restartJob(job,streamTask) + } + } } val userList = getAlertUsers(job) alert(jobService.getAlertLevel(job), alertMsg, userList, streamTask) @@ -146,6 +184,20 @@ class TaskMonitorService extends Logging { info("All StreamTasks status have updated.") } + protected def restartJob(job: StreamJob, streamTask: StreamTask): Unit = { + Utils.tryCatch { + info(s"Start to reLaunch the StreamisJob [${job.getName}], now to submit and schedule it...") + // Use submit user to start job + val startAutoRestoreSwitch = "ON".equals(this.streamJobConfMapper.getRawConfValue(job.getId, JobConfKeyConstants.START_AUTO_RESTORE_SWITCH.getValue)) + val future = streamTaskService.asyncExecute(job.getId, 0L, job.getSubmitUser, startAutoRestoreSwitch) + } { + case e: Exception => + warn(s"Fail to reLaunch the StreamisJob [${job.getName}]", e) + val userList = getAlertUsers(job) + val alertMsg = s"Fail to reLaunch the StreamisJob [${job.getName}],please be noticed!" + alert(AlertLevel.MAJOR, alertMsg, userList, streamTask) + } + } /** * Refresh streamis task * @param streamTask stream task @@ -168,11 +220,40 @@ class TaskMonitorService extends Logging { allUsers.add(user) } }) + if (!allUsers.contains(job.getSubmitUser)) { + allUsers.add(job.getSubmitUser) + } + } + if (!isValid){ + allUsers.add(job.getSubmitUser) + allUsers.add(job.getCreateBy) + } + new util.ArrayList[String](allUsers) + } + + + protected def getAllAlertUsers(job: StreamJob): util.List[String] = { + val allUsers = new util.LinkedHashSet[String]() + val alertUsers = jobService.getAlertUsers(job) + var isValid = false + if (alertUsers!= null) { + alertUsers.foreach(user => { + if (StringUtils.isNotBlank(user) && !user.toLowerCase().contains("hduser")) { + isValid = true + allUsers.add(user) + } + }) + if (!allUsers.contains(job.getSubmitUser)) { + allUsers.add(job.getSubmitUser) + } } if (!isValid){ allUsers.add(job.getSubmitUser) allUsers.add(job.getCreateBy) } + util.Arrays.asList(JobConf.STREAMIS_DEVELOPER.getHotValue().split(","):_*).foreach(user => { + allUsers.add(user) + }) new util.ArrayList[String](allUsers) } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/JobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/JobContentParser.scala index acb251a3b..0d0340a31 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/JobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/JobContentParser.scala @@ -16,7 +16,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform import org.apache.linkis.manager.label.entity.engine.RunType.RunType -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.StreamisTransformJobContent /** @@ -30,6 +30,6 @@ trait JobContentParser { def canParse(job: StreamJob, jobVersion: StreamJobVersion): Boolean - def parseTo(job: StreamJob, jobVersion: StreamJobVersion): StreamisTransformJobContent + def parseTo(job: StreamJob, jobVersion: StreamJobVersion,jobTemplate: JobTemplateFiles): StreamisTransformJobContent } \ No newline at end of file diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/AbstractStreamisTransformJobBuilder.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/AbstractStreamisTransformJobBuilder.scala index 5ea152614..b3c566fb5 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/AbstractStreamisTransformJobBuilder.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/AbstractStreamisTransformJobBuilder.scala @@ -20,12 +20,14 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import org.apache.linkis.common.conf.CommonVars import org.apache.linkis.manager.label.entity.engine.RunType.RunType import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService -import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.{StreamJobMapper, StreamJobTemplateMapper} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob} +import com.webank.wedatasphere.streamis.jobmanager.manager.service.{StreamJobService, StreamTaskService} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.StreamisTransformJobBuilder import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisJobConnect, StreamisJobConnectImpl, StreamisJobEngineConnImpl, StreamisTransformJob, StreamisTransformJobContent, StreamisTransformJobImpl} import org.springframework.beans.factory.annotation.Autowired +import java.util.{Map => JavaMap} import java.util import scala.collection.JavaConverters.mapAsJavaMapConverter /** @@ -35,25 +37,47 @@ abstract class AbstractStreamisTransformJobBuilder extends StreamisTransformJobB @Autowired private var streamJobMapper: StreamJobMapper = _ @Autowired private var streamJobConfService: StreamJobConfService = _ + @Autowired private var streamJobService: StreamJobService = _ + @Autowired private var streamTaskService: StreamTaskService = _ + @Autowired private var streamJobTemplateMapper:StreamJobTemplateMapper = _ protected def createStreamisTransformJob(): StreamisTransformJobImpl = new StreamisTransformJobImpl - protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob): StreamisTransformJobContent + protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob,jobTemplate: JobTemplateFiles): StreamisTransformJobContent override def build(streamJob: StreamJob): StreamisTransformJob = { val transformJob = createStreamisTransformJob() transformJob.setStreamJob(streamJob) val jobConfig: util.Map[String, AnyRef] = Option(streamJobConfService.getJobConfig(streamJob.getId)) .getOrElse(new util.HashMap[String, AnyRef]()) + val jobTemplateMapOption = Option(streamJobService.getJobTemplateConfMap(streamJob)) + val finalJobConfig: util.Map[String, AnyRef] = jobTemplateMapOption match { + case Some(jobTemplateMap) => + val mergedConfig = new util.HashMap[String, Object](jobTemplateMap) + streamJobService.mergeJobConfig(mergedConfig, jobConfig) + mergedConfig + case None => + jobConfig + } // Put and overwrite internal group, users cannot customize the internal configuration val internalGroup = new util.HashMap[String, AnyRef]() - jobConfig.put(JobConfKeyConstants.GROUP_INTERNAL.getValue, internalGroup) + finalJobConfig.put(JobConfKeyConstants.GROUP_INTERNAL.getValue, internalGroup) internalLogConfig(internalGroup) - transformJob.setConfigMap(jobConfig) + transformJob.setConfigMap(finalJobConfig) val streamJobVersions = streamJobMapper.getJobVersions(streamJob.getId) // 无需判断streamJobVersions是否非空,因为TaskService已经判断了 transformJob.setStreamJobVersion(streamJobVersions.get(0)) - transformJob.setStreamisTransformJobContent(createStreamisTransformJobContent(transformJob)) + val streamTask = streamTaskService.getLatestByJobId(streamJob.getId) + val jobTemplate: JobTemplateFiles = if (null != streamTask) { + if (streamTask.getStatus.equals(JobConf.FLINK_JOB_STATUS_RUNNING.getValue)) { + streamJobTemplateMapper.getJobTemplate(streamTask.getTemplateId,true) + }else{ + streamJobTemplateMapper.getLatestJobTemplateFile(streamJob.getProjectName,true) + } + }else{ + streamJobTemplateMapper.getLatestJobTemplateFile(streamJob.getProjectName,true) + } + transformJob.setStreamisTransformJobContent(createStreamisTransformJobContent(transformJob,jobTemplate)) transformJob } @@ -64,6 +88,8 @@ abstract class AbstractStreamisTransformJobBuilder extends StreamisTransformJobB private def internalLogConfig(internal: util.Map[String, AnyRef]): Unit = { internal.put(JobConf.STREAMIS_JOB_LOG_GATEWAY.key, JobConf.STREAMIS_JOB_LOG_GATEWAY.getValue) internal.put(JobConf.STREAMIS_JOB_LOG_COLLECT_PATH.key, JobConf.STREAMIS_JOB_LOG_COLLECT_PATH.getValue) + internal.put(JobConf.STREAMIS_JOB_LOG_HEARTBEAT_PATH.key, JobConf.STREAMIS_JOB_LOG_HEARTBEAT_PATH.getValue) + internal.put(JobConf.STREAMIS_JOB_LOG_HEARTBEAT_INTERVAL.key, new Integer(JobConf.STREAMIS_JOB_LOG_HEARTBEAT_INTERVAL.getValue)) } } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/DefaultStreamisTransformJobBuilder.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/DefaultStreamisTransformJobBuilder.scala index 49370ff8f..d9581777d 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/DefaultStreamisTransformJobBuilder.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/DefaultStreamisTransformJobBuilder.scala @@ -17,7 +17,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.builder import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException import org.apache.linkis.manager.label.entity.engine.RunType.RunType -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.JobContentParser import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisTransformJob, StreamisTransformJobContent} import org.springframework.beans.factory.annotation.Autowired @@ -34,8 +34,8 @@ class DefaultStreamisTransformJobBuilder extends AbstractDefaultStreamisTransfor override protected def getRunType(transformJob: StreamisTransformJob): RunType = jobContentParsers.find(_.jobType == transformJob.getStreamJob.getJobType.toLowerCase).map(_.runType).get - override protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob): StreamisTransformJobContent = + override protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = jobContentParsers.find(_.canParse(transformJob.getStreamJob, transformJob.getStreamJobVersion)) - .map(_.parseTo(transformJob.getStreamJob, transformJob.getStreamJobVersion)) + .map(_.parseTo(transformJob.getStreamJob, transformJob.getStreamJobVersion,jobTemplate)) .getOrElse(throw new JobExecuteErrorException(30350, "Not support jobContent " + transformJob.getStreamJobVersion.getJobContent)) } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/SparkStreamisTransformJobBuilder.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/SparkStreamisTransformJobBuilder.scala index 969e29875..09651bdfa 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/SparkStreamisTransformJobBuilder.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/builder/SparkStreamisTransformJobBuilder.scala @@ -1,7 +1,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.builder import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.JobContentParser import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisTransformJob, StreamisTransformJobContent} import org.apache.linkis.manager.label.entity.engine.RunType.RunType @@ -18,9 +18,9 @@ class SparkStreamisTransformJobBuilder extends AbstractDefaultStreamisTransformJ override protected def getRunType(transformJob: StreamisTransformJob): RunType = jobContentParsers.find(_.jobType == transformJob.getStreamJob.getJobType.toLowerCase).map(_.runType).get - override protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob): StreamisTransformJobContent = + override protected def createStreamisTransformJobContent(transformJob: StreamisTransformJob,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = jobContentParsers.find(_.canParse(transformJob.getStreamJob, transformJob.getStreamJobVersion)) - .map(_.parseTo(transformJob.getStreamJob, transformJob.getStreamJobVersion)) + .map(_.parseTo(transformJob.getStreamJob, transformJob.getStreamJobVersion,jobTemplate)) .getOrElse(throw new JobExecuteErrorException(30350, "Not support jobContent " + transformJob.getStreamJobVersion.getJobContent)) } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkCheckpointConfigTransform.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkCheckpointConfigTransform.scala index 4347c285e..1e5aab029 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkCheckpointConfigTransform.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkCheckpointConfigTransform.scala @@ -20,6 +20,7 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConst import java.util import com.webank.wedatasphere.streamis.jobmanager.launcher.job.LaunchJob +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.manager.JobLaunchManager import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.job.state.FlinkCheckpoint import com.webank.wedatasphere.streamis.jobmanager.manager.transform.impl.FlinkCheckpointConfigTransform.CHECKPOINT_PATH_CONFIG_NAME @@ -46,7 +47,7 @@ class FlinkCheckpointConfigTransform extends FlinkConfigTransform with Logging{ case "ON" => val checkpointConfig: util.Map[String, AnyRef] = new util.HashMap[String, AnyRef]() val jobLaunchManager = JobLaunchManager.getJobManager(JobLauncherAutoConfiguration.DEFAULT_JOB_LAUNCH_MANGER) - val checkpointPath = jobLaunchManager.getJobStateManager.getJobStateDir(classOf[FlinkCheckpoint], job.getJobName) + val checkpointPath = jobLaunchManager.getJobStateManager.getJobStateDir(classOf[FlinkCheckpoint], job.getJobName ,produceConfig.getOrDefault(JobConf.HIGHAVAILABLE_POLICY_KEY.getHotValue(),JobConf.HIGHAVAILABLE_DEFAULT_POLICY.getHotValue()).toString) checkpointConfig.put(FlinkConfigTransform.FLINK_CONFIG_PREFIX + CHECKPOINT_PATH_CONFIG_NAME, checkpointPath) info(s"Use the checkpoint dir, ${CHECKPOINT_PATH_CONFIG_NAME} => ${checkpointPath}") produceConfig.asScala.filter(_._1.startsWith(JobConfKeyConstants.CHECKPOINT.getValue)) diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkInternalConfigTransform.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkInternalConfigTransform.scala index 461ce43c3..6ca49d069 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkInternalConfigTransform.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkInternalConfigTransform.scala @@ -1,4 +1,5 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.impl + import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.LaunchJob import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf @@ -35,15 +36,24 @@ object FlinkInternalConfigTransform { /** * Defined in FlinkStreamisConfigDefine.LOG_GATEWAY_ADDRESS of 'flink-streamis-log-collector' */ - private val LOG_GATEWAY_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-gateway", "stream.log.gateway.address").getValue + private val LOG_GATEWAY_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-gateway", "stream.log.gateway.address") /** * Defined in FlinkStreamisConfigDefine.LOG_GATEWAY_ADDRESS of 'flink-streamis-log-collector' */ - private val LOG_COLLECT_PATH_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-collect-path", "stream.log.collect.path").getValue + private val LOG_COLLECT_PATH_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-collect-path", "stream.log.collect.path") + + private val LOG_HEARTBEAT_PATH_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-heartbeat-path", "stream.log.heartbeat.path") + + private val LOG_HEARTBEAT_INTERVAL_CONFIG_NAME = CommonVars("wds.streamis.flink.config.name.log-heartbeat-interval", "stream.log.heartbeat.interval") + + private val LOG_HEARTBEAT_ENABLE_NAME = CommonVars("wds.streamis.flink.config.name.log-heartbeat-enable", "stream.log.heartbeat.enable") - val INTERNAL_CONFIG_MAP = Map(JobConf.STREAMIS_JOB_LOG_GATEWAY.key -> LOG_GATEWAY_CONFIG_NAME, - JobConf.STREAMIS_JOB_LOG_COLLECT_PATH.key -> LOG_COLLECT_PATH_CONFIG_NAME + def INTERNAL_CONFIG_MAP() = Map(JobConf.STREAMIS_JOB_LOG_GATEWAY.key -> LOG_GATEWAY_CONFIG_NAME.getHotValue(), + JobConf.STREAMIS_JOB_LOG_COLLECT_PATH.key -> LOG_COLLECT_PATH_CONFIG_NAME.getHotValue(), + JobConf.STREAMIS_JOB_LOG_HEARTBEAT_PATH.key -> LOG_HEARTBEAT_PATH_CONFIG_NAME.getHotValue(), + JobConf.STREAMIS_JOB_LOG_HEARTBEAT_INTERVAL.key -> LOG_HEARTBEAT_INTERVAL_CONFIG_NAME.getHotValue(), + JobConf.STREAMIS_JOB_LOG_HEARTBEAT_ENABLE.key -> LOG_HEARTBEAT_ENABLE_NAME.getHotValue() ) } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkJarStreamisJobContentTransform.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkJarStreamisJobContentTransform.scala index 3b50a30d2..00592e91f 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkJarStreamisJobContentTransform.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/FlinkJarStreamisJobContentTransform.scala @@ -17,6 +17,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.impl import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.{JobConfKeyConstants, JobConstants} import com.webank.wedatasphere.streamis.jobmanager.launcher.job.LaunchJob +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import java.util import org.apache.linkis.common.utils.JsonUtils @@ -36,8 +37,9 @@ class FlinkJarStreamisJobContentTransform extends StreamisJobContentTransform { override protected def transformJobContent(transformJob: StreamisTransformJobContent): util.HashMap[String, AnyRef] = transformJob match { case transformJobContent: StreamisJarTransformJobContent => val jobContent = new util.HashMap[String, AnyRef] - jobContent.put("flink.app.args", transformJobContent.getArgs.asScala.mkString(" ")) - jobContent.put("flink.app.main.class", transformJobContent.getMainClass) + jobContent.put(JobConf.STMS_FLINK_APPLICATION_ARGS_KEY.getValue, transformJobContent.getArgs.asScala.mkString(JobConf.FLINK_APPLICATION_SEPARATE.getHotValue())) + jobContent.put(JobConf.STMS_FLINK_APPLICATION_SEPARATE_KEY.getValue, JobConf.FLINK_APPLICATION_SEPARATE.getHotValue()) + jobContent.put(JobConf.STMS_FLINK_APPLICATION_MAIN_CLASS_KEY.getValue, transformJobContent.getMainClass) jobContent case _ => null } @@ -75,7 +77,6 @@ class FlinkJarStreamisStartupParamsTransform extends Transform { // clientTpe val prodConfig = streamisTransformJob.getConfigMap.get(JobConfKeyConstants.GROUP_PRODUCE.getValue).asInstanceOf[util.HashMap[String, AnyRef]] startupMap.put(JobConfKeyConstants.MANAGE_MODE_KEY.getValue, prodConfig.getOrDefault(JobConfKeyConstants.MANAGE_MODE_KEY.getValue, JobConstants.MANAGE_MODE_ATTACH)) - val params = if(job.getParams == null) new util.HashMap[String, AnyRef] else job.getParams if (!startupMap.isEmpty) { TaskUtils.addStartupMap(params, JobUtils.filterParameterSpec(startupMap)) diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/LaunchConfigTransform.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/LaunchConfigTransform.scala index dbd5751ac..c988b4b1d 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/LaunchConfigTransform.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/impl/LaunchConfigTransform.scala @@ -15,6 +15,7 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.impl +import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants import com.webank.wedatasphere.streamis.jobmanager.launcher.job.LaunchJob import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf @@ -32,10 +33,13 @@ import org.apache.linkis.DataWorkCloudApplication class LaunchConfigTransform extends Transform { override def transform(streamisTransformJob: StreamisTransformJob, job: LaunchJob): LaunchJob = { + val prodConfig = streamisTransformJob.getConfigMap.get(JobConfKeyConstants.GROUP_PRODUCE.getValue).asInstanceOf[util.HashMap[String, AnyRef]] + val highAvailablePolicy = prodConfig.getOrDefault(JobConf.HIGHAVAILABLE_POLICY_KEY.getHotValue(), JobConf.HIGHAVAILABLE_DEFAULT_POLICY.getHotValue()) val launchConfigs = if(job.getLaunchConfigs != null) job.getLaunchConfigs else new util.HashMap[String, AnyRef] launchConfigs.putIfAbsent(LaunchJob.LAUNCH_CONFIG_CREATE_SERVICE, DataWorkCloudApplication.getServiceInstance.toString) launchConfigs.putIfAbsent(LaunchJob.LAUNCH_CONFIG_DESCRIPTION, streamisTransformJob.getStreamJob.getDescription) launchConfigs.putIfAbsent(LaunchJob.LAUNCH_CONFIG_MAX_SUBMIT_TIME, JobConf.TASK_SUBMIT_TIME_MAX.getValue.toLong.toString) + launchConfigs.putIfAbsent(JobConf.HIGHAVAILABLE_POLICY_KEY.getHotValue(),highAvailablePolicy) LaunchJob.builder().setLaunchJob(job).setLaunchConfigs(launchConfigs).build() } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/AbstractJobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/AbstractJobContentParser.scala index 2c89cb9da..22b454afb 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/AbstractJobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/AbstractJobContentParser.scala @@ -15,15 +15,17 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.parser +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants.{TYPE_JOB, TYPE_PROJECT} + import java.io.InputStream import java.util - import org.apache.linkis.common.conf.Configuration import org.apache.linkis.common.utils.{JsonUtils, Logging} import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion, StreamisFile} -import com.webank.wedatasphere.streamis.jobmanager.manager.service.{BMLService, StreamiFileService} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion, StreamisFile} +import com.webank.wedatasphere.streamis.jobmanager.manager.service.{BMLService, StreamTaskService, StreamiFileService} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.JobContentParser import org.apache.commons.io.IOUtils import org.apache.commons.lang.StringUtils @@ -39,6 +41,7 @@ abstract class AbstractJobContentParser extends JobContentParser with Logging { @Autowired private var streamJobMapper: StreamJobMapper = _ @Autowired private var bmlService: BMLService = _ @Autowired private var streamiFileService: StreamiFileService = _ + @Autowired private var streamTaskService: StreamTaskService = _ private def findFromProject(projectName: String, fileName: String): StreamisFile = fileName match { case AbstractJobContentParser.PROJECT_FILE_REGEX(name, version) => @@ -60,9 +63,19 @@ abstract class AbstractJobContentParser extends JobContentParser with Logging { protected def findFile(job: StreamJob, jobVersion: StreamJobVersion, fileName: String): StreamisFile = { val files = streamJobMapper.getStreamJobVersionFiles(jobVersion.getJobId, jobVersion.getId) - val (file, fileSource) = if(files == null || files.isEmpty) - (findFromProject(job.getProjectName, fileName), "project") - else files.asScala.find(_.getFileName == fileName).map((_, "jobVersion")).getOrElse((findFromProject(job.getProjectName, fileName), "project")) + val (file, fileSource) = if(files == null || files.isEmpty) { + val projFile = findFromProject(job.getProjectName, fileName) + projFile.setMaterialType(TYPE_PROJECT) + (projFile, TYPE_PROJECT) + } else files.asScala.find(_.getFileName == fileName) + .map{ file => file.setMaterialType(TYPE_JOB) + (file, TYPE_JOB) + } + .getOrElse{ + val projFile = findFromProject(job.getProjectName, fileName) + projFile.setMaterialType(TYPE_PROJECT) + (projFile, TYPE_PROJECT) + } info(s"Find a $fileSource file(${file.getFileName}, ${file.getVersion}) with storePath ${file.getStorePath} for StreamJob-${job.getName} with file $fileName.") file } @@ -104,6 +117,10 @@ abstract class AbstractJobContentParser extends JobContentParser with Logging { override def canParse(job: StreamJob, jobVersion: StreamJobVersion): Boolean = jobType == job.getJobType + protected def getFinalTemplate(jobTemplate: JobTemplateFiles): String = { + streamTaskService.generateJobTemplate(jobTemplate) + } + } object AbstractJobContentParser { diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkJarJobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkJarJobContentParser.scala index 67c5cede1..54b4c3b0d 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkJarJobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkJarJobContentParser.scala @@ -16,16 +16,18 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.parser import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException -import java.util -import org.apache.linkis.common.utils.JsonUtils +import java.util +import org.apache.linkis.common.utils.{JsonUtils, Utils} import org.apache.linkis.manager.label.entity.engine.RunType import org.apache.linkis.manager.label.entity.engine.RunType.RunType -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion, StreamisFile} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion, StreamisFile} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisJarTransformJobContent, StreamisTransformJobContent} +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.JobContentUtils import org.apache.commons.lang.StringUtils import org.springframework.stereotype.Component +import java.util.{Map => JavaMap} import scala.collection.JavaConverters._ /** @@ -34,31 +36,34 @@ import scala.collection.JavaConverters._ @Component class FlinkJarJobContentParser extends AbstractJobContentParser { - override def parseTo(job: StreamJob, jobVersion: StreamJobVersion): StreamisTransformJobContent = { + override def parseTo(job: StreamJob, jobVersion: StreamJobVersion,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = { val transformJobContent = new StreamisJarTransformJobContent - val jobContent = JsonUtils.jackson.readValue(jobVersion.getJobContent, classOf[util.Map[String, Object]]) - jobContent.get("main.class.jar") match { + var finalJobContent = JsonUtils.jackson.readValue(jobVersion.getJobContent, classOf[util.Map[String, Object]]) + if (null != jobTemplate){ + finalJobContent = JobContentUtils.getFinalJobContent(jobVersion, jobTemplate.getMetaJson) + } + finalJobContent.get("main.class.jar") match { case mainClassJar: String => val file = dealStreamisFile(job, jobVersion, mainClassJar, "main.class.jar") transformJobContent.setMainClassJar(file) case _ => throw new JobExecuteErrorException(30500, "main.class.jar is needed.") } - jobContent.get("main.class") match { + finalJobContent.get("main.class") match { case mainClass: String => transformJobContent.setMainClass(mainClass) case _ => throw new JobExecuteErrorException(30500, "main.class is needed.") } - jobContent.get("args") match { + finalJobContent.get("args") match { case args: util.List[String] => transformJobContent.setArgs(args) case _ => } - jobContent.get("hdfs.jars") match { + finalJobContent.get("hdfs.jars") match { case hdfsJars: util.List[String] => transformJobContent.setHdfsJars(hdfsJars) case _ => } - jobContent.get("dependency.jars") match { + finalJobContent.get("dependency.jars") match { case dependencyJars: util.List[String] => val parsedDependencyJars = dependencyJars.asScala.filter(StringUtils.isNotBlank).map { dependencyJar => dealStreamisFile(job, jobVersion, dependencyJar, "dependency.jar") @@ -66,7 +71,7 @@ class FlinkJarJobContentParser extends AbstractJobContentParser { transformJobContent.setDependencyJars(parsedDependencyJars) case _ => } - jobContent.get("resources") match { + finalJobContent.get("resources") match { case resources: util.List[String] => val parsedResources = resources.asScala.filter(StringUtils.isNotBlank).map { resource => dealStreamisFile(job, jobVersion, resource, "resources") @@ -74,6 +79,22 @@ class FlinkJarJobContentParser extends AbstractJobContentParser { transformJobContent.setResources(parsedResources) case _ => } + val jobTemplateMapOption: Option[JobTemplateFiles] = Option(jobTemplate) + jobTemplateMapOption match { + case Some(jobTemplate) => + val jobFinalTemplateJson = getFinalTemplate(jobTemplate) + jobTemplate.setMetaJson(jobFinalTemplateJson) + transformJobContent.setJobTemplate(jobTemplate) + case None => + logger.warn("job template is null") + } + val sourceOption: Option[String] = Option(jobVersion.getSource) + sourceOption match { + case Some(source) => + transformJobContent.setSource(source) + case None => + logger.warn("this job source is null") + } transformJobContent } diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkSQLJobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkSQLJobContentParser.scala index b8d07987e..efa076c66 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkSQLJobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkSQLJobContentParser.scala @@ -16,12 +16,12 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.parser import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException -import java.util +import java.util import org.apache.linkis.common.utils.JsonUtils import org.apache.linkis.manager.label.entity.engine.RunType import org.apache.linkis.manager.label.entity.engine.RunType.RunType -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisSqlTransformJobContent, StreamisTransformJobContent} import org.springframework.stereotype.Component @@ -31,7 +31,7 @@ import org.springframework.stereotype.Component @Component class FlinkSQLJobContentParser extends AbstractJobContentParser { - override def parseTo(job: StreamJob, jobVersion: StreamJobVersion): StreamisTransformJobContent = { + override def parseTo(job: StreamJob, jobVersion: StreamJobVersion,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = { val jobContent = JsonUtils.jackson.readValue(jobVersion.getJobContent, classOf[util.Map[String, Object]]) val transformJobContent = new StreamisSqlTransformJobContent val sql = jobContent.get("type") match { diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkWorkflowJobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkWorkflowJobContentParser.scala index 933ad90b9..e57d36e08 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkWorkflowJobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/FlinkWorkflowJobContentParser.scala @@ -16,9 +16,8 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.parser import java.util - import org.apache.linkis.common.utils.JsonUtils -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisSqlTransformJobContent, StreamisTransformJobContent, StreamisWorkflowTransformJobContent} import org.springframework.stereotype.Component @@ -28,7 +27,7 @@ import org.springframework.stereotype.Component @Component class FlinkWorkflowJobContentParser extends FlinkSQLJobContentParser { - override def parseTo(job: StreamJob, jobVersion: StreamJobVersion): StreamisTransformJobContent = super.parseTo(job, jobVersion) match { + override def parseTo(job: StreamJob, jobVersion: StreamJobVersion,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = super.parseTo(job, jobVersion,jobTemplate) match { case transformJobContent: StreamisSqlTransformJobContent => val workflowJobContent = new StreamisWorkflowTransformJobContent val jobContent = JsonUtils.jackson.readValue(jobVersion.getJobContent, classOf[util.Map[String, Object]]) diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/SparkJarJobContentParser.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/SparkJarJobContentParser.scala index 90e124c36..6ecc13df1 100644 --- a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/SparkJarJobContentParser.scala +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/transform/parser/SparkJarJobContentParser.scala @@ -1,9 +1,9 @@ package com.webank.wedatasphere.streamis.jobmanager.manager.transform.parser import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException -import java.util -import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{StreamJob, StreamJobVersion, StreamJobVersionFiles, StreamisFile} +import java.util +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.{JobTemplateFiles, StreamJob, StreamJobVersion, StreamJobVersionFiles, StreamisFile} import com.webank.wedatasphere.streamis.jobmanager.manager.transform.entity.{StreamisJarTransformJobContent, StreamisTransformJobContent} import org.apache.commons.lang.StringUtils import org.apache.linkis.common.utils.JsonUtils @@ -25,7 +25,7 @@ class SparkJarJobContentParser extends AbstractJobContentParser { override val jobType: String = "spark.jar" override val runType: RunType = RunType.JAR - override def parseTo(job: StreamJob, jobVersion: StreamJobVersion): StreamisTransformJobContent = { + override def parseTo(job: StreamJob, jobVersion: StreamJobVersion,jobTemplate: JobTemplateFiles): StreamisTransformJobContent = { val createFile: String => StreamisFile = fileName => { val file = new StreamJobVersionFiles() file.setFileName(fileName) diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/JobContentUtils.scala b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/JobContentUtils.scala new file mode 100644 index 000000000..326936d32 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/JobContentUtils.scala @@ -0,0 +1,89 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.utils + +import com.google.gson.{GsonBuilder, JsonElement, JsonPrimitive, JsonSerializationContext, JsonSerializer} +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJobVersion +import org.apache.commons.lang.StringUtils +import org.apache.linkis.common.utils.JsonUtils + +import java.lang.reflect.Type +import java.{lang, util} +import java.util.{Map => JavaMap} + +object JobContentUtils { + + def isAnyVal[T](x: T)(implicit m: Manifest[T]) = m <:< manifest[AnyVal] + + def getFinalJobContent(jobVersion: StreamJobVersion,jobTemplate: String): JavaMap[String, Object] ={ + val jobContent = JsonUtils.jackson.readValue(jobVersion.getJobContent, classOf[util.Map[String, Object]]) + if (StringUtils.isNotBlank(jobTemplate)){ + val metaJsonTemplate = JsonUtils.jackson.readValue(jobTemplate, classOf[util.Map[String, Object]]) + val jobContentTemplate = metaJsonTemplate.get("jobContent").asInstanceOf[JavaMap[String, Object]] + val finalJobContent: JavaMap[String, Object] = new java.util.HashMap[String, Object](jobContentTemplate) + MergeUtils.merge(finalJobContent,jobContent) + finalJobContent + }else{ + jobContent + } + } + + def getFinalJobContent(jobContent: String,jobTemplate: String): JavaMap[String, Object] ={ + val jobContentMap = JsonUtils.jackson.readValue(jobContent, classOf[util.Map[String, Object]]) + if (StringUtils.isNotBlank(jobTemplate)){ + val metaJsonTemplate = JsonUtils.jackson.readValue(jobTemplate, classOf[util.Map[String, Object]]) +// val jobContentTemplate = metaJsonTemplate.get("jobContent").asInstanceOf[JavaMap[String, Object]] + val finalJobContent: JavaMap[String, Object] = new java.util.HashMap[String, Object](metaJsonTemplate) + MergeUtils.merge(finalJobContent,jobContentMap) + finalJobContent + }else{ + jobContentMap + } + } + + def getJobTemplateContent(jobTemplate: String): String ={ + val metaJsonTemplate = JsonUtils.jackson.readValue(jobTemplate, classOf[util.Map[String, Object]]) + val jobContentTemplate = metaJsonTemplate.get("jobContent").asInstanceOf[JavaMap[String, Object]] + JobContentUtils.gson.toJson(jobContentTemplate) + } + + def getJobTemplateConfig(jobTemplate: String): String = { + val metaJsonTemplate = JsonUtils.jackson.readValue(jobTemplate, classOf[util.Map[String, Object]]) + val jobConfigTemplate = metaJsonTemplate.get("jobConfig").asInstanceOf[JavaMap[String, Object]] + JobContentUtils.gson.toJson(jobConfigTemplate) + } + + def getFinalJobConfig(jobConfigMap: JavaMap[String, Object], jobTemplate: String): JavaMap[String, Object] = { +// val jobConfigMap = JsonUtils.jackson.readValue(jobConfig, classOf[util.Map[String, Object]]) + if (StringUtils.isNotBlank(jobTemplate)) { + val metaJsonTemplate = JsonUtils.jackson.readValue(jobTemplate, classOf[util.Map[String, Object]]) +// val jobConfigTemplate = metaJsonTemplate.get("jobContent").asInstanceOf[JavaMap[String, Object]] + val finalJobConfig: JavaMap[String, Object] = new java.util.HashMap[String, Object](metaJsonTemplate) + MergeUtils.merge(finalJobConfig,jobConfigMap) + finalJobConfig + } else { + jobConfigMap + } + } + + val gson = new GsonBuilder() + .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") + .serializeNulls + .registerTypeAdapter( + classOf[java.lang.Double], + new JsonSerializer[java.lang.Double] { + + override def serialize( + t: lang.Double, + `type`: Type, + jsonSerializationContext: JsonSerializationContext + ): JsonElement = + if (t == t.longValue()) new JsonPrimitive(t.longValue()) else new JsonPrimitive(t) + + } + ) + .create + + def getMap(json: String): JavaMap[String, Object] = { + val map = JsonUtils.jackson.readValue(json, classOf[util.Map[String, Object]]) + map + } +} diff --git a/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/MergeUtils.java b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/MergeUtils.java new file mode 100644 index 000000000..75b1e1e90 --- /dev/null +++ b/streamis-jobmanager/streamis-job-manager/streamis-job-manager-service/src/main/scala/com/webank/wedatasphere/streamis/jobmanager/manager/utils/MergeUtils.java @@ -0,0 +1,44 @@ +package com.webank.wedatasphere.streamis.jobmanager.manager.utils; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import org.apache.commons.lang3.StringUtils; + +import java.util.Map; +import java.util.Stack; + +public class MergeUtils { + public static void merge(Map destination, Map source) { + Stack> stackDest = new Stack<>(); + Stack> stackSrc = new Stack<>(); + + stackDest.push(destination); + stackSrc.push(source); + + while (!stackSrc.isEmpty()) { + Map currentDest = stackDest.pop(); + Map currentSrc = stackSrc.pop(); + + for (String key : currentSrc.keySet()) { + Object srcValue = currentSrc.get(key); + if (currentDest.containsKey(key) && currentDest.get(key) instanceof Map && srcValue instanceof Map) { + stackDest.push((Map) currentDest.get(key)); + stackSrc.push((Map) srcValue); + } else { + // 如果不是两个Map,或键在目标中不存在,直接设置或覆盖 + currentDest.put(key, srcValue); + } + } + } + } + public static Map getJobTemplateConfMap(String jobTemplate){ + Map jobTemplateConfig = null; + if(StringUtils.isNotBlank(jobTemplate)){ + Map jobTemplateMap = JobContentUtils.getMap(jobTemplate); + if (jobTemplateMap.containsKey("jobConfig") && jobTemplateMap.get("jobConfig") instanceof Map) { + jobTemplateConfig = (Map) jobTemplateMap.get("jobConfig"); + } + } + return jobTemplateConfig; + } + +} \ No newline at end of file diff --git a/streamis-jobmanager/streamis-jobmanager-common/pom.xml b/streamis-jobmanager/streamis-jobmanager-common/pom.xml index cff25ea00..1a41d16cd 100644 --- a/streamis-jobmanager/streamis-jobmanager-common/pom.xml +++ b/streamis-jobmanager/streamis-jobmanager-common/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-jobmanager/streamis-jobmanager-server/pom.xml b/streamis-jobmanager/streamis-jobmanager-server/pom.xml index 078f77ee1..242a1ff31 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/pom.xml +++ b/streamis-jobmanager/streamis-jobmanager-server/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -31,10 +31,15 @@ org.apache.linkis linkis-module + + com.webank.wedatasphere.streamis + streamis-job-audit-log + ${streamis.version} + com.webank.wedatasphere.streamis streamis-job-launcher-service - ${jobmanager.version} + ${streamis.version} org.apache.linkis @@ -45,7 +50,7 @@ com.webank.wedatasphere.streamis streamis-job-manager-service - ${jobmanager.version} + ${streamis.version} org.apache.linkis @@ -136,6 +141,9 @@ **/*.xml **/*.yml + + **/*.yml + diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/assembly/distribution.xml b/streamis-jobmanager/streamis-jobmanager-server/src/main/assembly/distribution.xml index 9a69ed9a9..caf3ac334 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/assembly/distribution.xml +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/assembly/distribution.xml @@ -38,7 +38,7 @@ - + ${basedir}/bin diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/HighAvailableRestfulApi.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/HighAvailableRestfulApi.java new file mode 100644 index 000000000..43941d9e2 --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/HighAvailableRestfulApi.java @@ -0,0 +1,61 @@ +package com.webank.wedatasphere.streamis.jobmanager.restful.api; + + +import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; +import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; +import com.webank.wedatasphere.streamis.jobmanager.service.HighAvailableService; +import com.webank.wedatasphere.streamis.jobmanager.vo.HighAvailableMsg; +import org.apache.commons.lang.StringUtils; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.utils.ModuleUserUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Optional; + +@RequestMapping(path = "/streamis/streamJobManager/highAvailable") +@RestController +public class HighAvailableRestfulApi { + private static final Logger LOG = LoggerFactory.getLogger(JobBulkRestfulApi.class); + @Autowired + private StreamJobService streamJobService; + @Resource + private ProjectPrivilegeService privilegeService; + @Autowired + private StreamJobConfService streamJobConfService; + @Autowired + private HighAvailableService highAvailableService; + + @RequestMapping(path = "/getHAMsg", method = RequestMethod.GET) + public Message getClusterMsg(HttpServletRequest request){ + Message result = Message.ok("success"); + String userName = ModuleUserUtils.getOperationUser(request, "get cluster msg"); + if (StringUtils.isBlank(userName)) return Message.error("current user has no permission"); + HighAvailableMsg msg = highAvailableService.getHighAvailableMsg(); + result.data("clusterName",msg.getClusterName()); + result.data("clusterIp",msg.getNodeIp()); + result.data("whetherManager",msg.getWhetherManager()); + return result; + } + + @RequestMapping(path = "/username", method = RequestMethod.GET) + public Message getUserName(HttpServletRequest request){ + Message result = Message.ok("success"); + String userName = ModuleUserUtils.getOperationUser(request, "get user name"); + if (StringUtils.isBlank(userName)) return Message.error("current user has no permission"); + result.data("userName",userName); + return result; + } +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobBulkRestfulApi.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobBulkRestfulApi.java index 4a9ddaa87..f19575bff 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobBulkRestfulApi.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobBulkRestfulApi.java @@ -1,12 +1,17 @@ package com.webank.wedatasphere.streamis.jobmanager.restful.api; +import com.webank.wedatasphere.streamis.jobmanager.launcher.conf.JobConfKeyConstants; +import com.webank.wedatasphere.streamis.jobmanager.launcher.linkis.conf.JobLauncherConfiguration; +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJob; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.ExecResultVo; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.JobHighAvailableVo; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.PauseResultVo; import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobExecuteErrorException; import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamTaskService; +import com.webank.wedatasphere.streamis.jobmanager.service.HighAvailableService; import com.webank.wedatasphere.streamis.jobmanager.vo.BaseBulkRequest; import com.webank.wedatasphere.streamis.jobmanager.vo.BulkResponse; import com.webank.wedatasphere.streamis.jobmanager.vo.JobBulkPauseRequest; @@ -17,6 +22,7 @@ import org.apache.linkis.server.utils.ModuleUserUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -28,6 +34,7 @@ import java.util.Collections; import java.util.List; + @RequestMapping(path = "/streamis/streamJobManager/job/bulk") @RestController public class JobBulkRestfulApi { @@ -46,6 +53,11 @@ public class JobBulkRestfulApi { @Resource private StreamJobService streamjobService; + @Autowired + private StreamJobConfService streamJobConfService; + + @Autowired + private HighAvailableService highAvailableService; /** * Bulk execution * @param execBulkRequest bulk request @@ -72,6 +84,21 @@ public Message bulkExecution(@RequestBody JobBulkRequest execBulkRequest, HttpSe !this.privilegeService.hasEditPrivilege(request, streamJob.getProjectName())){ throw new JobExecuteErrorException(-1, "Have no permission to execute StreamJob [" + jobId + "]"); } + String managementMode = this.streamJobConfService.getJobConfValue(Long.parseLong(jobId.toString()), JobConfKeyConstants.MANAGE_MODE_KEY().getValue()); + if (!Boolean.parseBoolean(JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE().getHotValue().toString()) && + managementMode.equals("detach")){ + return Message.error("The system does not enable the detach feature ,detach job cannot start [" + jobId + "]"); + } + JobHighAvailableVo inspectVo = highAvailableService.getJobHighAvailableVo(Long.parseLong(jobId.toString())); + if (!inspectVo.isHighAvailable()){ + return Message.error("The master and backup cluster materials do not match, please check the material"); + } + if (!streamjobService.getEnableStatus(Long.parseLong(jobId.toString()))){ + return Message.error("current Job " + streamJob.getName() + "has been banned, cannot start,please enable job" ); + } + if(!highAvailableService.canBeStarted(Long.parseLong(jobId.toString()))){ + return Message.error("current Job " + streamJob.getName() + " is in managerSlave mode,please check whether it runs on manager cluster" ); + } } // TODO Enable to accept 'restore' parameter from request execResults = streamTaskService.bulkExecute(new ArrayList<>(execBulkRequest.getBulkSubject()), Collections.emptyList(), username); @@ -126,12 +153,15 @@ public Message bulkPause(@RequestBody JobBulkPauseRequest pauseRequest, HttpServ !this.privilegeService.hasEditPrivilege(request, streamJob.getProjectName())){ throw new JobExecuteErrorException(-1, "Have no permission to execute StreamJob [" + jobId + "]"); } + if (!streamjobService.getEnableStatus(Long.parseLong(jobId.toString()))){ + return Message.error("current Job " + streamJob.getName() + "has been banned, cannot stop,please enable job" ); + } } pauseResults = streamTaskService.bulkPause(new ArrayList<>(pauseRequest.getBulkSubject()), - Collections.emptyList(), username, pauseRequest.isSnapshot()); + Collections.emptyList(), username, pauseRequest.isSnapshot(), pauseRequest.isSkipHookError()); } else { pauseResults = streamTaskService.bulkPause(Collections.emptyList(), - new ArrayList<>(pauseRequest.getBulkSubject()), username, pauseRequest.isSnapshot()); + new ArrayList<>(pauseRequest.getBulkSubject()), username, pauseRequest.isSnapshot(), pauseRequest.isSkipHookError()); } // Convert to bulk response BulkResponse response = new BulkResponse<>(pauseResult -> { diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfExtRestfulApi.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfExtRestfulApi.java index 6e3c52f7e..577d7a546 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfExtRestfulApi.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfExtRestfulApi.java @@ -17,7 +17,6 @@ import com.webank.wedatasphere.streamis.jobmanager.manager.util.CookieUtils; import com.webank.wedatasphere.streamis.jobmanager.service.UserService; -import com.webank.wedatasphere.streamis.jobmanager.utils.RegularUtil; import org.apache.commons.lang.StringUtils; import org.apache.linkis.server.Message; import org.apache.linkis.server.utils.ModuleUserUtils; @@ -46,7 +45,8 @@ public Message getWorkspaceUsers(HttpServletRequest req) { //获取工作空间 List userList = new ArrayList<>(); String workspaceId = CookieUtils.getCookieWorkspaceId(req); - if (RegularUtil.matches(workspaceId)) { + if (StringUtils.isNotBlank(workspaceId)) { + userList.addAll(userService.workspaceUserQuery(req, workspaceId)); } else { LOG.warn("Cannot find the workspaceID from DSS,perhaps the cookie value has been lost in request from: {}", req.getLocalAddr()); diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfRestfulApi.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfRestfulApi.java index 516904b64..1c20c976b 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfRestfulApi.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/JobConfRestfulApi.java @@ -25,6 +25,9 @@ import com.webank.wedatasphere.streamis.jobmanager.launcher.job.exception.JobErrorException; import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.JobContentUtils; +import com.webank.wedatasphere.streamis.jobmanager.utils.RegularUtil; +import org.apache.commons.lang3.StringUtils; import org.apache.linkis.httpclient.dws.DWSHttpClient; import org.apache.linkis.server.Message; import org.apache.linkis.server.utils.ModuleUserUtils; @@ -105,12 +108,17 @@ public Message queryConfig(@PathVariable("jobId") Long jobId, HttpServletRequest try { String userName = ModuleUserUtils.getOperationUser(request, "query job config json"); StreamJob streamJob = this.streamJobService.getJobById(jobId); - if (!streamJobService.hasPermission(streamJob, userName) && !this.privilegeService.hasAccessPrivilege(request, streamJob.getProjectName())) { return Message.error("Have no permission to get Job details of StreamJob [" + jobId + "]"); } - result.setData(new HashMap<>(this.streamJobConfService.getJobConfig(jobId))); + Map jobTemplateConfig = this.streamJobService.getJobTemplateConfMap(streamJob); + HashMap jobConfigMap = new HashMap<>(streamJobConfService.getJobConfig(jobId)); + if (jobTemplateConfig != null) { + jobConfigMap.put("template", jobTemplateConfig); + } + result.setData(jobConfigMap); + result.data("editEnable",JobConf.JOB_CONFIG_EDIT_ENABLE().getHotValue()); } catch (Exception e) { String message = "Fail to view StreamJob configuration(查看任务配置失败), message: " + e.getMessage(); LOG.warn(message, e); @@ -131,6 +139,23 @@ public Message queryConfig(@PathVariable("jobId") Long jobId, HttpServletRequest public Message saveConfig(@PathVariable("jobId") Long jobId, @RequestBody Map configContent, HttpServletRequest request) { Message result = Message.ok("success"); + if (!(Boolean) JobConf.JOB_CONFIG_EDIT_ENABLE().getHotValue()){ + return Message.error("job config cannot be changed,please contact the admin for advice"); + } + if((Boolean) JobConf.PRODUCT_NAME_SWITCH().getHotValue()){ + try { + String productValue = Optional.ofNullable(configContent) + .map(jovConf -> (Map) jovConf.get("wds.linkis.flink.produce")) + .map(produce -> (String) produce.get(JobConf.PRODUCT_NAME_KEY().getHotValue())) + .orElse(null); // 如果任何一步失败,返回null + if (StringUtils.isNotBlank(productValue) && !RegularUtil.matchesProductName(productValue)){ + return Message.error("The product name of the job is not configured correctly, please check"); + } + } catch (ClassCastException e) { + String message = "Error,Invalid configuration format"; + LOG.warn(message, e); + } + } try { String userName = ModuleUserUtils.getOperationUser(request, "save job config json"); StreamJob streamJob = this.streamJobService.getJobById(jobId); @@ -140,6 +165,9 @@ public Message saveConfig(@PathVariable("jobId") Long jobId, @RequestBody Map jobLaunchManager; @@ -92,11 +98,16 @@ public Message getJobList(HttpServletRequest req, @RequestParam(value = "jobName", required = false) String jobName, @RequestParam(value = "jobStatus", required = false) Integer jobStatus, @RequestParam(value = "jobCreator", required = false) String jobCreator, - @RequestParam(value = "label", required = false) String label) { + @RequestParam(value = "label", required = false) String label, + @RequestParam(value = "enable", required = false) Boolean enable, + @RequestParam(value = "jobType", required = false) String jobType) { String username = ModuleUserUtils.getOperationUser(req, "list jobs"); if(StringUtils.isBlank(projectName)){ return Message.error("Project name cannot be empty(项目名不能为空,请指定)"); } + if (StringUtils.isNotBlank(jobName) && !RegularUtil.matchesJobName(jobName)) { + return Message.error("查询仅支持大小写字母、数字、下划线、小数点、逗号,且长度小于2000[" + jobName + "]"); + } if (Objects.isNull(pageNow)) { pageNow = 1; } @@ -106,7 +117,7 @@ public Message getJobList(HttpServletRequest req, PageInfo pageInfo; PageHelper.startPage(pageNow, pageSize); try { - pageInfo = streamJobService.getByProList(projectName, username, jobName, jobStatus, jobCreator,label); + pageInfo = streamJobService.getByProList(projectName, username, jobName, jobStatus, jobCreator, label, enable,jobType); } finally { PageHelper.clearPage(); } @@ -114,6 +125,14 @@ public Message getJobList(HttpServletRequest req, return Message.ok().data("tasks", pageInfo.getList()).data("totalPage", pageInfo.getTotal()); } + @RequestMapping(path = "/jobInfo", method = RequestMethod.GET) + public Message getJobList(HttpServletRequest req, + @RequestParam(value = "jobId", required = false) Integer jobId){ + String username = ModuleUserUtils.getOperationUser(req, "jobInfo"); + StreamJob streamJob = streamJobService.getJobById(jobId); + return Message.ok().data("jobInfo",streamJob); + } + @RequestMapping(path = "/createOrUpdate", method = RequestMethod.POST) public Message createOrUpdate(HttpServletRequest req, @Validated @RequestBody MetaJsonInfo metaJsonInfo) { String username = ModuleUserUtils.getOperationUser(req, "create or update job"); @@ -142,6 +161,9 @@ public Message updateLabel(HttpServletRequest req, @RequestBody BulkUpdateLabelR !this.privilegeService.hasEditPrivilege(req, streamJob.getProjectName())) { return Message.error("Have no permission to save StreamJob [" + jobId + "] configuration"); } + if (!streamJobService.getEnableStatus(jobId)){ + return Message.error("current Job " + streamJob.getName() + "has been banned, cannot updateLable,please enable job" ); + } String label = bulkUpdateLabel.getLabel(); if (!RegularUtil.matches(label)) return Message.error("Fail to save StreamJob label(保存/更新标签失败), message: " + "仅支持大小写字母、数字、下划线、小数点、逗号且长度小于64位 [" + jobId + "] "); @@ -210,6 +232,84 @@ public Message version(HttpServletRequest req, @RequestParam(value = "jobId", re return Message.ok().data("detail", versionDetailVO); } + @RequestMapping(path = "/ban", method = RequestMethod.POST) + public Message banJob(HttpServletRequest req, @RequestBody List jobIdList) { + String userName = ModuleUserUtils.getOperationUser(req, "ban job"); + Message result = Message.ok("success"); + + HashMap jobMap = new HashMap<>(); + if (jobIdList.size() > 100){ + return Message.error("The number of the jobs has exceeded 100, please check!"); + } + if (jobIdList.isEmpty()){ + return Message.error("there is no job to be banned, please check"); + } + try { + for (Long jobId : jobIdList) { + LOG.info("{} try to ban job {}.",userName,jobId); + StreamJob streamJob = this.streamJobService.getJobById(jobId); + jobMap.put(jobId,streamJob); + if (streamJob == null) { + return Message.error("not exists job " + jobId); + } + if (!streamJobService.isCreator(jobId, userName) && + !this.privilegeService.hasEditPrivilege(req, streamJob.getProjectName())) { + return Message.error("Have no permission to ban StreamJob [" + jobId + "] configuration"); + } + if (!streamJobService.canBeDisabled(jobId)){ + return Message.error("current job [" + jobId + "] can not be banned, please check"); + } + } + for (Long jobId : jobIdList) { + streamJobService.disableJob(jobMap.get(jobId)); + } + } catch(Exception e) { + String message = "Fail to ban StreamJob, message: " + e.getMessage(); + LOG.warn(message, e); + result = Message.error(message); + } + return result; + } + + @RequestMapping(path = "/enable", method = RequestMethod.POST) + public Message enableJob(HttpServletRequest req, @RequestBody List jobIdList) { + String userName = ModuleUserUtils.getOperationUser(req, "ban job"); + Message result = Message.ok("success"); + + HashMap jobMap = new HashMap<>(); + if (jobIdList.size() > 100){ + return Message.error("The number of the jobs has exceeded 100, please check!"); + } + if (jobIdList.isEmpty()){ + return Message.error("there is no job to be activated, please check"); + } + + try { + for (Long jobId : jobIdList) { + LOG.info("{} try to activate job {}.",userName,jobId); + StreamJob streamJob = this.streamJobService.getJobById(jobId); + jobMap.put(jobId,streamJob); + if (streamJob == null) { + return Message.error("not exists job " + jobId); + } + if (!streamJobService.isCreator(jobId, userName) && + !this.privilegeService.hasEditPrivilege(req, streamJob.getProjectName())) { + return Message.error("Have no permission to ban StreamJob [" + jobId + "] configuration"); + } + if (!streamJobService.canbeActivated(jobId)){ + return Message.error("current job [" + jobId + "] can not be activated, please check"); + } + } + for (Long jobId : jobIdList) { + streamJobService.activateJob(jobMap.get(jobId)); + } + } catch (Exception e) { + String message = "Fail to activate StreamJob, message: " + e.getMessage(); + LOG.warn(message, e); + result = Message.error(message); + } + return result; + } /** * Inspect the execution * @param req request @@ -230,6 +330,15 @@ public Message executeInspect(HttpServletRequest req, @RequestParam(value = "job return Message.error("Have no permission to inspect the StreamJob [" + jobId + "]"); } + String managementMode = Optional.ofNullable(this.streamJobConfService.getJobConfValue(jobId, JobConfKeyConstants.MANAGE_MODE_KEY().getValue())) + .orElse(JobConstants.MANAGE_MODE_DETACH()); + if (!Boolean.parseBoolean(JobLauncherConfiguration.ENABLE_FLINK_MANAGER_EC_ENABLE().getHotValue().toString()) && + managementMode.equals(JobConstants.MANAGE_MODE_DETACH())){ + return Message.error("The system does not enable the detach feature ,detach job cannot start [" + jobId + "]"); + } + if (!streamJobService.getEnableStatus(jobId)){ + return Message.error("current Job " + streamJob.getName() + "has been banned, cannot start,please enable job" ); + } try { HashMap jobConfig = new HashMap<>(this.streamJobConfService.getJobConfig(jobId)); HashMap flinkProduce = (HashMap) jobConfig.get(JobConfKeyConstants.GROUP_PRODUCE().getValue()); @@ -264,10 +373,11 @@ public Message executeInspect(HttpServletRequest req, @RequestParam(value = "job List inspections = new ArrayList<>(); try { inspectResult = this.streamJobInspectService - .inspect(jobId, new JobInspectVo.Types[]{JobInspectVo.Types.VERSION, JobInspectVo.Types.SNAPSHOT, JobInspectVo.Types.LIST}); + .inspect(jobId, new JobInspectVo.Types[]{JobInspectVo.Types.VERSION, JobInspectVo.Types.SNAPSHOT, JobInspectVo.Types.LIST,JobInspectVo.Types.HIGHAVAILABLE}); inspections = inspectResult.stream().map(JobInspectVo::getInspectName) .collect(Collectors.toList()); } catch (Exception e){ + LOG.warn(e.getMessage()); return Message.error("Fail to inspect job " + jobId + " of the execution(任务执行前检查失败), message: " + e.getMessage()); } @@ -309,6 +419,27 @@ public Message executeJob(HttpServletRequest req, @RequestBody Map details = streamTaskService.queryHistory(jobId, version); + if (Objects.isNull(pageNow)) { + pageNow = 1; + } + if (Objects.isNull(pageSize)) { + pageSize = 20; + } + StreamTaskPageInfo pageInfo = streamTaskService.queryHistory(jobId, version,pageNow,pageSize); + return Message.ok().data("details", pageInfo.getStreamTaskList()).data("totalPage", pageInfo.getTotal()); + } + + @RequestMapping(path = "/execute/errorMsg", method = RequestMethod.GET) + public Message executeJobErrorMsg(HttpServletRequest req, + @RequestParam(value = "jobId", required = false) Long jobId) throws JobException { + String username = ModuleUserUtils.getOperationUser(req, "view the job history"); + if (jobId == null) { + throw JobExceptionManager.createException(30301, "jobId"); + } + StreamJob streamJob = this.streamJobService.getJobById(jobId); + if (!streamJobService.hasPermission(streamJob, username) && + !this.privilegeService.hasAccessPrivilege(req, streamJob.getProjectName())){ + return Message.error("Have no permission to get Job details of StreamJob [" + jobId + "]"); + } + StreamTask details = streamTaskService.queryErrorCode(jobId); return Message.ok().data("details", details); } @@ -396,7 +555,7 @@ private Message withStreamJob(HttpServletRequest req, String projectName, } else if(StringUtils.isBlank(jobName)) { return Message.error("jobName cannot be empty!"); } - List streamJobs = streamJobService.getByProList(projectName, username, jobName, null, null,null).getList(); + List streamJobs = streamJobService.getByProList(projectName, username, jobName, null, null,null, null,null).getList(); if(CollectionUtils.isEmpty(streamJobs)) { return Message.error("Not exits Streamis job " + jobName); } else if(streamJobs.size() > 1) { @@ -435,7 +594,7 @@ public Message addTask(HttpServletRequest req, if(streamTask == null || StringUtils.isBlank(streamTask.getLinkisJobInfo())) { // 这里取个巧,从该工程该用户有权限的Job中找到一个Flink的历史作业,作为这个Spark Streaming作业的jobId和jobInfo // 替换掉JobInfo中的 yarn 信息,这样我们前端就可以在不修改任何逻辑的情况下正常展示Spark Streaming作业了 - PageInfo jobList = streamJobService.getByProList(streamJob.getProjectName(), username, null, null, null,null); + PageInfo jobList = streamJobService.getByProList(streamJob.getProjectName(), username, null, null, null,null,null,null); List copyJobs = jobList.getList().stream().filter(job -> !job.getJobType().startsWith("spark.")) .collect(Collectors.toList()); if(copyJobs.isEmpty()) { @@ -604,14 +763,66 @@ public Message uploadDetailsJob(HttpServletRequest req, @RequestParam(value = "j return Message.error("Have no permission to view job details of StreamJob [" + jobId + "]"); } StreamisTransformJobContent jobContent = streamJobService.getJobContent(jobId, version); - return Message.ok().data("jobContent", jobContent); + return Message.ok().data("jobContent", jobContent).data("editEnable",JobConf.JOB_CONTENT_EDIT_ENABLE().getHotValue()); + } + + @RequestMapping(path = "/updateContent", method = RequestMethod.POST) + public Message updateContent(HttpServletRequest req, @RequestBody UpdateContentRequest contentRequest) { + String username = ModuleUserUtils.getOperationUser(req, "update job content"); + Long jobId = contentRequest.getJobId(); + String version = contentRequest.getVersion(); + StreamJob streamJob = this.streamJobService.getJobById(jobId); + if (!streamJobService.hasPermission(streamJob, username) && + !this.privilegeService.hasEditPrivilege(req, streamJob.getProjectName())) { + return Message.error("Have no permission to update job details of StreamJob [" + jobId + "]"); + } + if (!streamJobService.getEnableStatus(jobId)){ + return Message.error("current Job " + streamJob.getName() + "has been banned, cannot update,please enable job" ); + } + List args = contentRequest.getArgs(); + if (args == null){ + boolean isHighAvailable = contentRequest.isHighAvailable(); + String highAvailableMessage = contentRequest.getHighAvailableMessage(); + StreamisTransformJobContent jobContent = streamJobService.updateArgs(jobId, version,null,isHighAvailable,highAvailableMessage); + return Message.ok().data("jobContent", jobContent); + } else { + if (!(Boolean) JobConf.JOB_CONTENT_EDIT_ENABLE().getHotValue()){ + return Message.error("job args cannot be changed,please contact the admin for advice"); + } + int hotValue = Integer.parseInt(JobConf.DEFAULT_ARGS_LENGTH().getHotValue().toString()); + if (args.toString().length() > hotValue ){ + return Message.error("args length is too long, please less than "+ hotValue); + } + StreamisTransformJobContent jobContent = streamJobService.updateArgs(jobId, version,args,false,null); + return Message.ok().data("jobContent", jobContent); + } } @RequestMapping(path = "/alert", method = RequestMethod.GET) - public Message getAlert(HttpServletRequest req, @RequestParam(value = "jobId", required = false) Long jobId, + public Message getAlert(HttpServletRequest req, + @RequestParam(value = "pageNow", required = false) Integer pageNow, + @RequestParam(value = "pageSize", required = false) Integer pageSize, + @RequestParam(value = "jobId", required = false) Long jobId, @RequestParam(value = "version", required = false) String version) { String username = ModuleUserUtils.getOperationUser(req, "get alert message list"); - return Message.ok().data("list", streamJobService.getAlert(username, jobId, version)); + StreamJobVersion jobVersion = streamJobService.getJobVersionById(username, jobId, version); + if (jobVersion == null) { + return Message.error("not job version"); + } + if (Objects.isNull(pageNow)) { + pageNow = 1; + } + if (Objects.isNull(pageSize)) { + pageSize = 20; + } + PageInfo pageInfo; + PageHelper.startPage(pageNow, pageSize); + try { + pageInfo = streamJobService.getAlertByProList(username, jobId, jobVersion.getId()); + } finally { + PageHelper.clearPage(); + } + return Message.ok().data("list",pageInfo.getList()).data("totalPage", pageInfo.getTotal()); } @RequestMapping(path = "/logs", method = RequestMethod.GET) @@ -647,7 +858,8 @@ public Message getLog(HttpServletRequest req, payload.setOnlyKeywords(onlyKeywords); payload.setLogType(logType); payload.setPageSize(pageSize); - return Message.ok().data("logs", streamTaskService.getRealtimeLog(jobId, null != taskId? taskId : 0L, username, payload)); + RealtimeLogEntity realtimeLog = streamTaskService.getRealtimeLog(jobId, null != taskId ? taskId : 0L, username, payload); + return Message.ok().data("logs",realtimeLog); } /** diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/UploadRestfulApi.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/UploadRestfulApi.java index 6a285a7e8..5f70bf47c 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/UploadRestfulApi.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/restful/api/UploadRestfulApi.java @@ -17,13 +17,17 @@ import com.webank.wedatasphere.streamis.jobmanager.exception.JobException; import com.webank.wedatasphere.streamis.jobmanager.exception.JobExceptionManager; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJobVersion; import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; import com.webank.wedatasphere.streamis.jobmanager.manager.service.BMLService; import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; import com.webank.wedatasphere.streamis.jobmanager.manager.util.IoUtils; import com.webank.wedatasphere.streamis.jobmanager.manager.util.ZipHelper; +import com.webank.wedatasphere.streamis.jobmanager.service.HighAvailableService; +import com.webank.wedatasphere.streamis.jobmanager.utils.JsonUtil; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.linkis.server.Message; @@ -47,6 +51,9 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.List; import java.util.Objects; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @RequestMapping(path = "/streamis/streamJobManager/job") @RestController @@ -63,17 +70,24 @@ public class UploadRestfulApi { @Autowired private ProjectPrivilegeService projectPrivilegeService; + @Autowired + private HighAvailableService highAvailableService; + + private static final String NO_OPERATION_PERMISSION_MESSAGE = "the current user has no operation permission"; + @RequestMapping(path = "/upload", method = RequestMethod.POST) public Message uploadJar(HttpServletRequest request, @RequestParam(name = "projectName", required = false) String projectName, - @RequestParam(name = "file") List files) throws IOException, JobException { + @RequestParam(name = "file") List files, + @RequestParam(name = "source",required = false) String source) throws IOException, JobException { String userName = ModuleUserUtils.getOperationUser(request, "upload job zip file"); if (files == null || files.size() <= 0) { throw JobExceptionManager.createException(30300, "uploaded files"); } - if (!projectPrivilegeService.hasEditPrivilege(request, projectName)) return Message.error("the current user has no operation permission"); - + if (!projectPrivilegeService.hasEditPrivilege(request, projectName)) { + return Message.error(NO_OPERATION_PERMISSION_MESSAGE); + } //Only uses 1st file(只取第一个文件) MultipartFile p = files.get(0); String fileName = new String(p.getOriginalFilename().getBytes("ISO8859-1"), StandardCharsets.UTF_8); @@ -81,11 +95,17 @@ public Message uploadJar(HttpServletRequest request, if(!ZipHelper.isZip(fileName)){ throw JobExceptionManager.createException(30302); } + if ((Boolean) JobConf.STANDARD_AUTHENTICATION_KEY().getHotValue()){ + if (!highAvailableService.confirmToken(source)){ + return Message.error("As this job is not from standard release, it is not allowed to upload"); + } + } InputStream is = null; OutputStream os = null; File file = null; String inputPath = null; try { + IoUtils.validateFileName(fileName); inputPath = IoUtils.generateIOPath(userName, "streamis", fileName); file = new File(inputPath); if (file.getParentFile().exists()) { @@ -94,7 +114,7 @@ public Message uploadJar(HttpServletRequest request, is = p.getInputStream(); os = IoUtils.generateExportOutputStream(inputPath); IOUtils.copy(is, os); - StreamJobVersion job = streamJobService.uploadJob(projectName, userName, inputPath); + StreamJobVersion job = streamJobService.uploadJob(projectName, userName, inputPath, source); return Message.ok().data("jobId", job.getJobId()); } catch (Exception e) { LOG.error("Failed to upload zip {} to project {} for user {}.", fileName, projectName, userName, e); diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/HighAvailableService.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/HighAvailableService.java new file mode 100644 index 000000000..1d1f245f1 --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/HighAvailableService.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.streamis.jobmanager.service; + +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.JobHighAvailableVo; +import com.webank.wedatasphere.streamis.jobmanager.vo.HighAvailableMsg; + +public interface HighAvailableService { + + JobHighAvailableVo getJobHighAvailableVo(long jobId); + + HighAvailableMsg getHighAvailableMsg(); + + Boolean canBeStarted(Long jobId); + + Boolean confirmToken(String token); +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/impl/HighAvailableServiceImpl.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/impl/HighAvailableServiceImpl.java new file mode 100644 index 000000000..b34d1915b --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/service/impl/HighAvailableServiceImpl.java @@ -0,0 +1,91 @@ +package com.webank.wedatasphere.streamis.jobmanager.service.impl; + +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.StreamJobLauncherConf; +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamJobVersion; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo.JobHighAvailableVo; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.DefaultStreamJobService; +import com.webank.wedatasphere.streamis.jobmanager.manager.utils.SourceUtils; +import com.webank.wedatasphere.streamis.jobmanager.restful.api.JobRestfulApi; +import com.webank.wedatasphere.streamis.jobmanager.service.HighAvailableService; +import com.webank.wedatasphere.streamis.jobmanager.utils.JsonUtil; +import com.webank.wedatasphere.streamis.jobmanager.vo.HighAvailableMsg; +import org.apache.linkis.common.utils.Utils; +import org.apache.linkis.server.BDPJettyServerHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.validation.executable.ValidateOnExecution; +import java.net.InetAddress; +import java.util.Map; +import java.util.Optional; + +@Service +public class HighAvailableServiceImpl implements HighAvailableService { + + private static final Logger LOG = LoggerFactory.getLogger(JobRestfulApi.class); + @Autowired + private DefaultStreamJobService defaultStreamJobService; + + @Autowired + private StreamJobConfService streamJobConfService; + + @Override + public JobHighAvailableVo getJobHighAvailableVo(long jobId){ + StreamJobVersion jobVersion = this.defaultStreamJobService.getLatestJobVersion(jobId); + String highAvailablePolicy = this.streamJobConfService.getJobConfValue(jobId, JobConf.HIGHAVAILABLE_POLICY_KEY().getValue()); + JobHighAvailableVo inspectVo = new JobHighAvailableVo(); + Optional sourceOption = Optional.ofNullable(jobVersion.getSource()); + if(sourceOption.isPresent() && JsonUtil.isJson(sourceOption.get())) { + String source = sourceOption.get(); + inspectVo = SourceUtils.manageJobProjectFile(highAvailablePolicy, source); + } else { + LOG.warn("this job source is null"); + inspectVo.setHighAvailable(true); + inspectVo.setMsg("User changed params of job not by deploy, will skip to check its highavailable(用户未走发布单独修改了job信息,跳过高可用检查)"); + } + return inspectVo; + } + + @Override + public HighAvailableMsg getHighAvailableMsg(){ + HighAvailableMsg msg = new HighAvailableMsg(); + msg.setClusterName(StreamJobLauncherConf.HIGHAVAILABLE_CLUSTER_NAME().getHotValue()); + msg.setWhetherManager(Boolean.parseBoolean(StreamJobLauncherConf.WHETHER_MANAGER_CLUSTER().getHotValue().toString())); + msg.setNodeIp(Utils.getComputerName()); + return msg; + } + + @Override + public Boolean canBeStarted(Long jobId){ + String highAvailablePolicy = this.streamJobConfService.getJobConfValue(jobId, JobConf.HIGHAVAILABLE_POLICY_KEY().getValue()); + highAvailablePolicy = Optional.ofNullable(highAvailablePolicy).orElse(JobConf.HIGHAVAILABLE_DEFAULT_POLICY().getHotValue()); + HighAvailableMsg msg = this.getHighAvailableMsg(); + if(highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE().getValue()) || highAvailablePolicy.equals(JobConf.HIGHAVAILABLE_POLICY_MANAGERSLAVE_BAK().getValue())){ + return msg.getWhetherManager(); + } + return true; + } + + @Override + public Boolean confirmToken(String source){ + Optional sourceOption = Optional.ofNullable(source); + if(sourceOption.isPresent() && JsonUtil.isJson(sourceOption.get())) { + String sourceStr = sourceOption.get(); + Map sourceMap = BDPJettyServerHelper.gson().fromJson(sourceStr, Map.class); + if (sourceMap.containsKey("source")) { + String sourceValue = sourceMap.get("source").toString(); + if (sourceValue.equals(JobConf.HIGHAVAILABLE_SOURCE().getValue())) { + if (sourceMap.containsKey("token")) { + String tokenContent = sourceMap.get("token").toString(); + return tokenContent.equals(JobConf.HIGHAVAILABLE_TOKEN().getValue()); + } + } + } + } + return false; + } +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/JsonUtil.scala b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/JsonUtil.scala new file mode 100644 index 000000000..38322f3dc --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/JsonUtil.scala @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.streamis.jobmanager.utils + +import com.google.gson.{Gson, JsonElement, JsonSyntaxException} +import org.apache.commons.lang3.StringUtils +import org.apache.linkis.common.utils.{Logging, Utils} + +import java.io.IOException + +object JsonUtil extends Logging { + + lazy private val strictGsonAdapter = new Gson().getAdapter(classOf[JsonElement]) + + def isJson(s: String): Boolean = { + var flag = false + if (StringUtils.isNotBlank(s)) { + Utils.tryCatch { + strictGsonAdapter.fromJson(s) + flag = true + } { + case e: JsonSyntaxException => + logger.error(s"${s} is invalid json. ${e.getMessage}") + flag = false + case e1: IOException => + logger.error(s"${s} is invalid json. ${e1.getMessage}") + flag = false + case e2: Exception => + logger.error(s"${s} is invalid json. ${e2.getMessage}") + flag = false + } + } + flag + } + +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/RegularUtil.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/RegularUtil.java index 619aa7f2a..c182c0b99 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/RegularUtil.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/utils/RegularUtil.java @@ -1,9 +1,8 @@ package com.webank.wedatasphere.streamis.jobmanager.utils; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; import org.apache.commons.lang3.StringUtils; -import java.util.List; - public class RegularUtil { private RegularUtil(){} @@ -12,8 +11,11 @@ private RegularUtil(){} public static final String NUMBER_PATTERN="^.*[0-9]+.*$";//数字 public static final String SPECIAL_CHAR_PATTERN="^.*[/^/$/.//,;:'!@#%&/*/|/?/+/(/)/[/]/{/}]+.*$";//特殊字符 public static final String PW_LENGTH_PATTERN="^.{0,64}$";//字符长度 - public static final String PATTERN ="^[A-Za-z0-9_,.]{1,64}$" ; //大小写字母数字下划线逗号小数点 + public static final String PATTERN ="^[A-Za-z0-9_,.]{1,64}$" ; //大小写字母数字下划线逗号小数点、 + + public static final String JOB_NAME_PATTERN ="^[A-Za-z0-9_,.]+" ; //大小写字母数字下划线逗号小数点 + public static final String PRODUCT_NAME_PATTERN = "^[A-Za-z0-9_]+" ; //大小写字母数字下划线 public static boolean matches(String input) { if (StringUtils.isNotBlank(input)){ @@ -22,13 +24,19 @@ public static boolean matches(String input) { return false; } - public static boolean matches(List userList) { - if (userList.isEmpty()){ - return userList.toString().matches(LETTER_PATTERN); + public static boolean matchesJobName(String jobName) { + int length = Integer.parseInt(JobConf.JOB_NAME_LENGTH_MAX().getHotValue().toString()); + if (StringUtils.isNotBlank(jobName) && jobName.length() < length){ + return jobName.matches(JOB_NAME_PATTERN); } return false; } + public static boolean matchesProductName(String productName) { + return productName.matches(PRODUCT_NAME_PATTERN); + } + + } diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/HighAvailableMsg.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/HighAvailableMsg.java new file mode 100644 index 000000000..9499ff0da --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/HighAvailableMsg.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.streamis.jobmanager.vo; + +public class HighAvailableMsg { + + String clusterName; + + String nodeIp; + + Boolean whetherManager; + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public String getNodeIp() { + return nodeIp; + } + + public void setNodeIp(String nodeIp) { + this.nodeIp = nodeIp; + } + + public Boolean getWhetherManager() { + return whetherManager; + } + public void setWhetherManager(Boolean whetherManager) { + this.whetherManager = whetherManager; + } +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/JobBulkPauseRequest.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/JobBulkPauseRequest.java index c4d311f3a..4e1214340 100644 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/JobBulkPauseRequest.java +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/JobBulkPauseRequest.java @@ -27,6 +27,8 @@ public class JobBulkPauseRequest extends JobBulkRequest{ */ private boolean snapshot = false; + private boolean skipHookError = false; + public JobBulkPauseRequest(){ super(); } @@ -37,4 +39,12 @@ public boolean isSnapshot() { public void setSnapshot(boolean snapshot) { this.snapshot = snapshot; } + + public boolean isSkipHookError() { + return skipHookError; + } + + public void setSkipHookError(boolean skipHookError) { + this.skipHookError = skipHookError; + } } diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/UpdateContentRequest.java b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/UpdateContentRequest.java new file mode 100644 index 000000000..ecc5ad9b1 --- /dev/null +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/java/com/webank/wedatasphere/streamis/jobmanager/vo/UpdateContentRequest.java @@ -0,0 +1,55 @@ +package com.webank.wedatasphere.streamis.jobmanager.vo; + +import java.util.List; + +public class UpdateContentRequest { + private Long jobId ; + + private String version; + + private List args; + + private boolean highAvailable; + + private String highAvailableMessage; + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public List getArgs() { + return args; + } + + public void setArgs(List args) { + this.args = args; + } + + public boolean isHighAvailable() { + return highAvailable; + } + + public void setHighAvailable(boolean highAvailable) { + this.highAvailable = highAvailable; + } + + public String getHighAvailableMessage() { + return highAvailableMessage; + } + + public void setHighAvailableMessage(String highAvailableMessage) { + this.highAvailableMessage = highAvailableMessage; + } +} diff --git a/streamis-jobmanager/streamis-jobmanager-server/src/main/resources/linkis.properties b/streamis-jobmanager/streamis-jobmanager-server/src/main/resources/linkis.properties index 546caebf5..bc4ba70d2 100755 --- a/streamis-jobmanager/streamis-jobmanager-server/src/main/resources/linkis.properties +++ b/streamis-jobmanager/streamis-jobmanager-server/src/main/resources/linkis.properties @@ -40,7 +40,8 @@ wds.linkis.server.mybatis.mapperLocations=\ classpath*:com/webank/wedatasphere/streamis/project/server/dao/impl/*.xml,\ classpath*:com/webank/wedatasphere/streamis/jobmanager/launcher/dao/impl/*.xml,\ classpath*:com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/*.xml,\ - classpath*:com/webank/wedatasphere/streamis/projectmanager/dao/impl/*.xml + classpath*:com/webank/wedatasphere/streamis/projectmanager/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/streamis/errorcode/dao/impl/*.xml wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.streamis.datasource.manager.domain,\ com.webank.wedatasphere.streamis.jobmanager.launcher.entity,\ @@ -48,6 +49,7 @@ wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.streamis.da com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo,\ com.webank.wedatasphere.streamis.jobmanager.launcher.entity.vo,\ com.webank.wedatasphere.streamis.jobmanager.launcher.entity.dto,\ + com.webank.wedatasphere.streamis.errorcode.entity,\ com.webank.wedatasphere.streamis.projectmanager.entity @@ -55,4 +57,5 @@ wds.linkis.server.mybatis.BasePackage=org.apache.linkis.bml.dao,\ com.webank.wedatasphere.streamis.project.server.dao,\ com.webank.wedatasphere.streamis.jobmanager.launcher.dao,\ com.webank.wedatasphere.streamis.jobmanager.manager.dao,\ - com.webank.wedatasphere.streamis.projectmanager.dao \ No newline at end of file + com.webank.wedatasphere.streamis.projectmanager.dao,\ + com.webank.wedatasphere.streamis.errorcode.dao \ No newline at end of file diff --git a/streamis-jobmanager/streamis-projectmanager-server/pom.xml b/streamis-jobmanager/streamis-projectmanager-server/pom.xml index 8d56a7554..327f04418 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/pom.xml +++ b/streamis-jobmanager/streamis-projectmanager-server/pom.xml @@ -20,7 +20,7 @@ streamis-jobmanager com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -31,6 +31,11 @@ org.apache.linkis linkis-mybatis + + com.webank.wedatasphere.streamis + streamis-job-audit-log + ${streamis.version} + org.apache.linkis linkis-common @@ -53,7 +58,7 @@ com.webank.wedatasphere.streamis streamis-job-manager-service - ${jobmanager.version} + ${streamis.version} org.apache.linkis @@ -113,8 +118,10 @@ **/*.properties **/*.xml - **/*.yml + + **/*.yml + src/main/java diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/assembly/distribution.xml b/streamis-jobmanager/streamis-projectmanager-server/src/main/assembly/distribution.xml index 9a69ed9a9..caf3ac334 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/assembly/distribution.xml +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/assembly/distribution.xml @@ -38,7 +38,7 @@ - + ${basedir}/bin diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/dao/impl/ProjectManagerMapper.xml b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/dao/impl/ProjectManagerMapper.xml index ae0f13b56..718bb52f9 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/dao/impl/ProjectManagerMapper.xml +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/dao/impl/ProjectManagerMapper.xml @@ -23,8 +23,8 @@ INSERT INTO linkis_stream_project_files - (`file_name`,`version`,`store_path`,`store_type`,`project_name`,`create_by`,`comment`,`md5`) - VALUES (#{fileName},#{version},#{storePath},#{storeType},#{projectName},#{createBy},#{comment},#{MD5}) + (`file_name`,`version`,`store_path`,`store_type`,`project_name`,`create_by`,`comment`,`md5`,`source`) + VALUES (#{fileName},#{version},#{storePath},#{storeType},#{projectName},#{createBy},#{comment},#{MD5},#{source}) @@ -35,6 +35,9 @@ ,comment = #{comment} + + ,source = #{source} + where id = #{id} @@ -65,19 +68,19 @@ @@ -86,14 +89,14 @@ diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/entity/ProjectFiles.java b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/entity/ProjectFiles.java index 278a943d4..1c7c8c80d 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/entity/ProjectFiles.java +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/entity/ProjectFiles.java @@ -47,6 +47,18 @@ public class ProjectFiles implements StreamisFile { private String MD5; + private String source; + + private String materialType; + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + public String getComment() { return comment; } @@ -139,4 +151,12 @@ public String getMD5() { public void setMD5(String MD5) { this.MD5 = MD5; } + + public String getMaterialType() { + return materialType; + } + + public void setMaterialType(String materialType) { + this.materialType = materialType; + } } diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/restful/api/ProjectManagerRestfulApi.java b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/restful/api/ProjectManagerRestfulApi.java index 6b59861cb..e5ba552e8 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/restful/api/ProjectManagerRestfulApi.java +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/restful/api/ProjectManagerRestfulApi.java @@ -18,12 +18,15 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamisFile; import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileException; -import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileExceptionManager; import com.webank.wedatasphere.streamis.jobmanager.manager.project.service.ProjectPrivilegeService; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; import com.webank.wedatasphere.streamis.jobmanager.manager.util.IoUtils; import com.webank.wedatasphere.streamis.jobmanager.manager.util.ReaderUtils; + import com.webank.wedatasphere.streamis.projectmanager.entity.ProjectFiles; import com.webank.wedatasphere.streamis.projectmanager.service.ProjectManagerService; import org.apache.commons.io.IOUtils; @@ -42,9 +45,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; +import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -59,6 +60,18 @@ public class ProjectManagerRestfulApi { private ProjectManagerService projectManagerService; @Autowired private ProjectPrivilegeService projectPrivilegeService; + @Autowired + private StreamJobService streamJobService; + @Autowired + private StreamJobConfService streamJobConfService; + + private static final String NO_OPERATION_PERMISSION_MESSAGE = "the current user has no operation permission"; + + private static final String TYPE_PROJECT = "project"; + + private static final String TYPE_JOB = "job"; + + private static final String templateName = "-meta.json"; @RequestMapping(path = "/files/upload", method = RequestMethod.POST) public Message upload(HttpServletRequest req, @@ -66,7 +79,8 @@ public Message upload(HttpServletRequest req, @RequestParam(name = "projectName",required = false) String projectName, @RequestParam(name = "comment", required = false) String comment, @RequestParam(name = "updateWhenExists", required = false) boolean updateWhenExists, - @RequestParam(name = "file") List files) throws UnsupportedEncodingException, FileException { + @RequestParam(name = "file") List files, + @RequestParam(name = "source",required = false) String source) throws UnsupportedEncodingException, FileException { String username = ModuleUserUtils.getOperationUser(req, "upload project files"); if (StringUtils.isBlank(version)) { return Message.error("version is null"); @@ -74,15 +88,30 @@ public Message upload(HttpServletRequest req, if (StringUtils.isBlank(projectName)) { return Message.error("projectName is null"); } - if (version.length()>=30) return Message.error("version character length is to long ,Please less than 30 (版本字符长度过长,请小于30)"); - if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) return Message.error("the current user has no operation permission"); - + if (StringUtils.isBlank(source)) { + LOG.info("source的值为空"); + } + if (version.length()>=30){ + return Message.error("version character length is to long ,Please less than 30 (版本字符长度过长,请小于30)"); + } + if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) { + return Message.error(NO_OPERATION_PERMISSION_MESSAGE); + } + if ((Boolean) JobConf.STANDARD_AUTHENTICATION_KEY().getHotValue()){ + if (!projectManagerService.confirmToken(source)){ + return Message.error("As this file is not from standard release, it is not allowed to upload"); + } + } //Only uses 1st file(只取第一个文件) MultipartFile p = files.get(0); String fileName = new String(p.getOriginalFilename().getBytes("ISO8859-1"), StandardCharsets.UTF_8); ReaderUtils readerUtils = new ReaderUtils(); if (!readerUtils.checkName(fileName)) { - throw FileExceptionManager.createException(30601, fileName); + return Message.warn("fileName should only contains numeric/English characters and '-_'(仅允许包含数字,英文,中划线,下划线)"); + } + + if (!ReaderUtils.isValidFileFormat(fileName)){ + return Message.warn("file should only "+ JobConf.STREAMIS_CHECK_FILE_FORMAT().getHotValue() +"(仅允许 " +JobConf.STREAMIS_CHECK_FILE_FORMAT().getHotValue()+"格式)"); } if (!updateWhenExists) { ProjectFiles projectFiles = projectManagerService.selectFile(fileName, version, projectName); @@ -93,11 +122,23 @@ public Message upload(HttpServletRequest req, InputStream is = null; OutputStream os = null; try { + IoUtils.validateFileName(fileName); String inputPath = IoUtils.generateIOPath(username, "streamis", fileName); is = p.getInputStream(); os = IoUtils.generateExportOutputStream(inputPath); IOUtils.copy(is, os); - projectManagerService.upload(username, fileName, version, projectName, inputPath,comment); + if (!p.isEmpty() && p.getOriginalFilename().endsWith(templateName)) { + if(!readerUtils.checkMetaTemplate(fileName,inputPath,projectName)) return Message.error("meta template is not correct,eg:testProject(项目名)-meta.json"); + projectManagerService.upload(username, fileName, version, projectName, inputPath, comment, source); + StreamisFile file = projectManagerService.selectFile(fileName,version,projectName); + projectManagerService.uploadJobTemplate(username,fileName,inputPath,projectName,version,file.getStorePath()); + }else{ + projectManagerService.upload(username, fileName, version, projectName, inputPath, comment, source); + } + File file = new File(inputPath); + if (file.exists()) { + file.delete(); + } } catch (Exception e) { LOG.error("failed to upload zip {} fo user {}", fileName, username, e); return Message.error(e.getMessage()); @@ -118,7 +159,7 @@ public Message list( HttpServletRequest req,@RequestParam(value = "filename",req if (StringUtils.isBlank(projectName)) { return Message.error("projectName is null"); } - if (!projectPrivilegeService.hasAccessPrivilege(req,projectName)) return Message.error("the current user has no operation permission"); + if (!projectPrivilegeService.hasAccessPrivilege(req,projectName)) return Message.error(NO_OPERATION_PERMISSION_MESSAGE); PageHelper.startPage(pageNow, pageSize); List fileList; try { @@ -141,7 +182,7 @@ public Message versionList( HttpServletRequest req, @RequestParam(value = "fileN if (StringUtils.isBlank(fileName)) { return Message.error("fileName is null"); } - if (!projectPrivilegeService.hasAccessPrivilege(req,projectName)) return Message.error("the current user has no operation permission"); + if (!projectPrivilegeService.hasAccessPrivilege(req,projectName)) return Message.error(NO_OPERATION_PERMISSION_MESSAGE); PageHelper.startPage(pageNow, pageSize); List fileList; try { @@ -158,9 +199,11 @@ public Message versionList( HttpServletRequest req, @RequestParam(value = "fileN public Message delete( HttpServletRequest req, @RequestParam(value = "fileName",required = false) String fileName, @RequestParam(value = "projectName",required = false) String projectName) { String username = ModuleUserUtils.getOperationUser(req, "Delete file:" + fileName + " in project: " + projectName); - if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) return Message.error("the current user has no operation permission"); - - return projectManagerService.delete(fileName, projectName, username) ? Message.ok() + if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) return Message.error(NO_OPERATION_PERMISSION_MESSAGE); + if(fileName.endsWith(templateName)){ + projectManagerService.disableTemplate(fileName,projectName,username); + } + return projectManagerService.delete(fileName, projectName, username)? Message.ok() : Message.warn("you have no permission delete some files not belong to you"); } @@ -176,31 +219,44 @@ public Message deleteVersion(HttpServletRequest req, @RequestParam(value = "ids" } String projectName = projectManagerService.getProjectNameByFileId(Long.valueOf(ids)); if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) { - return Message.error("the current user has no operation permission"); + return Message.error(NO_OPERATION_PERMISSION_MESSAGE); } - + projectManagerService.disableTemplateFiles(ids); return projectManagerService.deleteFiles(ids, username) ? Message.ok() : Message.warn("you have no permission delete some files not belong to you"); } @RequestMapping(path = "/files/download", method = RequestMethod.GET) - public Message download( HttpServletRequest req, HttpServletResponse response, @RequestParam(value = "id",required = false) Long id, + public Message download( HttpServletRequest req, HttpServletResponse response, + @RequestParam(value = "id",required = false) Long id, + @RequestParam(value = "materialType",required = false) String materialType, @RequestParam(value = "projectName",required = false)String projectName) { - if(StringUtils.isBlank(projectName)){ - projectName = projectManagerService.getProjectNameByFileId(id); + StreamisFile file = null; + String userName = ModuleUserUtils.getOperationUser(req, "download job"); + if (org.apache.commons.lang.StringUtils.isBlank(userName)) return Message.error("current user has no permission"); + if (StringUtils.isBlank(projectName)) { + if (StringUtils.isBlank(materialType)) { + return Message.error("projectName and materialType is null"); + } else if (materialType.equals(TYPE_JOB)) { + file = streamJobService.getJobFileById(id); + } else if (materialType.equals(TYPE_PROJECT)){ + file = projectManagerService.getFile(id, projectName); + } + } else { + if (!projectPrivilegeService.hasEditPrivilege(req, projectName)) + return Message.error(NO_OPERATION_PERMISSION_MESSAGE); + file = projectManagerService.getFile(id, projectName); } - ProjectFiles projectFiles = projectManagerService.getFile(id, projectName); - if (projectFiles == null) { + if (file == null) { return Message.error("no such file in this project"); } - if (StringUtils.isBlank(projectFiles.getStorePath())) { + if (StringUtils.isBlank(file.getStorePath())) { return Message.error("storePath is null"); } - if (!projectPrivilegeService.hasEditPrivilege(req,projectName)) return Message.error("the current user has no operation permission"); - response.setContentType("application/x-download"); - response.setHeader("content-Disposition", "attachment;filename=" + projectFiles.getFileName()); - try (InputStream is = projectManagerService.download(projectFiles); + response.setHeader("content-Disposition", "attachment;filename=" + file.getFileName()); + + try (InputStream is = projectManagerService.download(file); OutputStream os = response.getOutputStream() ) { int len = 0; @@ -210,7 +266,7 @@ public Message download( HttpServletRequest req, HttpServletResponse response, @ } os.flush(); } catch (Exception e) { - LOG.error("download file: {} failed , message is : {}" , projectFiles.getFileName(), e); + LOG.error("download file: {} failed , message is : {}", file.getFileName(), e); return Message.error(e.getMessage()); } return Message.ok(); diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/ProjectManagerService.java b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/ProjectManagerService.java index 6df103c49..0378ca267 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/ProjectManagerService.java +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/ProjectManagerService.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamisFile; +import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileException; import com.webank.wedatasphere.streamis.projectmanager.entity.ProjectFiles; import java.io.IOException; @@ -27,22 +28,26 @@ * Created by v_wbyynie on 2021/9/17. */ public interface ProjectManagerService { - void upload(String username, String fileName, String version, String projectName, String file, String comment) throws IOException; + void upload(String username, String fileName, String version, String projectName, String file, String comment, String source) throws IOException; List listFiles(String projectName, String username, String filename); boolean deleteFiles(String ids,String username); + void disableTemplateFiles(String ids); + ProjectFiles selectFile(String fileName, String version, String projectName); List listFileVersions(String projectName, String fileName); - InputStream download(ProjectFiles projectFiles) throws JsonProcessingException; + InputStream download(StreamisFile projectFiles) throws JsonProcessingException; ProjectFiles getById(Long id); boolean delete(String fileName, String projectName, String username); + void disableTemplate(String name, String projectName, String username); + ProjectFiles getFile(Long id, String projectName); List getProjectNames(List ids); @@ -50,4 +55,8 @@ public interface ProjectManagerService { String getProjectNameById(Long id); String getProjectNameByFileId(Long id); + + void uploadJobTemplate(String username, String fileName, String filePath, String projectName,String version,String storePath) throws FileException, IOException; + + Boolean confirmToken(String token); } diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/impl/ProjectManagerServiceImpl.java b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/impl/ProjectManagerServiceImpl.java index 1c1aa4cae..a49ed2a8f 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/impl/ProjectManagerServiceImpl.java +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/service/impl/ProjectManagerServiceImpl.java @@ -16,6 +16,21 @@ package com.webank.wedatasphere.streamis.projectmanager.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.utils.JobUtils; +import com.webank.wedatasphere.streamis.jobmanager.launcher.service.StreamJobConfService; +import com.webank.wedatasphere.streamis.jobmanager.manager.constrants.JobConstrants; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamJobTemplateMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.dao.StreamTaskMapper; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.MetaJsonInfo; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.StreamTask; +import com.webank.wedatasphere.streamis.jobmanager.manager.exception.FileException; +import com.webank.wedatasphere.streamis.jobmanager.manager.entity.JobTemplateFiles; +import com.webank.wedatasphere.streamis.jobmanager.launcher.job.conf.JobConf; +import com.webank.wedatasphere.streamis.jobmanager.manager.service.StreamJobService; +import com.webank.wedatasphere.streamis.projectmanager.utils.JsonUtil; import com.webank.wedatasphere.streamis.projectmanager.utils.MD5Utils; import org.apache.commons.collections.CollectionUtils; import org.apache.linkis.common.utils.JsonUtils; @@ -28,10 +43,12 @@ import com.webank.wedatasphere.streamis.projectmanager.service.ProjectManagerService; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; +import org.apache.linkis.server.BDPJettyServerHelper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; import java.io.InputStream; import java.util.*; @@ -47,9 +64,24 @@ public class ProjectManagerServiceImpl implements ProjectManagerService, Streami @Autowired private ProjectManagerMapper projectManagerMapper; + @Autowired + private StreamJobMapper streamJobMapper; + + @Autowired + private StreamTaskMapper streamTaskMapper; + + @Autowired + private StreamJobTemplateMapper streamJobTemplateMapper; + + private static final String JSON_TYPE = ".json"; + + private static final String templateName = "-meta.json"; + + private static final Integer RUNNING = 5; + @Override @Transactional(rollbackFor = Exception.class) - public void upload(String username, String fileName, String version, String projectName, String filePath,String comment) throws JsonProcessingException { + public void upload(String username, String fileName, String version, String projectName, String filePath,String comment, String source) throws JsonProcessingException { String fileMd5 = MD5Utils.getMD5(filePath); Map result = bmlService.upload(username, filePath); ProjectFiles projectFiles = new ProjectFiles(); @@ -58,6 +90,7 @@ public void upload(String username, String fileName, String version, String proj projectFiles.setCreateBy(username); projectFiles.setComment(comment); projectFiles.setProjectName(projectName); + projectFiles.setSource(source); ReaderUtils readerUtils = new ReaderUtils(); projectFiles.setStorePath(readerUtils.readAsJson(result.get("version").toString(),result.get("resourceId").toString())); projectFiles.setMD5(fileMd5); @@ -83,9 +116,9 @@ public List listFileVersions(String projectName, String } @Override - public InputStream download(ProjectFiles projectFiles) throws JsonProcessingException { - Map map = JsonUtils.jackson().readValue(projectFiles.getStorePath(), Map.class); - return bmlService.get(projectFiles.getCreateBy(), map.get("resourceId"), map.get("version")); + public InputStream download(StreamisFile file) throws JsonProcessingException { + Map map = JsonUtils.jackson().readValue(file.getStorePath(), Map.class); + return bmlService.get(file.getCreateBy(), map.get("resourceId"), map.get("version")); } @Override @@ -100,9 +133,15 @@ public boolean delete(String fileName, String projectName, String username) { return count == delete; } + @Override + public void disableTemplate(String name, String projectName, String username){ + List templateIds = streamJobTemplateMapper.selectTemplateId(name,projectName); + streamJobTemplateMapper.setEnable(templateIds,false); + } + @Override public ProjectFiles getFile(Long id, String projectName) { - return StringUtils.isBlank(projectName) ? projectManagerMapper.getJobFile(id) : projectManagerMapper.getProjectFile(id); + return projectManagerMapper.getProjectFile(id); } @Override @@ -123,6 +162,23 @@ public boolean deleteFiles(String ids,String username) { return true; } + @Override + public void disableTemplateFiles(String ids) { + if (!StringUtils.isBlank(ids) && !ArrayUtils.isEmpty(ids.split(","))) { + String[] split = ids.split(","); + List list = new ArrayList<>(); + for (String s : split) { + list.add(Long.parseLong(s)); + } + for (Long id : list){ + ProjectFiles projectFile = projectManagerMapper.getById(id); + if(projectFile.getFileName().endsWith(templateName)){ + streamJobTemplateMapper.setEnableByVersion(projectFile.getFileName(),projectFile.getVersion(),false); + } + } + } + } + @Override public ProjectFiles selectFile(String fileName, String version, String projectName) { return projectManagerMapper.selectFile(fileName, version, projectName); @@ -145,4 +201,82 @@ public String getProjectNameById(Long id) { public String getProjectNameByFileId(Long id) { return projectManagerMapper.getProjectNameByFileId(id); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void uploadJobTemplate(String username, String fileName, String filePath,String projectName,String version,String storePath) throws FileException, IOException { + String path = filePath.replace(JSON_TYPE,""); + ReaderUtils readerUtils = new ReaderUtils(); + MetaJsonInfo metaJsonInfo = readerUtils.parseJson(path,projectName); + String metaJson = generateJobTemplate(metaJsonInfo); + JobTemplateFiles jobTemplateFiles = new JobTemplateFiles(); + jobTemplateFiles.setName(fileName); + jobTemplateFiles.setProjectName(projectName); + jobTemplateFiles.setStorePath(storePath); + jobTemplateFiles.setMetaJson(metaJson); + jobTemplateFiles.setVersion(version); + jobTemplateFiles.setDate(new Date()); + jobTemplateFiles.setEnable(true); + + JobTemplateFiles file = selectJobTemplate(fileName, version, projectName); + if (file == null) { + streamJobTemplateMapper.insertJobTemplate(jobTemplateFiles); + }else { + jobTemplateFiles.setId(file.getId()); + jobTemplateFiles.setDate(new Date()); + streamJobTemplateMapper.updateJobTemplateById(jobTemplateFiles); + } + } + + public JobTemplateFiles selectJobTemplate(String fileName, String version, String projectName) { + return streamJobTemplateMapper.selectJobTemplate(fileName, version, projectName); + } + + public String generateJobTemplate(MetaJsonInfo metaJsonInfo){ + String configJson = JobUtils.gson().toJson(metaJsonInfo); + JsonObject jsonObj = new JsonParser().parse(configJson).getAsJsonObject(); + if (jsonObj.has(JobConstrants.FIELD_WORKSPACE_NAME())) { + jsonObj.remove(JobConstrants.FIELD_WORKSPACE_NAME()); + } +// if (jsonObj.has(JobConstrants.FIELD_METAINFO_NAME())) { +// jsonObj.remove(JobConstrants.FIELD_METAINFO_NAME()); +// } + if (jsonObj.has(JobConstrants.FIELD_JOB_NAME())) { + jsonObj.remove(JobConstrants.FIELD_JOB_NAME()); + } + if (jsonObj.has(JobConstrants.FIELD_JOB_TYPE())) { + jsonObj.remove(JobConstrants.FIELD_JOB_TYPE()); + } + if (jsonObj.has(JobConstrants.FIELD_JOB_TAG())) { + jsonObj.remove(JobConstrants.FIELD_JOB_TAG()); + } + if (jsonObj.has(JobConstrants.FIELD_JOB_COMMENT())) { + jsonObj.remove(JobConstrants.FIELD_JOB_COMMENT()); + } + if (jsonObj.has(JobConstrants.FIELD_JOB_DESCRIPTION())) { + jsonObj.remove(JobConstrants.FIELD_JOB_DESCRIPTION()); + } + String metaJson = jsonObj.toString(); + return metaJson; + } + + @Override + public Boolean confirmToken(String source){ + Optional sourceOption = Optional.ofNullable(source); + if(sourceOption.isPresent() && JsonUtil.isJson(sourceOption.get())) { + String sourceStr = sourceOption.get(); + Map sourceMap = BDPJettyServerHelper.gson().fromJson(sourceStr, Map.class); + if (sourceMap.containsKey("source")) { + String sourceValue = sourceMap.get("source").toString(); + if (sourceValue.equals(JobConf.HIGHAVAILABLE_SOURCE().getValue())) { + if (sourceMap.containsKey("token")) { + String tokenContent = sourceMap.get("token").toString(); + return tokenContent.equals(JobConf.HIGHAVAILABLE_TOKEN().getValue()); + } + } + } + } + return false; + } + } diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/JsonUtil.scala b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/JsonUtil.scala new file mode 100644 index 000000000..2161a5bdb --- /dev/null +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/JsonUtil.scala @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.streamis.projectmanager.utils + +import com.google.gson.{Gson, JsonElement, JsonSyntaxException} +import org.apache.commons.lang3.StringUtils +import org.apache.linkis.common.utils.{Logging, Utils} + +import java.io.IOException + +object JsonUtil extends Logging { + + lazy private val strictGsonAdapter = new Gson().getAdapter(classOf[JsonElement]) + + def isJson(s: String): Boolean = { + var flag = false + if (StringUtils.isNotBlank(s)) { + Utils.tryCatch { + strictGsonAdapter.fromJson(s) + flag = true + } { + case e: JsonSyntaxException => + logger.error(s"${s} is invalid json. ${e.getMessage}") + flag = false + case e1: IOException => + logger.error(s"${s} is invalid json. ${e1.getMessage}") + flag = false + case e2: Exception => + logger.error(s"${s} is invalid json. ${e2.getMessage}") + flag = false + } + } + flag + } + +} diff --git a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/MD5Utils.java b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/MD5Utils.java index 7c55011ad..8a7fef16c 100644 --- a/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/MD5Utils.java +++ b/streamis-jobmanager/streamis-projectmanager-server/src/main/java/com/webank/wedatasphere/streamis/projectmanager/utils/MD5Utils.java @@ -1,5 +1,7 @@ package com.webank.wedatasphere.streamis.projectmanager.utils; +import com.webank.wedatasphere.streamis.jobmanager.manager.util.IoUtils; +import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +45,7 @@ private static byte[] getBytes(String filePath){ FileInputStream fis = null; ByteArrayOutputStream bos = null; try { + IoUtils.validateFileName(FilenameUtils.getName(filePath)); File file = new File(filePath); fis = new FileInputStream(file); bos = new ByteArrayOutputStream(1000); diff --git a/streamis-project/pom.xml b/streamis-project/pom.xml index 9b1d294dc..2686527fc 100644 --- a/streamis-project/pom.xml +++ b/streamis-project/pom.xml @@ -20,7 +20,7 @@ streamis com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-project/streamis-project-common/pom.xml b/streamis-project/streamis-project-common/pom.xml index c7a3a6d45..a3e901baa 100644 --- a/streamis-project/streamis-project-common/pom.xml +++ b/streamis-project/streamis-project-common/pom.xml @@ -20,7 +20,7 @@ streamis-project com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 diff --git a/streamis-project/streamis-project-server/pom.xml b/streamis-project/streamis-project-server/pom.xml index bb07631eb..ebd12c930 100644 --- a/streamis-project/streamis-project-server/pom.xml +++ b/streamis-project/streamis-project-server/pom.xml @@ -20,7 +20,7 @@ streamis-project com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -39,6 +39,20 @@ org.apache.linkis linkis-module ${linkis.version} + + + jackson-annotations + com.fasterxml.jackson.core + + + jackson-core + com.fasterxml.jackson.core + + + guava + com.google.guava + + @@ -70,6 +84,20 @@ dss-sso-integration-standard ${dss.version} compile + + + jackson-annotations + com.fasterxml.jackson.core + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-core + com.fasterxml.jackson.core + + @@ -97,14 +125,16 @@ **/*.xml - + + **/*.yml + + diff --git a/streamis-server/pom.xml b/streamis-server/pom.xml index a17aa1c6c..bacc720c7 100644 --- a/streamis-server/pom.xml +++ b/streamis-server/pom.xml @@ -20,7 +20,7 @@ streamis com.webank.wedatasphere.streamis - 0.3.0 + 0.3.1 4.0.0 @@ -64,12 +64,8 @@ com.thoughtworks.xstream - spring-core - org.springframework - - - spring-jcl - org.springframework + snakeyaml + org.yaml @@ -174,8 +170,10 @@ **/*.xml **/*.properties - **/*.yml + + **/*.yml + diff --git a/streamis-server/src/main/assembly/distribution.xml b/streamis-server/src/main/assembly/distribution.xml index 416239fa3..b0c8908f7 100644 --- a/streamis-server/src/main/assembly/distribution.xml +++ b/streamis-server/src/main/assembly/distribution.xml @@ -43,6 +43,9 @@ * + + *.yml + 0777 conf unix diff --git a/streamis-server/src/main/resources/application.properties b/streamis-server/src/main/resources/application.properties new file mode 100644 index 000000000..b6e9bfff9 --- /dev/null +++ b/streamis-server/src/main/resources/application.properties @@ -0,0 +1,14 @@ +server.port=9321 +spring.application.name=streamis-server +spring.mvc.servlet.path=/api/rest_j/v1 +spring.servlet.multipart.enabled=true +spring.servlet.multipart.max-file-size=500MB +spring.servlet.multipart.max-request-size=500MB + +eureka.client.serviceUrl.defaultZone=http://127.0.0.1:20303/eureka/ +eureka.instance.metadata-map.test=wedatasphere + +management.endpoints.web.exposure.include=refresh,info +logging.config.classpath=log4j2.xml + +feature.enabled=true diff --git a/streamis-server/src/main/resources/linkis.properties b/streamis-server/src/main/resources/linkis.properties index 9c6aaf990..da7b03091 100644 --- a/streamis-server/src/main/resources/linkis.properties +++ b/streamis-server/src/main/resources/linkis.properties @@ -37,21 +37,23 @@ wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.streamis.datasou com.webank.wedatasphere.streamis.jobmanager.restful.api,\ com.webank.wedatasphere.streamis.datasource.execute.rest,\ com.webank.wedatasphere.streamis.projectmanager.restful.api,\ - com.webank.wedatasphere.streamis.jobmanager.log.server.restful + com.webank.wedatasphere.streamis.jobmanager.log.server.restful,\ + com.webank.wedatasphere.streamis.audit.log.restful.api ##mybatis -wds.linkis.server.mybatis.mapperLocations=\ - classpath*:com/webank/wedatasphere/streamis/datasource/manager/dao/impl/*.xml,\ +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/streamis/datasource/manager/dao/impl/*.xml,\ classpath*:com/webank/wedatasphere/streamis/project/server/dao/impl/*.xml,\ classpath*:com/webank/wedatasphere/streamis/jobmanager/launcher/dao/impl/*.xml,\ classpath*:com/webank/wedatasphere/streamis/jobmanager/manager/dao/impl/*.xml,\ - classpath*:com/webank/wedatasphere/streamis/projectmanager/dao/impl/*.xml + classpath*:com/webank/wedatasphere/streamis/projectmanager/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/streamis/audit/log/dao/impl/*.xml wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.streamis.datasource.manager.domain,\ com.webank.wedatasphere.streamis.jobmanager.launcher.entity,\ com.webank.wedatasphere.streamis.jobmanager.manager.entity,\ com.webank.wedatasphere.streamis.jobmanager.manager.entity.vo,\ com.webank.wedatasphere.streamis.jobmanager.launcher.entity.vo,\ - com.webank.wedatasphere.streamis.projectmanager.entity + com.webank.wedatasphere.streamis.projectmanager.entity,\ + com.webank.wedatasphere.streamis.audit.log.entity wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.streamis.datasource.manager.dao,\ @@ -59,10 +61,41 @@ wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.streamis.datasourc com.webank.wedatasphere.streamis.project.server.dao,\ com.webank.wedatasphere.streamis.jobmanager.launcher.dao,\ com.webank.wedatasphere.streamis.jobmanager.manager.dao,\ - com.webank.wedatasphere.streamis.projectmanager.dao + com.webank.wedatasphere.streamis.projectmanager.dao,\ + com.webank.wedatasphere.streamis.audit.log.dao # Make sure that can fetch the application info finally wds.streamis.application.info.fetch.max=20 # To use the complete features of streamis in linkis 1.1.2 -#wds.streamis.launch.flink.linkis.release.version=1.1.2 \ No newline at end of file +#wds.streamis.launch.flink.linkis.release.version=1.1.2 + +#strict check switch:check whether projectName is the same as the one in meta.json +wds.streamis.project.name.strict.check.enable=true + +#check high available +wds.streamis.app.highavailable.enable=true + +#auto restart job +wds.streamis.app.highavailable.auto.restart.job=true + +#cluster name +wds.streamis.highavailable.cluster.name=BDAP_UAT + +#whether manager +wds.streamis.whether.manager.cluster=true + +# audit log +wds.streamis.log.audit.store.enable=true +wds.streamis.log.audit.uri.skip= + +#productName check switch +wds.linkis.flink.product.key.enable=true +#upload authentication +wds.streamis.standard.authentication.key=true +#edit jobContent enable +wds.streamis.job.content.edit.enable=true +#edit jobConfig enable +wds.streamis.job.config.edit.enable=true +#not upgrade linkis version +flink.app.args.separate=' ' \ No newline at end of file diff --git a/web/package.json b/web/package.json index ee7463f18..aab79d38b 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "streamis", - "version": "0.3.0", + "version": "0.3.1", "private": true, "scripts": { "serve": "vue-cli-service serve", @@ -23,21 +23,21 @@ ] }, "dependencies": { - "axios": "0.19.2", + "axios": "1.6.4", "babel-polyfill": "6.26.0", "core-js": "2.6.11", - "dexie": "2.0.4", + "dexie": "3.0.4", "dt-sql-parser": "1.2.1", "eslint": "6.8.0", "eslint-plugin-vue": "6.2.2", "highlight.js": "9.18.3", - "lodash": "4.17.20", + "lodash": "4.17.21", "md5": "2.3.0", "mitt": "1.2.0", - "moment": "2.29.1", + "moment": "2.29.4", "monaco-editor": "0.19.3", "pinyin": "2.9.1", - "qs": "6.9.4", + "qs": "6.9.7", "reconnecting-websocket": "4.4.0", "sql-formatter": "2.3.3", "svgo": "1.3.0", diff --git a/web/public/config.js b/web/public/config.js new file mode 100644 index 000000000..e6fcce151 --- /dev/null +++ b/web/public/config.js @@ -0,0 +1,9 @@ +/** + * 知识库URL + * kn.dss.com + */ +window.knowledgeLibraryUrl = "http://kn.dss.com/" +// 是否允许上传、配置、arge参数编辑 true 测试 false 生产 +window.enableUpload = true +// 水印中region字段的设置 +window.watermarkRegion = "主" diff --git a/web/public/index.html b/web/public/index.html index 69dbcd418..684e485c5 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -23,6 +23,7 @@ DataSphere Studio +