commit 6fba583b62b215c95f26e352310c7276e585bf98 Author: 不考上研不改网名 <6562515+yuwencode@user.noreply.gitee.com> Date: Tue Oct 28 15:13:57 2025 +0800 init:初始化最原始代码 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..19bfc33 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ + *.js linguist-language=java *.css linguist-language=java *.html linguist-language=java \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2057f71 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*/target/** +!kgmaker/.mvn/wrapper/maven-wrapper.jar +.mvn/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +.mvn +*.iml +*.ipr +*.class +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/kgBuilder-ui/.history/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..65be5f2 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +## 初衷 +这是一个知识图谱构建工具,最开始是对产品和领导为了做ppt临时要求配合做图谱展示的不厌其烦,做着做着就抽出一个目前看着还算通用的小工具,知识图谱可视化,仅供做知识图谱的小伙伴参考 +## 技术栈 +小工具是前台是基于vue + d3.js ,后台是springboot配合Neo4j. +## 演示 +demo地址:[http://kg.miaoleyan.com](http://kg.miaoleyan.com) + +## 实现的基本功能: +1. 新增节点,添加连线,快速添加节点和关系 +2. 节点的颜色和大小可修改 +3. 节点和关系的编辑,删除 +4. 导出成图片 +5. csv导入 +6. 导出csv +7. 添加图片和富文本 +8. 节点之间多个关系 + +## 后续优化: +1. 接入数据源 +2. 构建er图 +3. 根据er图生成图谱 + +## 运行与启动 +### 安装jdk +可参考:[https://blog.csdn.net/qq_42003566/article/details/82629570](https://blog.csdn.net/qq_42003566/article/details/82629570) +### 安装Neo4j +可参考:[https://www.cnblogs.com/ljhdo/p/5521577.html](https://www.cnblogs.com/ljhdo/p/5521577.html),注意开放外网访问 0.0.0.0 +### IDEA 导入项目 +导入成功后对着项目根目录,右键->maven->reimport,等待其执行完成,倘若下载jar包太慢,自己配置外部maven仓库[https://blog.csdn.net/liu_shi_jun/article/details/78733633](https://blog.csdn.net/liu_shi_jun/article/details/78733633) +以上配置在linux下配置自行百度 +### 找到目录 src/main/resources +修改application.yml,neo4配置url,password,改成自己的,同理修改mysql(mysql脚本在根目录下,knowledgegraph.sql) +### 打包发布 +在idea 右侧 有 maven project 工具栏,点击展开lifecycle-clean,然后install,等待完成后在控制台可以看见打包的目录, +例如:[INFO] Installing F:\git\Neo4j\kgmaker\target\kgmaker-0.0.1-SNAPSHOT.jar 复制jar包, +去windows 或者linux下 +切换到jar包目录执行jar包 +``` + java -jar xxx.jar //即可启动 +``` +想部署到tomcat自行百度,springboot配置外部tomcat +### 安装nodejs +可参考[https://blog.csdn.net/qq_46351233/article/details/120314928](https://blog.csdn.net/qq_46351233/article/details/120314928) +启动前端 +``` +1.npm install // 安装依赖 +2.npm run serve //启动 +3.npm run build //发布 +启动后访问http://localhost +``` + +### 访问路径 +启动后访问[http://localhost](http://localhost) +### 启动视频教程 +[https://www.bilibili.com/video/BV1Ki4y1D7Nj?share_source=copy_web](https://www.bilibili.com/video/BV1Ki4y1D7Nj?share_source=copy_web) +### 图谱三元组导入 +支持,.xlsx,.xls,.csv,编码格式一定要是utf-8 无bom格式的,格式:节点-节点-关系,在本地测试时上传下载的文件要和neo4j在同一台电脑,当然如果能传到七牛或者hdfs上也是一样的,必须确认neo4j能访问到,否则load不成功 +### 推荐前端组件 +G6 [https://g6.antv.vision/zh/examples/gallery](https://g6.antv.vision/zh/examples/gallery) +### 推荐图数据库 +Nebula [https://docs.nebula-graph.com.cn/2.5.1/](https://docs.nebula-graph.com.cn/2.5.1/) +## 交流 +![](./kgbuilder.jpg) +![](./kgbuilder2.jpg) diff --git a/kgBuilder-base/pom.xml b/kgBuilder-base/pom.xml new file mode 100644 index 0000000..c5b91b3 --- /dev/null +++ b/kgBuilder-base/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + com.warmer + kgbuilder + 0.0.1 + ../pom.xml + + com.warmer + kgBuilder-base + 0.0.1 + kgBuilder-base + Demo project for Spring Boot + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.projectlombok + lombok + ${lombok.version} + + + org.springframework + spring-web + + + org.springframework.boot + spring-boot-configuration-processor + true + + + mysql + mysql-connector-java + ${mysql.version} + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.version} + + + org.neo4j.driver + neo4j-java-driver + ${neo4j.version} + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper.version} + + + com.fasterxml.jackson.core + jackson-core + ${fasterxml.jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${fasterxml.jackson.version} + + + cn.hutool + hutool-core + ${hutool.version} + + + org.apache.poi + poi + 5.2.3 + + + org.apache.poi + poi-ooxml + 5.2.3 + + + + + diff --git a/kgBuilder-base/src/main/java/com/warmer/base/common/BaseEntity.java b/kgBuilder-base/src/main/java/com/warmer/base/common/BaseEntity.java new file mode 100644 index 0000000..e5d79fa --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/common/BaseEntity.java @@ -0,0 +1,89 @@ +package com.warmer.base.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.Date; + +public class BaseEntity { + public BaseEntity() { + createUser = "tan"; + updateUser = createUser; + createTime = new Date(); + updateTime = createTime; + status = 1; + } + + /** + * 记录状态 + */ + private Integer status; + /** + * 创建用户 + */ + private String createUser; + /** + * 创建时间 + */ + private Date createTime; + /** + * 修改用户 + */ + private String updateUser; + /** + * 修改时间 + */ + private Date updateTime; + + + @JsonIgnore + public Integer getStatus() { + return status; + } + + @JsonProperty + public void setStatus(Integer status) { + this.status = status; + } + + @JsonIgnore + public String getCreateUser() { + return createUser; + } + + @JsonProperty + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + @JsonIgnore + public Date getCreateTime() { + return createTime; + } + + @JsonProperty + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @JsonIgnore + public String getUpdateUser() { + return updateUser; + } + + @JsonProperty + public void setUpdateUser(String updateUser) { + this.updateUser = updateUser; + } + + @JsonIgnore + public Date getUpdateTime() { + return updateTime; + } + + @JsonProperty + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/common/FieldQueryItem.java b/kgBuilder-base/src/main/java/com/warmer/base/common/FieldQueryItem.java new file mode 100644 index 0000000..909cd98 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/common/FieldQueryItem.java @@ -0,0 +1,37 @@ +package com.warmer.base.common; + +import lombok.Data; +import lombok.ToString; + +import java.io.Serializable; + +/** + * @author tc + * 组合列之间过滤条件 + */ +@Data +@ToString +public class FieldQueryItem implements Serializable { + + /** + * 多个条件拼接 符号,or | and + */ + private String joinOperate; + /** + * 字段和值之间的关系,0 模糊匹配% 还是 1 精确匹配=, -1=值类型,比较 + */ + private Integer condition; + /** + * 操作符 > | >=| = | < |<= + */ + private String operate; + /** + * 数据库字段 + */ + private String field; + /** + * 检索文本 + */ + private String value; + +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/common/PageQuery.java b/kgBuilder-base/src/main/java/com/warmer/base/common/PageQuery.java new file mode 100644 index 0000000..0389b10 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/common/PageQuery.java @@ -0,0 +1,22 @@ +package com.warmer.base.common; + +public class PageQuery { + private int currentPage=1; + private int pageSize=10; + + public int getCurrentPage() { + return currentPage; + } + public void setCurrentPage(int currentPage) { + if(currentPage==0){ + currentPage=1; + } + this.currentPage = currentPage; + } + public int getPageSize() { + return pageSize; + } + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/common/PageRecord.java b/kgBuilder-base/src/main/java/com/warmer/base/common/PageRecord.java new file mode 100644 index 0000000..b20a71c --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/common/PageRecord.java @@ -0,0 +1,81 @@ +package com.warmer.base.common; + +import java.util.List; + +/** + * 分页的JavaBean + * @author tanc + */ +public class PageRecord { + + // 当前页,手动添加的默认值是1 + private int pageIndex = 1; + + // 总页数 + // private int totalPage; + + // 总记录数 + private int totalCount; + + // 每页显示的记录条数,每页显示5条 + private int pageSize = 5; + + // 每页显示的数据 + private List data; + + public Object getHeads() { + return heads; + } + + public void setHeads(Object heads) { + this.heads = heads; + } + + private Object heads; + + public int getPageIndex() { + return pageIndex; + } + public void setPageIndex(int pageIndex) { + this.pageIndex = pageIndex; + } + + /** + * 调用getTotalPage() 获取到总页数 + * JavaBean的属性规定:totalPage是JavaBean是属性 ${pageBean.totalPage} + * @return + */ + public int getTotalPage() { + // 计算 + int totalPage = totalCount / pageSize; + // 说明整除 + if(totalCount % pageSize == 0){ + return totalPage; + }else{ + return totalPage + 1; + } + } + + /*public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + }*/ + + public int getTotalCount() { + return totalCount; + } + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + } + public int getPageSize() { + return pageSize; + } + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + public List getData() { + return data; + } + public void setData(List data) { + this.data = data; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/enums/ReturnStatus.java b/kgBuilder-base/src/main/java/com/warmer/base/enums/ReturnStatus.java new file mode 100644 index 0000000..2a6cee1 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/enums/ReturnStatus.java @@ -0,0 +1,70 @@ +package com.warmer.base.enums; + +import lombok.Getter; + +@Getter +public enum ReturnStatus { + Success("操作成功", 200), + OPERAFAIL("操作失败", 201), + DISTINCT("存在重复数据", 202), + FILENOTFIND("文件找不到", 203), + NoUser("用户不存在", 204), + ContentError("内容格式错误", 205), + RECORD_NOT_FOUND("记录不存在", 206), + ValidateFailure("参数验证错误", 400), + SessionTimeout("会话超时", 401), + LoginFailure("登录失败", 402), + NoRight("权限不足",403), + InvalidCSRF("无效的保护令牌",404), + NoIntentResult("意图识别没有结果",405), + MoreFieldIntentResult("意图命中多个字段",408), + RequestMissingBodyError("缺少请求体!",1004), + ParameterMissingError("确少必要请求参数!",1003), + ParameterError("请求参数有误!",1002), + NotFountResource("没有找到相关资源!",1001), + Error("服务器错误", 500); + + + private final String name; + + private final Integer value; + + private ReturnStatus(String name, Integer value) { + this.name = name; + this.value = value; + } + @Override + public String toString() { + return value.toString(); + } + + public static ReturnStatus valueOf(int value) { + //手写的从int到enum的转换函数 + switch (value) { + case 200: + return Success; + case 201: + return OPERAFAIL; + case 202: + return DISTINCT; + case 203: + return FILENOTFIND; + case 204: + return NoUser; + case 205: + return ContentError; + case 206: + return RECORD_NOT_FOUND; + case 401: + return SessionTimeout; + case 402: + return LoginFailure; + case 403: + return NoRight; + case 500: + return Error; + default: + return null; + } + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/BeanUtils.java b/kgBuilder-base/src/main/java/com/warmer/base/util/BeanUtils.java new file mode 100644 index 0000000..58a5e4a --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/BeanUtils.java @@ -0,0 +1,35 @@ +package com.warmer.base.util; + +import com.github.pagehelper.PageInfo; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class BeanUtils { + + public static T trans(Object sourceObject, Class clazz) throws IOException { + return JsonHelper.parseObject(JsonHelper.toJSONString(sourceObject), clazz); + } + + public static List trans(List list, Class clazz) throws IOException { + ArrayList result = new ArrayList(); + for (Object item : list) { + result.add(trans(item, clazz)); + } + return result; + } + + public static void copyProperties(Object source, Object target) { + org.springframework.beans.BeanUtils.copyProperties(source, target); + } + + public static PageInfo transPage(PageInfo info, Class clazz) throws IOException { + PageInfo pageInfo = new PageInfo(); + copyProperties(info, pageInfo); + List trans = trans(info.getList(), clazz); + pageInfo.setList(trans); + return pageInfo; + } + +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/ColorInfo.java b/kgBuilder-base/src/main/java/com/warmer/base/util/ColorInfo.java new file mode 100644 index 0000000..3d2f9da --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/ColorInfo.java @@ -0,0 +1,42 @@ +package com.warmer.base.util; + + +public class ColorInfo { + /** + * 颜色的alpha值,此值控制了颜色的透明度 + */ + public int A; + /** + * 颜色的红分量值,Red + */ + public int R; + /** + * 颜色的绿分量值,Green + */ + public int G; + /** + * 颜色的蓝分量值,Blue + */ + public int B; + + public int toRGB() { + return this.R << 16 | this.G << 8 | this.B; + } + + public java.awt.Color toAWTColor(){ + return new java.awt.Color(this.R,this.G,this.B,this.A); + } + + public static ColorInfo fromARGB(int red, int green, int blue) { + return new ColorInfo((int) 0xff, (int) red, (int) green, (int) blue); + } + public static ColorInfo fromARGB(int alpha, int red, int green, int blue) { + return new ColorInfo(alpha, red, green, blue); + } + public ColorInfo(int a,int r, int g , int b ) { + this.A = a; + this.B = b; + this.R = r; + this.G = g; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/DateUtil.java b/kgBuilder-base/src/main/java/com/warmer/base/util/DateUtil.java new file mode 100644 index 0000000..905cebb --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/DateUtil.java @@ -0,0 +1,423 @@ +package com.warmer.base.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +/** + * 日期函数类,实现对日期的一些处理. + */ + +public class DateUtil { + /** + * 构造器。 + */ + public DateUtil() { + } + // + public static String getFormatDateTime() { + + return formatChDate(DateUtil.getCurrentDate()) + " " + + formatChTime(DateUtil.getCurrentTime()); + } + + public static String getFormatDate() { + return formatDate(getCurrentDate()); + } + + /** + * 返回显示给用户的中文格式的日期。 将yyyymmdd格式变为yyyy年mm月dd日 格式 + */ + public static String formatChDate(String date) { + try { + return date.substring(0, 4) + "年" + date.substring(4, 6) + "月" + + date.substring(6, 8) + "日"; + } catch (Exception e) { + return ""; + } + } + /** + * 返回显示给用户的中文格式的日期。 将yyyy年mm月dd日格式变为yyyymmdd格式 + */ + public static String formatEnDate(String date) { + try { + return date.substring(0, 4) + date.substring(5, 7) + + date.substring(8, 10); + } catch (Exception e) { + return ""; + } + } + + /** + * 返回显示给用户的中文格式的时间 即:将hhmm格式变为hh时mm分格式 + * + * @param time + * 日间串hhmm格式 + * @return hh时mm分 + */ + public static String formatChTime(String time) { + return time.substring(0, 2) + "时" + time.substring(2, 4) + "分"; + } + + /** + * 返回显示给用户的中文格式的时间 即:将yyyymmdd hhmmss 格式为 yyyy年mm月dd日 hh时mm分ss秒 的格式 + * + * @param dateTime + * 时间日期字符串 + * @return yyyy年mm月dd日 hh时mm分ss秒 + */ + public static String formatChDateTime(String dateTime) { + try { + return dateTime.substring(0, 4) + "年" + dateTime.substring(4, 6) + + "月" + dateTime.substring(6, 8) + "日 " + + dateTime.substring(9, 11) + "时" + + dateTime.substring(11, 13) + "分" + + dateTime.substring(13, 15) + "秒"; + } catch (Exception e) { + return ""; + } + } + + /** + * 返回显示给用户的格式的日期 即:将yyyymmdd格式变为yyyy-mm-dd格式 + * + * @param date 日期串 yyyymmdd格式 + * @return yyyy-mm-dd格式 + */ + public static String formatDate(String date) { + if(date==null || date.length()<8){ + return "Error Date"; + } + return date.substring(0, 4) + "-" + date.substring(4, 6) + "-" + + date.substring(6, 8); + } + + /** + * 返回显示给用户的格式的日期 即:将mmdd格式变为mm-dd格式 + * + * @param date + * 日期串 mmdd格式 + * @return mm-dd格式 + */ + public static String formatDate2(String date) { + return date.substring(0, 2) + "-" + date.substring(2, 4); + } + + /** + * 返回显示给用户的格式的时间 即:将hhmm格式变为hh:mm格式 + * + * @param time + * hhmm格式串 + * @return hh:mm格式 + */ + public static String formatTime(String time) { + return time.substring(0, 2) + ":" + time.substring(2, 4); + } + + /** + * 获取当前日期时间。 + * + * @return + */ + public static String getCurrentDateTime() { + return getCurrentDate() + " " + getCurrentTime(); + } + /** + * 返回当前日期 ,格式为2018年04月20日 10:34格式 + * + * @return + */ + public static String getNowDateHm() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm"); + long nowtime = System.currentTimeMillis(); + String datetime = sdf.format(nowtime); + String date = datetime.substring(0, 8); + String time = datetime.substring(8, 14); + String newDate = formatChDate(date); + return newDate+time; + } + + + /** + * 返回当前日期 ,格式为yyyymmdd格式 + * + * @return + */ + public static String getCurrentDate() { + long time = System.currentTimeMillis(); + Date date = new Date(time); + int year = 1900 + date.getYear(); + int month = date.getMonth() + 1; + int day = date.getDate(); + + String ymd = String.valueOf(year); + if (month < 10) + ymd += "0"; + ymd += String.valueOf(month); + if (day < 10) + ymd += "0"; + ymd += String.valueOf(day); + return ymd; + } + + /** + * 返回当前时间 ,格式为hhmmss格式 + * + * @return + */ + public static String getCurrentTime() { + Calendar cal = new GregorianCalendar(); + int hour = cal.get(Calendar.HOUR_OF_DAY); // 0..23 + int minute = cal.get(Calendar.MINUTE); // 0..59 + int second = cal.get(Calendar.SECOND); // 0..59 + String value = ""; + if (hour < 10) { + value += "0" + hour; + } else { + value += hour; + } + if (minute < 10) { + value += "0" + minute; + } else { + value += minute; + } + if (second < 10) { + value += "0" + second; + } else { + value += second; + } + return value; + + } + /** + * 返回要存到数据库里的日期字符串 本操作会对传入的日期进行验证 即:将yyyymmdd格式变为yyyymmdd格式 + * + * @param str + * yyyymmdd格式串 + * @return yyyymmdd格式 + */ + public static String getDate(String str) { + if (!isLegalDate(str)) + return null; + return str.substring(0, 4) + str.substring(4, 6) + str.substring(6, 8); + } + + /** + * 判断给定的字符串是否是一个合法的日期表示 本系统中的日期表示均为:YYYYMMDD。 ?表示任一字符 + * 注:这个格式是用户输入和显示给用户的,实际存到数据库里时要去掉? + * + * @param str + * 要进行处理的参数字符串 + * @return boolean true or false + */ + public static boolean isLegalDate(String str) { + String tmp = str.trim(); + // if(tmp.length()!=8) return false; + try { + int year = Integer.parseInt(tmp.substring(0, 4)); + if (year < 1900 || year > 3000) + return false; + int month = Integer.parseInt(tmp.substring(4, 6)); + if (month < 1 || month > 12) + return false; + int day = Integer.parseInt(tmp.substring(6, 8)); + if (day < 1) + return false; + if (month == 2) { + if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) { + if (day > 29) + return false; + } else if (day > 28) + return false; + } else if (((month == 1) || (month == 3) || (month == 5) + || (month == 7) || (month == 8) || (month == 10) || (month == 12)) + && day > 31) + return false; + else if (((month == 4) || (month == 6) || (month == 9) || (month == 11)) + && day > 30) + return false; + } catch (Exception e) { + return false; + } + return true; + } + + /** + * 返回显示给用户的格式的日期 即:将yyyy-mm-dd格式变为yyyymmdd格式 + * + * @param date + * yyyy-mm-dd格式串 + * @return + */ + public static String unformatDate(String date) { + if(null==date || "".equals(date)){ + + }else{ + date = date.substring(0, 4) + date.substring(5, 7) + + date.substring(8, 10); + } + return date; + } + + /** + * 传入一个日期,加上或减去一个数后,得到新的日期 + * + * @param psDate + * String + * @param piValue + * int + * @return String + */ + public static String getBeforeDate(String psDate, int piValue) { + int year, month, day; + String asDate; + Calendar cl = Calendar.getInstance(); + year = Integer.valueOf(psDate.substring(0, 4)).intValue(); + cl.set(cl.YEAR, year); + // Calendar的月份是从0开始的 + month = Integer.valueOf(psDate.substring(4, 6)).intValue() - 1; + cl.set(cl.MONTH, month); + day = Integer.valueOf(psDate.substring(6)).intValue(); + cl.set(cl.DAY_OF_MONTH, day); + cl.add(cl.DATE, piValue); + year = cl.get(cl.YEAR); + month = cl.get(cl.MONDAY) + 1; + day = cl.get(cl.DAY_OF_MONTH); + asDate = String.valueOf(year); + if (month < 10) + asDate += "0" + String.valueOf(month); + else + asDate += String.valueOf(month); + if (day < 10) + asDate += "0" + String.valueOf(day); + else + asDate += String.valueOf(day); + return asDate; + } + + /** + * 取某个月的最后一天 + * + * @param psYear + * String + * @param psMon + * String + * @return String + */ + public static String getLastDay(String psYear, String psMon) { + int year, month; + year = Integer.valueOf(psYear).intValue(); + month = Integer.valueOf(psMon).intValue(); + if (month == 12) { + year += 1; + month = 0; + } + Calendar cl = Calendar.getInstance(); + cl.set(cl.YEAR, year); + cl.set(cl.MONTH, month); + cl.set(cl.DAY_OF_MONTH, 1); + cl.add(cl.DATE, -1); + return String.valueOf(cl.get(cl.DAY_OF_MONTH)); + } + + /** + * 输入两个日期,算之前相差多少天 + * + * @param psDate1 + * String 2008-09-09 OR 20080909 + * @param psDate2 + * String 2008-09-09 OR 20080909 + * @return int + */ + public static long getNumberOfDays(String psDate1, String psDate2) { + psDate1 = psDate1.replace('-', '/'); + psDate2 = psDate2.replace('-', '/'); + try { + + psDate1 = psDate1.substring(0, 4) + "/" + psDate1.substring(4, 6) + + "/" + psDate1.substring(6, 8); + psDate2 = psDate2.substring(0, 4) + "/" + psDate2.substring(4, 6) + + "/" + psDate2.substring(6, 8); + + Date dt1 = new Date(psDate1); + Date dt2 = new Date(psDate2); + long l = dt1.getTime() - dt2.getTime(); + l = l / 60 / 60 / 1000 / 24; + return Math.abs(l); + } catch (Exception e) { + return -1; + } + + } + + /** + * 算两个日期之间一共有几个月 + * + * @param qsrq + * @param jzrq + * @return + */ + public static Integer getNumOfMonths(String qsrq, String jzrq) { + Integer qs = Integer.parseInt(qsrq.substring(0, 4)) * 12 + + Integer.parseInt(qsrq.substring(4, 6)); + Integer jz = Integer.parseInt(jzrq.substring(0, 4)) * 12 + + Integer.parseInt(jzrq.substring(4, 6)); + return jz - qs + 1; + } + + /** + * 得到下个月 + * @param rq + * @return + */ + public static String getNextMonth(String rq) { + Integer nf = Integer.parseInt(rq.substring(0, 4)); + Integer yf = Integer.parseInt(rq.substring(4, 6)); + yf = yf + 1; + if (yf > 12) { + yf = 1; + nf = nf + 1; + } + return yf >= 10 ? nf.toString() + yf.toString() : nf.toString() + + "0" + yf.toString(); + } + + /** + * 通过两个日期(起始和截至)得到第几年 + * @param args + */ + public static Integer getYear(String qsrq,String jzrq){ + int m = DateUtil.getNumOfMonths(qsrq, jzrq); + int year = m%12==0?m/12:m/12+1; + return year; + } + /** + * 得到中文格式 2011年 04月 + * @param date 201104 + * @return + */ + public static String formatYearAndMonth(String date){ + return date.substring(0,4)+"年"+date.substring(4,6)+"月"; + } + /** + * 获取现在时间 + * + * @return 返回时间类型 yyyy-MM-dd HH:mm:ss + */ + public static Date getDateNow() { + Date currentTime = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String dateString = formatter.format(currentTime); + //ParsePosition pos = new ParsePosition(18); + Date currentTime_2 = null; + try { + currentTime_2 = formatter.parse(dateString); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return currentTime_2; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/DbUtils.java b/kgBuilder-base/src/main/java/com/warmer/base/util/DbUtils.java new file mode 100644 index 0000000..dc60e8f --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/DbUtils.java @@ -0,0 +1,615 @@ +package com.warmer.base.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.warmer.base.common.FieldQueryItem; +import com.warmer.base.common.PageRecord; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.jdbc.core.JdbcTemplate; + +import javax.sql.DataSource; +import java.sql.*; +import java.util.*; +import java.util.stream.Collectors; + +public class DbUtils { + private static Logger log = LoggerFactory.getLogger(Neo4jUtil.class); + + private static HashMap urlAndJdbcTemplate = new HashMap<>(); + + /** + * 获取数据库字典信息(mysql8.0可用) + */ + public static HashMap>> getMetaData(String dbType, String dbName, String jdbcUrl, String username, String password, String driverClassName) { + ResultSet rs = null; + PreparedStatement pst = null; + Connection conn = getConnection(jdbcUrl, username, password, driverClassName); + ArrayList tableList = getTables(dbType, dbName, username, password, driverClassName, jdbcUrl); + HashMap>> result = new HashMap<>(); + dbType = dbType.toLowerCase(); + try { + //遍历表获取字段及字段类型 + for (String tableName : tableList) { + ArrayList> arrayList = new ArrayList<>(); + //获取表 + String sql = getTableColumnSQL(dbType, dbName, tableName); + if (StringUtil.isNotBlank(sql)) { + arrayList.addAll(getColumnItemByTable(conn, tableName, dbName, dbType)); + result.put(tableName, arrayList); + } + } + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(rs, pst, conn); + } + return result; + } + + public static HashMap>> getMetaData(String dbType, String dbName, String jdbcUrl, String username, String password, String driverClassName,List tableList) { + + HashMap>> result = new HashMap<>(); + dbType = dbType.toLowerCase(); + Connection conn = getConnection(jdbcUrl, username, password, driverClassName); + try { + //遍历表获取字段及字段类型备注 + for (String tableName : tableList) { + //获取表 + ArrayList> columnItems = getColumnItemByTable(conn, tableName, dbName,dbType); + result.put(tableName, columnItems); + } + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(null, null, conn); + } + return result; + } + + private static String getTableColumnSQL(String dbType, String dbName, String tableName) { + String sql = ""; + switch (dbType.toLowerCase()) { + case "mysql": + case "mariadb": + sql = String.format("select column_name as FieldName, column_comment as AliaName,column_type as FieldType,IF(column_key='PRI',1,0) as IsPrimary from INFORMATION_SCHEMA.Columns where table_name='%s' and table_schema='%s'",tableName,dbName); + break; + case "hive": + sql = "select TBL_ID, TBL_NAME, COLUMNS_V2.CD_ID, COLUMNS_V2.COLUMN_NAME as FieldName, COLUMNS_V2.COMMENT as AliaName from TBLS left join SDS on TBLS.SD_ID = SDS.SD_ID left join COLUMNS_V2 on SDS.CD_ID = COLUMNS_V2.CD_ID where TBLS.TBL_NAME ='" + tableName + "'"; + break; + case "postgresql": + sql = "select a.attname as FieldName, d.description as AliaName from pg_class c, pg_attribute a, pg_description d where c.relname ='" + tableName + "'" + " and a.attnum>0 and a.attrelid = c.oid and d.objoid = a.attrelid and d.objsubid = a.attnum"; + break; + case "oracle": + sql = "select column_name as FieldName, comments as AliaName from user_col_comments where table_name= '" + tableName + "'"; + break; + case "sqlserver": + sql = "select a.name as table_name, b.name as FieldName, c.value as AliaName from sys.tables a inner join sys.columns b on b.object_id = a.object_id left join sys.extended_properties c on c.major_id = b.object_id and c.minor_id = b.column_id where a.name = '" + tableName + "'"; + break; + default: + } + return sql; + } + + + /** + * 获取指定url(库)的所有表 + */ + public static ArrayList getTables(String dbType, String dbName, String username, String password, String driverClassName, String jdbcUrl) { + ResultSet rs = null; + PreparedStatement pst = null; + Connection conn = null; + //数据库的所有表名称 + ArrayList tableList = new ArrayList<>(); + + dbType = dbType.toLowerCase(); + String sql = getTableNameSQL(dbType, dbName); + if (StringUtil.isNotBlank(sql)) { + try { + conn = getConnection(jdbcUrl, username, password, driverClassName); + pst = conn.prepareStatement(sql); + rs = pst.executeQuery(); + while (rs.next()) { + tableList.add(rs.getString(1)); + } + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(rs, pst, conn); + } + } + return tableList; + } + private static void closeResource(ResultSet rs, Statement pst, Connection conn) { + try { + if (rs != null && !rs.isClosed()) { + rs.close(); + } + if (pst != null && !pst.isClosed()) { + pst.close(); + } + if (conn != null && !conn.isClosed()) { + conn.close(); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + } + private static String getTableNameSQL(String dbType, String dbName) { + String sql = ""; + switch (dbType) { + case "mysql": + case "mariadb": + sql = "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'"; + break; + case "hive": + sql = "show tables"; + break; + case "postgresql": + sql = "select tablename from pg_tables where schemaname='" + dbName + "'"; + break; + case "oracle": + sql = "select t.table_name from user_tables t"; + break; + case "sqlserver": + sql = "select sysobjects.name from sysobjects where xtype='U'"; + break; + default: + } + return sql; + } + + /** + * 获取视图 + */ + public static ArrayList getViews(String dbType, String dbName, String username, String password, String driverClassName, String jdbcUrl, + int MaximumPoolSize) { + ResultSet rs = null; + PreparedStatement pst = null; + Connection conn = null; + ArrayList viewNameList = new ArrayList<>(); + dbType = dbType.toLowerCase(); + String sql = getViewNameSQL(dbType, dbName); + if (StringUtil.isNotBlank(sql)) { + try { + conn = getConnection(jdbcUrl, username, password, driverClassName); + pst = conn.prepareStatement(sql); + rs = pst.executeQuery(); + while (rs.next()) { + viewNameList.add(rs.getString(1)); + } + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(rs, pst, conn); + } + } + return viewNameList; + } + private static Connection getConnection(String jdbcUrl, String username, String password, String driverClassName) { + Connection conn = null; + try { + String cacheKey = getCacheKey(jdbcUrl, username); + if (urlAndJdbcTemplate.containsKey(cacheKey)) { + conn = urlAndJdbcTemplate.get(cacheKey).getDataSource().getConnection(); + } else { + // 加载驱动 + Class.forName(driverClassName); + // 获取链接 + conn = DriverManager.getConnection(jdbcUrl, username, password); + } + } catch (Exception e) { + log.error(e.getMessage());; + } + return conn; + } + private static String getViewNameSQL(String dbType, String dbName) { + String sql = ""; + switch (dbType) { + case "mysql": + case "mariadb": + sql = "SHOW TABLE STATUS WHERE COMMENT='view'"; + break; + case "postgresql": + sql = "SELECT viewname FROM pg_views WHERE schemaname = '" + dbName + "'"; + break; + case "oracle": + sql = "select * from user_views"; + break; + case "sqlserver": + sql = "SELECT * FROM INFORMATION_SCHEMA.VIEWS"; + break; + default: + } + return sql; + } + private static String getCacheKey(String jdbcUrl, String userName) { + return jdbcUrl + ":" + userName; + } + /** + * 获取指定表的字段信息 + */ + public static ArrayList> getColumnItemByTable(String username, String password, String driverClassName, String jdbcUrl, + int MaximumPoolSize, String tableName, String dbName, String dbType) { + Connection conn = null; + ArrayList> arrayList = new ArrayList<>(); + try { + conn = getConnection(jdbcUrl, username, password, driverClassName); + arrayList = getColumnItemByTable(conn,tableName,dbName,dbType); + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(null,null, conn); + } + return arrayList; + } + public static ArrayList> getColumnItemByTable(Connection conn, String tableName, String dbName, String dbType) { + ResultSet rs = null; + PreparedStatement pst = null; + ArrayList> arrayList = new ArrayList<>(); + try { + String sql = getTableColumnSQL(dbType, dbName, tableName); + pst = conn.prepareStatement(sql); + rs = pst.executeQuery(); + while (rs.next()) { + HashMap fieldMap = new HashMap<>(); + fieldMap.put("ColumnName", rs.getString("FieldName")); + fieldMap.put("ColumnAlia", rs.getString("AliaName")); + fieldMap.put("ColumnType", rs.getString("FieldType")); + fieldMap.put("IsPrimary", rs.getString("IsPrimary")); + arrayList.add(fieldMap); + } + } catch (Exception e) { + log.error(e.getMessage());; + } finally { + closeResource(rs, pst, null); + } + return arrayList; + } + /** + * 获取jdbc模板 + */ + private static synchronized JdbcTemplate getJDBCTemplate(String username, String password, String driverClassName, String jdbcUrl, + int MaximumPoolSize) { + String cacheKey = getCacheKey(jdbcUrl, username); + if (!urlAndJdbcTemplate.containsKey(cacheKey)) { + HikariConfig dataSourceConfig = new HikariConfig(); + dataSourceConfig.setUsername(username); + dataSourceConfig.setPassword(password); + dataSourceConfig.setDriverClassName(driverClassName); + dataSourceConfig.setJdbcUrl(jdbcUrl); + dataSourceConfig.setMaximumPoolSize(MaximumPoolSize); + dataSourceConfig.setMinimumIdle(1); + DataSource ds = new HikariDataSource(dataSourceConfig); + JdbcTemplate jdbcTemplate = new JdbcTemplate(ds); + urlAndJdbcTemplate.put(cacheKey, jdbcTemplate); + return jdbcTemplate; + } else { + return urlAndJdbcTemplate.get(cacheKey); + } + } + + + /** + * 分页获取表中的数据 + */ + public static PageRecord> getTableInfoByPage(int pageIndex, int pageSize, String dbType, String dbName, String jdbcUrl, String tableName, String username, String password, String driverClassName, + int MaximumPoolSize, int selectType, String selectMessage) { + // 分类创建jdbcUrl及sql + // 创建pageBean对象 + PageRecord> pageRecord = new PageRecord>(); + dbType = dbType.toLowerCase(); + try { + JdbcTemplate jdbcTemplate = getJDBCTemplate(username, password, driverClassName, jdbcUrl, MaximumPoolSize); + String sql = getQuerySQL(selectType, selectMessage, dbType, tableName, dbName, pageIndex, pageSize, jdbcTemplate); + if (StringUtil.isNotBlank(sql)) { + // 赋值当前页 + List> arrayList = new ArrayList<>(); + if (dbType.equals("hive")) { + List> queryForList = jdbcTemplate.queryForList(sql); + for (Map map : queryForList) { + Map m = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + String mapKey = entry.getKey(); + mapKey = mapKey.substring(mapKey.lastIndexOf(".") + 1); + Object mapValue = entry.getValue(); + m.put(mapKey, mapValue); + } + arrayList.add(m); + } + + } else { + arrayList = jdbcTemplate.queryForList(sql); + } + + pageRecord.setPageIndex(pageIndex); + // 赋值一页的项目数 + pageRecord.setPageSize(pageSize); + // 赋值总记录数 + Object[] params = null; + String countsql = getQueryCountSQL(tableName, selectType, selectMessage, dbType, dbName); + Integer totalCount = jdbcTemplate.queryForObject(countsql, params, Integer.class); + pageRecord.setTotalCount(totalCount); + // 赋值每页项目 + pageRecord.setData(arrayList); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return pageRecord; + } + public static PageRecord> getTableInfoByPage(int pageIndex, int pageSize, String dbType, String dbName, String jdbcUrl, String tableName, String username, String password, String driverClassName, + int maximumPoolSize, List filterItems) { + return getTableInfoByPage(pageIndex,pageSize,dbType,dbName,jdbcUrl,tableName,username,password,driverClassName,maximumPoolSize,filterItems,null); + } + + public static PageRecord> getTableInfoByPage(int pageIndex, int pageSize, String dbType, String dbName, String jdbcUrl, String tableName, String username, String password, String driverClassName, + int MaximumPoolSize, List filterItems,List columns) { + // 分类创建jdbcUrl及sql + // 创建pageBean对象 + PageRecord> pageRecord = new PageRecord>(); + dbType = dbType.toLowerCase(); + try { + JdbcTemplate jdbcTemplate = getJDBCTemplate(username, password, driverClassName, jdbcUrl, MaximumPoolSize); + String sql = getQuerySQL(filterItems, dbType, tableName, dbName, pageIndex, pageSize, jdbcTemplate,columns); + if (StringUtil.isNotBlank(sql)) { + // 赋值当前页 + List> arrayList = new ArrayList<>(); + if (dbType.equals("hive")) { + List> queryForList = jdbcTemplate.queryForList(sql); + for (Map map : queryForList) { + Map m = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + String mapKey = entry.getKey(); + mapKey = mapKey.substring(mapKey.lastIndexOf(".") + 1); + Object mapValue = entry.getValue(); + m.put(mapKey, mapValue); + } + arrayList.add(m); + } + + } else { + arrayList = jdbcTemplate.queryForList(sql); + } + if(arrayList.size()>0){ + List headFields = new ArrayList<>(arrayList.get(0).keySet()); + pageRecord.setHeads(headFields); + } + pageRecord.setPageIndex(pageIndex); + // 赋值一页的项目数 + pageRecord.setPageSize(pageSize); + // 赋值总记录数 + Object[] params = null; + String countSql = getQueryCountSQL(tableName, filterItems, dbType, dbName); + Integer totalCount = jdbcTemplate.queryForObject(countSql, params, Integer.class); + pageRecord.setTotalCount(totalCount); + // 赋值每页项目 + pageRecord.setData(arrayList); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return pageRecord; + } + + public static int getTableDataNum(String dbType, String dbName, String jdbcUrl, String tableName, String username, String password, String driverClassName, + int MaximumPoolSize) { + JdbcTemplate jdbcTemplate = null; + String sql = getQueryCountSQL(tableName, 0, "", dbType, dbName); + try { + jdbcTemplate = getJDBCTemplate(username, password, driverClassName, jdbcUrl, MaximumPoolSize); + } catch (Exception e) { + log.error(e.getMessage());; + } + // 赋值总记录数 + Object[] params = null; + Integer count = jdbcTemplate.queryForObject(sql, params, Integer.class); + return count; + } + private static String getQueryCountSQL(String tableName, int selectType, String selectMessage, String dbType, String dbName) { + String countsql = ""; + switch (dbType) { + case "sqlserver": + countsql = "select rows from sysindexes where indid<2 and id = object_id('" + tableName + "')"; + break; + case "postgresql": + countsql = "select count(1) from " + dbName + "." + tableName; + break; + default: + countsql = "select count(1) from " + tableName; + if (selectType == 1) { + String whereSQL = getWhereSQL(selectMessage); + countsql = countsql + whereSQL; + } + } + return countsql; + } + private static String getQueryCountSQL(String tableName, List filterItems, String dbType, String dbName) { + String countsql = ""; + switch (dbType) { + case "sqlserver": + countsql = "select rows from sysindexes where indid<2 and id = object_id('" + tableName + "')"; + break; + case "postgresql": + countsql = "select count(1) from " + dbName + "." + tableName; + break; + default: + countsql = "select count(1) from " + tableName; + } + String whereSQL = buildWhereSql(dbType,filterItems); + if(StringUtil.isNotBlank(whereSQL)){ + countsql=String.format(" %s where %s",countsql,whereSQL); + } + return countsql; + } + private static String getQuerySQL(int selectType, String selectMessage, String dbType, String tableName, String dbName, int pageIndex, int pageSize, JdbcTemplate jdbcTemplate) { + String sql = ""; + if (selectType == 0) { + switch (dbType) { + case "mysql": + case "mariadb": + case "hive": + sql = "select * from " + tableName + " limit " + ((pageIndex - 1) * pageSize) + " ," + pageSize; + break; + case "postgresql": + sql = "select * from " + dbName + "." + tableName + " limit " + pageSize + " offset " + ((pageIndex - 1) * pageSize); + break; + case "oracle": + sql = "select t.* from (select e.*,rownum rn from " + tableName + " e) t where t.rn between " + + ((pageIndex - 1) * pageSize + 1) + " and " + pageSize * pageIndex; + break; + case "sqlserver": + // 获取表中第一个字段名 + String columnName = jdbcTemplate.queryForRowSet("select top 1 * from " + tableName).getMetaData().getColumnName(1); + sql = "select * from " + tableName + " order by " + columnName + " offset " + + ((pageIndex - 1) * pageSize) + " row fetch next " + pageSize + " row only"; + break; + default: + } + } else if (selectType == 1) { + String whereSQL = getWhereSQL(selectMessage); + switch (dbType) { + case "mysql": + case "mariadb": + case "hive": + sql = "select * from " + tableName + whereSQL + " limit " + ((pageIndex - 1) * pageSize) + " ," + pageSize; + break; + case "postgresql": + sql = "select * from " + dbName + "." + tableName + whereSQL + " limit " + pageSize + " offset " + ((pageIndex - 1) * pageSize); + sql = sql.replaceAll("`", ""); + break; + case "oracle": + sql = "select t.* from (select e.*,rownum rn from " + tableName + " e " + whereSQL + ") t where t.rn between " + + ((pageIndex - 1) * pageSize + 1) + " and " + pageSize * pageIndex; + break; + case "sqlserver": + whereSQL = whereSQL.replaceAll("`", ""); + // 获取表中第一个字段名 + String columnName = jdbcTemplate.queryForRowSet("select top 1 * from " + tableName).getMetaData().getColumnName(1); + sql = "select * from " + tableName + whereSQL + " order by " + columnName + " offset " + + ((pageIndex - 1) * pageSize) + " row fetch next " + pageSize + " row only"; + break; + default: + } + } else if (selectType == 2) { + sql = selectMessage; + } + return sql; + } + + private static String getQuerySQL( List filterItems,String dbType, String tableName, String dbName, int pageIndex, int pageSize, JdbcTemplate jdbcTemplate) { + return getQuerySQL(filterItems,dbType,tableName,dbName,pageIndex,pageSize,jdbcTemplate,null); + } + + private static String getQuerySQL( List filterItems,String dbType, String tableName, String dbName, int pageIndex, int pageSize, JdbcTemplate jdbcTemplate,List columns) { + String sql = ""; + String whereSQL = buildWhereSql(dbType,filterItems); + if(StringUtil.isNotBlank(whereSQL)){ + whereSQL=String.format(" where %s ",whereSQL); + } + String columnsStr="*"; + if(columns!=null&&columns.size()>0){ + columnsStr=String.join(",",columns); + } + switch (dbType) { + case "mysql": + case "mariadb": + case "hive": + sql = "select "+columnsStr+" from " + tableName + whereSQL + " limit " + ((pageIndex - 1) * pageSize) + " ," + pageSize; + break; + case "postgresql": + sql = "select "+columnsStr+" from " + dbName + "." + tableName + whereSQL + " limit " + pageSize + " offset " + ((pageIndex - 1) * pageSize); + sql = sql.replaceAll("`", ""); + break; + case "oracle": + if(columns!=null&&columns.size()>0){ + columnsStr=columns.stream().map(n->String.format("t.%s",n)).collect(Collectors.joining(",")); + } + sql = "select "+columnsStr+" from (select e.*,rownum rn from " + tableName + " e " + whereSQL + ") t where t.rn between " + + ((pageIndex - 1) * pageSize + 1) + " and " + pageSize * pageIndex; + break; + case "sqlserver": + whereSQL = whereSQL.replaceAll("`", ""); + // 获取表中第一个字段名 + String columnName = jdbcTemplate.queryForRowSet("select top 1 * from " + tableName).getMetaData().getColumnName(1); + sql = "select "+columnsStr+" from " + tableName + whereSQL + " order by " + columnName + " offset " + + ((pageIndex - 1) * pageSize) + " row fetch next " + pageSize + " row only"; + break; + default: + } + return sql; + } + private static String getWhereSQL(String selectMessage) { + StringBuilder ret = new StringBuilder(); + ret.append(" where "); + try { + List> array = JsonHelper.parseObject(selectMessage, new TypeReference>>() { + }); + if (array.size() > 0) { + for (Map map : array) { + if (map.get("relation").equals("not")) { + ret.append(" and " + "`" + map.get("fieldname") + "`" + " not like " + "'" + map.get("fieldval") + "'" + " "); + } else { + ret.append(map.get("relation") + " ").append("`" + map.get("fieldname") + "`" + " ").append(map.get("fieldrel") + " ").append("'" + map.get("fieldval") + "'" + " "); + } + + } + } + } catch (JsonProcessingException e) { + log.error(e.getMessage());; + } + return ret.toString(); + } + + private static String buildWhereSql(String dbType,List filterItems) { + StringBuilder builder = new StringBuilder(); + if (filterItems != null && filterItems.size() > 0) { + int i=0; + for (FieldQueryItem item : filterItems) { + if (StringUtil.isBlank(item.getValue()) || StringUtil.isBlank(item.getJoinOperate()) || item.getCondition() == null) { + continue; + } + String str =""; + switch (dbType.toLowerCase()){ + case "mongo": + break; + default://mysql ,postgresql,sqlserver,oracle + if(item.getCondition()==-1){ + str=String.format(" %s ( %s%s'%s') ", i == 0 ? "" : item.getJoinOperate(), item.getField(), item.getOperate(), item.getValue()); + }else { + str=String.format(" %s ( %s%s'%s') ", i == 0 ? "" : item.getJoinOperate(), item.getField(), "like", "%"+item.getValue()+"%"); + } + break; + } + if(StringUtil.isNotBlank(str)){ + builder.append(str); + } + i++; + } + } + return builder.toString(); + } + + private static List parserFieldList(String sql) { + List result = null; + try { + sql = sql.toLowerCase(); + String field = sql.substring(7, sql.indexOf(" from ")); + String[] fieldList = field.split(","); + List fields = Arrays.stream(fieldList).map(n -> { + if (n.contains(" as ")) { + n = n.substring(n.lastIndexOf("as") + 2).trim(); + } + n = n.replace("`", ""); + return n; + }).collect(Collectors.toList()); + result = fields; + } catch (Exception e) { + log.error(e.getMessage());; + } + return result; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/ExcelUtil.java b/kgBuilder-base/src/main/java/com/warmer/base/util/ExcelUtil.java new file mode 100644 index 0000000..c4f9b23 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/ExcelUtil.java @@ -0,0 +1,96 @@ +package com.warmer.base.util; + +import org.apache.poi.openxml4j.opc.OPCPackage; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +public class ExcelUtil { + // *************xlsx文件读取函数************************ + // 在jdbc.properties上加上 excelUrl:xlsx文件的目录 + // excel_name为文件名,arg为需要查询的列号(输入数字则返回对应列 , 输入字符串则固定返回这个字符串) + // 返回 + @SuppressWarnings({ "resource", "unused" }) + public static ArrayList> xlsx_reader(String excel_name, ArrayList args) + throws IOException { + // 读取excel文件夹url + + String excelUrl = ""; + File xlsxFile = new File(excelUrl + excel_name); + if (!xlsxFile.exists()) { + System.err.println("Not found or not a file: " + xlsxFile.getPath()); + return null; + } + ArrayList> excel_output = new ArrayList>(); + try { + OPCPackage p; + // p = OPCPackage.open(xlsxFile.getPath(), PackageAccess.READ); + /* + * XLSX2CSV xlsx2csv = new XLSX2CSV(p, 20); // 20代表最大列数 xlsx2csv.process(); + * excel_output = xlsx2csv.get_output(); + */ + // p.close(); //释放 + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + ArrayList> ans = new ArrayList>(); + // 遍历xlsx中的sheet + + // 对于每个sheet,读取其中的每一行 + for (int rowNum = 0; rowNum < excel_output.size(); rowNum++) { + ArrayList cur_output = excel_output.get(rowNum); + ArrayList curarr = new ArrayList(); + for (int columnNum = 0; columnNum < args.size(); columnNum++) { + Object obj = args.get(columnNum); + if (obj instanceof String) { + curarr.add(obj.toString()); + } else if (obj instanceof Integer) { + String cell = cur_output.get((int) obj); + curarr.add(cell); + } else { + System.out.print("类型错误!"); + return null; + } + } + ans.add(curarr); + } + + return ans; + } + + // // 判断后缀为xlsx的excel文件的数据类 + // @SuppressWarnings("deprecation") + // private static String getValue(XSSFCell xssfRow) { + // if (xssfRow == null) { + // return null; + // } + // if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) { + // return String.valueOf(xssfRow.getBooleanCellValue()); + // } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) { + // double cur = xssfRow.getNumericCellValue(); + // long longVal = Math.round(cur); + // Object inputValue = null; + // if (Double.parseDouble(longVal + ".0") == cur) + // inputValue = longVal; + // else + // inputValue = cur; + // return String.valueOf(inputValue); + // } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BLANK + // || xssfRow.getCellType() == xssfRow.CELL_TYPE_ERROR) { + // return ""; + // } else { + // return String.valueOf(xssfRow.getStringCellValue()); + // } + // } + public static boolean isExcel2003(String filePath) { + return filePath.matches("^.+\\.(?i)(xls)$"); + } + + public static boolean isExcel2007(String filePath) { + return filePath.matches("^.+\\.(?i)(xlsx)$"); + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/FileResponse.java b/kgBuilder-base/src/main/java/com/warmer/base/util/FileResponse.java new file mode 100644 index 0000000..bb57392 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/FileResponse.java @@ -0,0 +1,49 @@ +package com.warmer.base.util; + +import java.util.List; + +public class FileResponse { + private int success; //成功标准 0失败 1成功 + private List results;//文件results + private String message; //错误信息 + + public FileResponse() { + } + + public FileResponse(int success, List results, String message) { + this.success = success; + this.results = results; + this.message = message; + } + + public int getSuccess() { + return success; + } + + public void setSuccess(int success) { + this.success = success; + } + + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + /** + * @return the results + */ + public List getResults() { + return results; + } + + /** + * @param results the results to set + */ + public void setResults(List results) { + this.results = results; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/FileResult.java b/kgBuilder-base/src/main/java/com/warmer/base/util/FileResult.java new file mode 100644 index 0000000..e602fb4 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/FileResult.java @@ -0,0 +1,47 @@ +/** +* @Title: FileResult.java +* @Package warmer.star.blog.util +* @Description: TODO(用一句话描述该文件做什么) +* @author tc +* @date 2018年6月1日 下午5:37:09 +* @version V1.0 +*/ +package com.warmer.base.util; + + +public class FileResult { + private String name; + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public int getStatus() { + return status; + } + public void setStatus(int status) { + this.status = status; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + /** + * @return the url + */ + public String getUrl() { + return url; + } + /** + * @param url the url to set + */ + public void setUrl(String url) { + this.url = url; + } + private int status; + private String message; + private String url; +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/FileUtil.java b/kgBuilder-base/src/main/java/com/warmer/base/util/FileUtil.java new file mode 100644 index 0000000..3d5a23d --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/FileUtil.java @@ -0,0 +1,96 @@ +package com.warmer.base.util; + +import java.io.File; +import java.io.IOException; + +public class FileUtil { + public static boolean createFile(String destFileName) { + File file = new File(destFileName); + if(file.exists()) { + System.out.println("创建单个文件" + destFileName + "失败,目标文件已存在!"); + return false; + } + if (destFileName.endsWith(File.separator)) { + System.out.println("创建单个文件" + destFileName + "失败,目标文件不能为目录!"); + return false; + } + //判断目标文件所在的目录是否存在 + if(!file.getParentFile().exists()) { + //如果目标文件所在的目录不存在,则创建父目录 + System.out.println("目标文件所在目录不存在,准备创建它!"); + if(!file.getParentFile().mkdirs()) { + System.out.println("创建目标文件所在目录失败!"); + return false; + } + } + //创建目标文件 + try { + if (file.createNewFile()) { + System.out.println("创建单个文件" + destFileName + "成功!"); + return true; + } else { + System.out.println("创建单个文件" + destFileName + "失败!"); + return false; + } + } catch (IOException e) { + e.printStackTrace(); + System.out.println("创建单个文件" + destFileName + "失败!" + e.getMessage()); + return false; + } + } + + + public static boolean createDir(String destDirName) { + File dir = new File(destDirName); + if (dir.exists()) { + System.out.println("创建目录" + destDirName + "失败,目标目录已经存在"); + return false; + } + if (!destDirName.endsWith(File.separator)) { + destDirName = destDirName + File.separator; + } + //创建目录 + if (dir.mkdirs()) { + System.out.println("创建目录" + destDirName + "成功!"); + return true; + } else { + System.out.println("创建目录" + destDirName + "失败!"); + return false; + } + } + + + public static String createTempFile(String prefix, String suffix, String dirName) { + File tempFile = null; + if (dirName == null) { + try{ + //在默认文件夹下创建临时文件 + tempFile = File.createTempFile(prefix, suffix); + //返回临时文件的路径 + return tempFile.getCanonicalPath(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("创建临时文件失败!" + e.getMessage()); + return null; + } + } else { + File dir = new File(dirName); + //如果临时文件所在目录不存在,首先创建 + if (!dir.exists()) { + if (!FileUtil.createDir(dirName)) { + System.out.println("创建临时文件失败,不能创建临时文件所在的目录!"); + return null; + } + } + try { + //在指定目录下创建临时文件 + tempFile = File.createTempFile(prefix, suffix, dir); + return tempFile.getCanonicalPath(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("创建临时文件失败!" + e.getMessage()); + return null; + } + } + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/GraphPageRecord.java b/kgBuilder-base/src/main/java/com/warmer/base/util/GraphPageRecord.java new file mode 100644 index 0000000..8b5664e --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/GraphPageRecord.java @@ -0,0 +1,66 @@ +package com.warmer.base.util; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("serial") +public class GraphPageRecord implements Serializable{ + private int pageSize = 10; + private int pageIndex = 1; + private long totalCount = 0; + private List nodeList = new ArrayList(); + + + /** + * 获取分页记录数量 + */ + public int getPageSize() { + return pageSize; + } + /** + * 获取当前页序号 + */ + public int getPageIndex() { + return pageIndex; + } + /** + * 设置当前页序号 + */ + public void setPageIndex(int pageIndex) { + if(pageIndex <= 0) { + pageIndex = 1; + } + this.pageIndex = pageIndex; + } + public void setPageSize(int pageSize) { + if(pageSize <= 0) { + pageSize = 1; + } + this.pageSize = pageSize; + } + + + /** + * 获取总记录数 + */ + public long getTotalCount() { + return totalCount; + } + /** + * 获取总记录数 + */ + public void setTotalCount(long totalCount) { + this.totalCount = totalCount; + } + + /** + * 获取Node检索结果列表 + */ + public List getNodeList() { + return nodeList; + } + public void setNodeList(List nodeList) { + this.nodeList=nodeList; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/JsonHelper.java b/kgBuilder-base/src/main/java/com/warmer/base/util/JsonHelper.java new file mode 100644 index 0000000..af36ed1 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/JsonHelper.java @@ -0,0 +1,108 @@ +package com.warmer.base.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.databind.type.CollectionType; + +import java.util.ArrayList; + +/** + * json工具类 + * @author yindm + */ +public class JsonHelper { + private static ObjectMapper mapper; + + static { + mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } + + /** + * 反序列化成对象 + * @param json + * @param clazz + * @param + * @return + * @throws JsonProcessingException + */ + public static T parseObject(String json, Class clazz) throws JsonProcessingException { + return mapper.readValue(json, clazz); + } + + /** + * 反序列化成List + * @param json + * @param clazz + * @param + * @return + * @throws JsonProcessingException + */ + public static ArrayList parseArray(String json, Class clazz) throws JsonProcessingException { + CollectionType listType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz); + return mapper.readValue(json, listType); + } + + /** + * 反序列化成对象 + * @param json + * @param type + * @param + * @return + * @throws JsonProcessingException + */ + public static T parseObject(String json, TypeReference type) throws JsonProcessingException { + return mapper.readValue(json, type); + } + + /** + * 反序列化成对象 + * @param json + * @return + * @throws JsonProcessingException + */ + public static JsonNode parseObject(String json) throws JsonProcessingException { + return mapper.readTree(json); + } + + /** + * 序列化成对象 + * @param value + * @return + * @throws JsonProcessingException + */ + public static String toJSONString(Object value) throws JsonProcessingException { + return mapper.writeValueAsString(value); + } + + /** + * 对象转换成List + * @param value + * @param + * @return + */ + public static T valueToTree(Object value) { + return mapper.valueToTree(value); + } + + /** + * 创建Json节点 + * @return + */ + public static ObjectNode createNode() { + return mapper.createObjectNode(); + } + + /** + * 创建JsonList + * @return + */ + public static ArrayNode createArray() { + return mapper.createArrayNode(); + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/Neo4jUtil.java b/kgBuilder-base/src/main/java/com/warmer/base/util/Neo4jUtil.java new file mode 100644 index 0000000..03f14d9 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/Neo4jUtil.java @@ -0,0 +1,705 @@ +package com.warmer.base.util; + +import org.neo4j.driver.*; +import org.neo4j.driver.Record; +import org.neo4j.driver.types.Node; +import org.neo4j.driver.types.Path; +import org.neo4j.driver.types.Relationship; +import org.neo4j.driver.util.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.Map.Entry; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Component +@Lazy(false) +public class Neo4jUtil implements AutoCloseable { + + private static Driver neo4jDriver; + + private static final Logger log = LoggerFactory.getLogger(Neo4jUtil.class); + + @Autowired + @Lazy + public void setNeo4jDriver(Driver neo4jDriver) { + Neo4jUtil.neo4jDriver = neo4jDriver; + } + + /** + * 测试neo4j连接是否打开 + */ + public static boolean isNeo4jOpen() { + try (Session session = neo4jDriver.session()) { + log.debug("连接成功:" + session.isOpen()); + return session.isOpen(); + } + } + + /** + * neo4j驱动执行cypher + * + * @param cypherSql cypherSql + */ + + public static void runCypherSql(String cypherSql) { + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + session.run(cypherSql); + } + } + + public List readCyphers(String cypherSql, Function mapper) { + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + return result.list(mapper); + } + } + + /** + * 返回节点集合,此方法不保留关系 + * + * @param cypherSql cypherSql + */ + public static List> getGraphNode(String cypherSql) { + List> ents = new ArrayList>(); + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + for (Pair pair : f) { + HashMap rss = new HashMap(); + String typeName = pair.value().type().name(); + if (typeName.equals("NODE")) { + Node noe4jNode = pair.value().asNode(); + String uuid = String.valueOf(noe4jNode.id()); + Map map = noe4jNode.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rss.put(key, entry.getValue()); + } + rss.put("uuid", uuid); + ents.add(rss); + } + } + + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ents; + } + + /** + * 获取数据库索引 + * @return + */ + public static List> getGraphIndex() { + List> ents = new ArrayList>(); + try (Session session = neo4jDriver.session()) { + String cypherSql="call db.indexes"; + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + HashMap rss = new HashMap(); + for (Pair pair : f) { + String key = pair.key(); + Value value = pair.value(); + if(key.equalsIgnoreCase("labelsOrTypes")){ + String objects = value.asList().stream().map(n->n.toString()).collect(Collectors.joining(",")); + rss.put(key, objects); + }else{ + rss.put(key, value); + } + } + ents.add(rss); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ents; + } + public static List> getGraphLabels() { + List> ents = new ArrayList>(); + try (Session session = neo4jDriver.session()) { + String cypherSql="call db.labels"; + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + HashMap rss = new HashMap(); + for (Pair pair : f) { + String key = pair.key(); + Value value = pair.value(); + if(key.equalsIgnoreCase("label")){ + String objects =value.toString().replace("\"",""); + rss.put(key, objects); + }else{ + rss.put(key, value); + } + } + ents.add(rss); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ents; + } + public static Map getLabelsInfo() { + Map ent = new HashMap<>(); + try (Session session = neo4jDriver.session()) { + String cypherSql="CALL apoc.meta.stats() YIELD labels RETURN labels"; + Result result = session.run(cypherSql); + if (result.hasNext()) { + Record record = result.single(); + Map mp = record.asMap(); + ent = (Map) mp.get("labels"); + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ent; + } + /** + * 删除索引 + * @param label + */ + public static void deleteIndex(String label) { + try (Session session = neo4jDriver.session()) { + String cypherSql=String.format("DROP INDEX ON :`%s`(name)",label); + session.run(cypherSql); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + + /** + * 创建索引 + * @param label + * @param prop + */ + public static void createIndex(String label,String prop) { + try (Session session = neo4jDriver.session()) { + String cypherSql=String.format("CREATE INDEX ON :`%s`(%s)",label,prop); + session.run(cypherSql); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + public static HashMap getSingleGraphNode(String cypherSql) { + List> ent = getGraphNode(cypherSql); + if (ent.size() > 0) { + return ent.get(0); + } + return null; + } + + /** + * 获取一个标准的表格,一般用于语句里使用as + * + * @param cypherSql + * @return + */ + public static List> getGraphTable(String cypherSql) { + List> resultData = new ArrayList>(); + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + HashMap rss = new HashMap(); + for (Pair pair : f) { + String key = pair.key(); + Value value = pair.value(); + rss.put(key, value); + } + resultData.add(rss); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return resultData; + } + + /** + * 返回关系,不保留节点内容 + * + * @param cypherSql + * @return + */ + public static List> getGraphRelationShip(String cypherSql) { + List> ents = new ArrayList>(); + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + for (Pair pair : f) { + HashMap rss = new HashMap(); + String typeName = pair.value().type().name(); + if (typeName.equals("RELATIONSHIP")) { + Relationship rship = pair.value().asRelationship(); + String uuid = String.valueOf(rship.id()); + String sourceId = String.valueOf(rship.startNodeId()); + String targetId = String.valueOf(rship.endNodeId()); + Map map = rship.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rss.put(key, entry.getValue()); + } + rss.put("uuid", uuid); + rss.put("sourceId", sourceId); + rss.put("targetId", targetId); + ents.add(rss); + } + } + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ents; + } + + + /** + * 获取值类型的结果,如count,uuid + * + * @return 1 2 3 等数字类型 + */ + public static long getGraphValue(String cypherSql) { + long val = 0; + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result cypherResult = session.run(cypherSql); + if (cypherResult.hasNext()) { + Record record = cypherResult.next(); + for (Value value : record.values()) { + val = value.asLong(); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return val; + } + + /** + * 返回节点和关系,节点node,关系relationship,路径path,集合list,map + * + * @param cypherSql + * @return + */ + public static HashMap getGraphNodeAndShip(String cypherSql) { + HashMap mo = new HashMap(); + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + if (result.hasNext()) { + List records = result.list(); + List> ents = new ArrayList>(); + List> ships = new ArrayList>(); + List uuids = new ArrayList(); + for (Record recordItem : records) { + List> f = recordItem.fields(); + for (Pair pair : f) { + HashMap rShips = new HashMap(); + HashMap rss = new HashMap(); + String typeName = pair.value().type().name(); + if ("NULL".equals(typeName)) { + continue; + } + if ("NODE".equals(typeName)) { + Node noe4jNode = pair.value().asNode(); + Map map = noe4jNode.asMap(); + String uuid = String.valueOf(noe4jNode.id()); + if (!uuids.contains(uuid)) { + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rss.put(key, entry.getValue()); + } + rss.put("uuid", uuid); + uuids.add(uuid); + } + if (!rss.isEmpty()) { + ents.add(rss); + } + } else if ("RELATIONSHIP".equals(typeName)) { + Relationship rship = pair.value().asRelationship(); + String uuid = String.valueOf(rship.id()); + String sourceId = String.valueOf(rship.startNodeId()); + String targetId = String.valueOf(rship.endNodeId()); + Map map = rship.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rShips.put(key, entry.getValue()); + } + rShips.put("uuid", uuid); + rShips.put("sourceId", sourceId); + rShips.put("targetId", targetId); + ships.add(rShips); + } else if ("PATH".equals(typeName)) { + Path path = pair.value().asPath(); + for (Node nodeItem : path.nodes()) { + Map map = nodeItem.asMap(); + String uuid = String.valueOf(nodeItem.id()); + rss = new HashMap(); + if (!uuids.contains(uuid)) { + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rss.put(key, entry.getValue()); + } + rss.put("uuid", uuid); + uuids.add(uuid); + } + if (!rss.isEmpty()) { + ents.add(rss); + } + } + for (Relationship next : path.relationships()) { + rShips = new HashMap(); + String uuid = String.valueOf(next.id()); + String sourceId = String.valueOf(next.startNodeId()); + String targetId = String.valueOf(next.endNodeId()); + Map map = next.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rShips.put(key, entry.getValue()); + } + rShips.put("uuid", uuid); + rShips.put("sourceId", sourceId); + rShips.put("targetId", targetId); + ships.add(rShips); + } + } else if (typeName.contains("LIST")) { + Iterable val = pair.value().values(); + Value next = val.iterator().next(); + String type = next.type().name(); + if ("RELATIONSHIP".equals(type)) { + Relationship rship = next.asRelationship(); + String uuid = String.valueOf(rship.id()); + String sourceId = String.valueOf(rship.startNodeId()); + String targetId = String.valueOf(rship.endNodeId()); + Map map = rship.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + rShips.put(key, entry.getValue()); + } + rShips.put("uuid", uuid); + rShips.put("sourceId", sourceId); + rShips.put("targetId", targetId); + ships.add(rShips); + } + } else if (typeName.contains("MAP")) { + rss.put(pair.key(), pair.value().asMap()); + } else { + rss.put(pair.key(), pair.value().toString()); + ents.add(rss); + } + } + } + mo.put("node", ents); + mo.put("relationship", toDistinctList(ships)); + } + + } catch (Exception e) { + log.error(e.getMessage()); + } + return mo; + } + + + /** + * 去掉json键的引号,否则neo4j会报错 + * + * @param jsonStr + * @return + */ + public static String getFilterPropertiesJson(String jsonStr) { + return jsonStr.replaceAll("\"(\\w+)\"(\\s*:\\s*)", "$1$2"); // 去掉key的引号 + } + + /** + * 对象转json,key=value,用于 cypher set语句 + * + * @param obj + * @param + * @return + */ + public static String getKeyValCyphersql(T obj) { + Map map = new HashMap(); + List sqlList = new ArrayList(); + // 得到类对象 + Class userCla = obj.getClass(); + /* 得到类中的所有属性集合 */ + Field[] fs = userCla.getDeclaredFields(); + for (int i = 0; i < fs.length; i++) { + Field f = fs[i]; + Class type = f.getType(); + + f.setAccessible(true); // 设置些属性是可以访问的 + Object val = new Object(); + try { + val = f.get(obj); + if (val == null) { + val = ""; + } + String sql = ""; + String key = f.getName(); + if (val instanceof String[]) { + //如果为true则强转成String数组 + String[] arr = (String[]) val; + String v = ""; + for (int j = 0; j < arr.length; j++) { + arr[j] = "'" + arr[j] + "'"; + } + v = String.join(",", arr); + sql = "n." + key + "=[" + val + "]"; + } else if (val instanceof List) { + //如果为true则强转成String数组 + List arr = (ArrayList) val; + List aa = new ArrayList(); + String v = ""; + for (String s : arr) { + s = "'" + s + "'"; + aa.add(s); + } + v = String.join(",", aa); + sql = "n." + key + "=[" + v + "]"; + } else { + // 得到此属性的值 + map.put(key, val);// 设置键值 + if (type.getName().equals("int")) { + sql = "n." + key + "=" + val + ""; + } else { + sql = "n." + key + "='" + val + "'"; + } + } + + sqlList.add(sql); + } catch (IllegalArgumentException | IllegalAccessException e) { + log.error(e.getMessage()); + } + } + return String.join(",", sqlList); + } + + /** + * 将haspmap集合反序列化成对象集合 + * + * @param maps + * @param type + * @param + * @return + */ + public static List hashMapToObject(List> maps, Class type) { + try { + List list = new ArrayList(); + for (HashMap r : maps) { + T t = type.newInstance(); + Iterator iter = r.entrySet().iterator();// 该方法获取列名.获取一系列字段名称.例如name,age... + while (iter.hasNext()) { + Entry entry = (Entry) iter.next();// 把hashmap转成Iterator再迭代到entry + String key = entry.getKey().toString(); // 从iterator遍历获取key + Object value = entry.getValue(); // 从hashmap遍历获取value + if ("serialVersionUID".toLowerCase().equals(key.toLowerCase())) { + continue; + } + Field field = type.getDeclaredField(key);// 获取field对象 + if (field != null) { + //System.out.print(field.getType()); + field.setAccessible(true); + //System.out.print(field.getType().getName()); + if (field.getType() == int.class || field.getType() == Integer.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0);// 设置值 + } else { + field.set(t, Integer.parseInt(value.toString()));// 设置值 + } + } else if (field.getType() == long.class || field.getType() == Long.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0);// 设置值 + } else { + field.set(t, Long.parseLong(value.toString()));// 设置值 + } + + } else if (field.getType() == Double.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0.0);// 设置值 + } else { + field.set(t, Double.parseDouble(value.toString()));// 设置值 + } + + } else { + if (field.getType().equals(List.class)) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, null); + } else { + field.set(t, value);// 设置值 + } + } else { + field.set(t, value);// 设置值 + } + } + } + + } + list.add(t); + } + + return list; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 将haspmap反序列化成对象 + * + * @param map + * @param type + * @param + * @return + */ + public static T hashMapToObjectItem(HashMap map, Class type) { + try { + T t = type.newInstance(); + Iterator iter = map.entrySet().iterator(); + while (iter.hasNext()) { + Entry entry = (Entry) iter.next();// 把hashmap转成Iterator再迭代到entry + String key = entry.getKey().toString(); // 从iterator遍历获取key + Object value = entry.getValue(); // 从hashmap遍历获取value + if ("serialVersionUID".toLowerCase().equals(key.toLowerCase())) { + continue; + } + Field field = type.getDeclaredField(key);// 获取field对象 + if (field != null) { + field.setAccessible(true); + if (field.getType() == int.class || field.getType() == Integer.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0);// 设置值 + } else { + field.set(t, Integer.parseInt(value.toString()));// 设置值 + } + } else if (field.getType() == long.class || field.getType() == Long.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0);// 设置值 + } else { + field.set(t, Long.parseLong(value.toString()));// 设置值 + } + + } else if (field.getType() == Double.class) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, 0.0);// 设置值 + } else { + field.set(t, Double.parseDouble(value.toString()));// 设置值 + } + + } else { + if (field.getType().equals(List.class)) { + if (value == null || StringUtil.isBlank(value.toString())) { + field.set(t, null); + } else { + field.set(t, value);// 设置值 + } + } else { + field.set(t, value);// 设置值 + } + + } + } + + } + + return t; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 返回单个节点信息 + */ + public static HashMap getOneNode(String cypherSql) { + HashMap ret = new HashMap(); + try (Session session = neo4jDriver.session()) { + log.debug(cypherSql); + Result result = session.run(cypherSql); + if (result.hasNext()) { + Record record = result.list().get(0); + Pair f = record.fields().get(0); + String typeName = f.value().type().name(); + if ("NODE".equals(typeName)) { + Node noe4jNode = f.value().asNode(); + String uuid = String.valueOf(noe4jNode.id()); + Map map = noe4jNode.asMap(); + for (Entry entry : map.entrySet()) { + String key = entry.getKey(); + ret.put(key, entry.getValue()); + } + ret.put("uuid", uuid); + } + } + } catch (Exception e) { + log.error(e.getMessage()); + } + return ret; + } + + public static boolean batchRunCypherWithTx(List cyphers) { + Session session = neo4jDriver.session(); + try (Transaction tx = session.beginTransaction()) { + for (String cypher : cyphers) { + tx.run(cypher); + } + } catch (Exception e) { + log.info(e.getMessage()); + return false; + } + return true; + } + + + public static List> toDistinctList(List> list) { + Set keysSet = new HashSet(); + Iterator> it = list.iterator(); + while (it.hasNext()) { + HashMap map = it.next(); + String uuid = (String) map.get("uuid"); + int beforeSize = keysSet.size(); + keysSet.add(uuid); + int afterSize = keysSet.size(); + if (afterSize != (beforeSize + 1)) { + it.remove(); + } + } + return list; + } + + + @Override + public void close() throws Exception { + neo4jDriver.close(); + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/R.java b/kgBuilder-base/src/main/java/com/warmer/base/util/R.java new file mode 100644 index 0000000..2eaf10e --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/R.java @@ -0,0 +1,122 @@ +package com.warmer.base.util; + +import com.warmer.base.enums.ReturnStatus; +import lombok.Data; + +/** + * 接口统一返回结果 + * + * 推荐使用 + *

成功:R.success()

+ *

成功:R.success(data)

+ *

成功:R.success(data,msg)

+ *

出错:R.error()

+ *

出错:R.error(msg)

+ *

验证型错误:R.warn(msg)

+ *

定义参数的错误:R.create(returnStatus)

+ * @param + */ +@Data +public class R { + public int code; + public T data; + public String msg; + + /** + * 参数验证失败 + * + * @param msg + * @return + */ + public static R warn(String msg) { + return new R(ReturnStatus.ValidateFailure.getValue(), msg, ""); + } + + /** + * 创建实例 + * + * @return + */ + public static R create(ReturnStatus returnStatus) { + return new R(returnStatus.getValue(), returnStatus.getName(), ""); + } + + /** + * 创建实例 + * + * @return + */ + public static R create(ReturnStatus returnStatus, String msg) { + return new R(returnStatus.getValue(), msg, ""); + } + + /** + * 出错 + * + * @param msg + * @return + */ + public static R error(String msg) { + return new R(ReturnStatus.Error.getValue(), msg, ""); + } + + /** + * 出错 + * + * @return + */ + public static R error() { + return new R(ReturnStatus.Error.getValue(), ReturnStatus.Error.getName(), ""); + } + + /** + * 成功 + * + * @param + * @return + */ + public static R success() { + return new R(ReturnStatus.Success.getValue(), "", ""); + } + + /** + * 成功 + * + * @param data + * @param + * @return + */ + public static R success(T data) { + return new R(ReturnStatus.Success.getValue(), "", data); + } + /** + * 成功 + * + * @param msg + * @param + * @return + */ + public static R success(String msg) { + return new R(ReturnStatus.Success.getValue(), msg, null); + } + /** + * 成功 + * + * @param data + * @param + * @return + */ + public static R success(T data, String msg) { + return new R(ReturnStatus.Success.getValue(), msg, data); + } + + + /** + * 私有构建方法,请使用静态方法构建实例 + */ + private R(int code, String msg, T data) { + this.code = code; + this.msg = msg; + this.data = data; + } +} diff --git a/kgBuilder-base/src/main/java/com/warmer/base/util/StringUtil.java b/kgBuilder-base/src/main/java/com/warmer/base/util/StringUtil.java new file mode 100644 index 0000000..300f328 --- /dev/null +++ b/kgBuilder-base/src/main/java/com/warmer/base/util/StringUtil.java @@ -0,0 +1,76 @@ +package com.warmer.base.util; + +import org.apache.commons.lang3.ObjectUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class StringUtil { + /* + * 是否为空字符串 + * @param str + * @return + */ + public static boolean isBlank(String str){ + int strLen; + if (str == null || (strLen = str.length()) == 0) { + return true; + } + for (int i = 0; i < strLen; i++) { + if (Character.isWhitespace(str.charAt(i)) == false) { + return false; + } + } + return true; + } + + public static boolean isNotBlank(String str){ + return !isBlank(str); + } + /** + * 连接方法 类似于javascript + * @param join 连接字符串 + * @param strAry 需要连接的集合 + * @return + */ + public static String join(String join,String[] strAry){ + StringBuffer sb=new StringBuffer(); + for(int i=0,len =strAry.length;i cols,String colName){ + List aColCons = new ArrayList(); + for (Map map: + cols) { + aColCons.add(ObjectUtils.toString(map.get(colName))); + } + return join(join,aColCons); + } + + public static String join(String join,List listStr){ + StringBuffer sb=new StringBuffer(); + for(int i=0,len =listStr.size();i + + 4.0.0 + + com.warmer + kgbuilder + 0.0.1 + ../pom.xml + + com.warmer + kgBuilder-meta + 0.0.1 + kgBuilder-meta + Demo project for Spring Boot + + + + com.warmer + kgBuilder-base + 0.0.1 + + + diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataColumnDao.java b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataColumnDao.java new file mode 100644 index 0000000..9c22759 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataColumnDao.java @@ -0,0 +1,57 @@ +package com.warmer.meta.dao; + +import com.warmer.meta.entity.MetaDataColumn; +import com.warmer.meta.vo.DataTableVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * (MetaDataColumn)表数据库访问层 + * + * @author tanc + * @since 2021-11-21 11:00:14 + */ +@Mapper +public interface MetaDataColumnDao { + + /** + * 通过ID查询单条数据 + * + * @param dataColumnId 主键 + * @return 实例对象 + */ + MetaDataColumn queryById(Integer dataColumnId); + + /** + * 通过实体作为筛选条件查询 + * + * @return 对象列表 + */ + List queryAll(); + List queryByTableId(@Param("dataTableId") Integer dataTableId); + /** + * 新增数据 + * + * @param metaDataColumn 实例对象 + * @return 影响行数 + */ + int insert(MetaDataColumn metaDataColumn); + + /** + * 修改数据 + * + * @param metaDataColumn 实例对象 + * @return 影响行数 + */ + int update(MetaDataColumn metaDataColumn); + + /** + * 通过主键删除数据 + * + * @param dataColumnId 主键 + * @return 影响行数 + */ + int deleteById(Integer dataColumnId); + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataSourceDao.java b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataSourceDao.java new file mode 100644 index 0000000..058a3d8 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataSourceDao.java @@ -0,0 +1,56 @@ +package com.warmer.meta.dao; + +import com.warmer.meta.entity.MetaDataSource; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * 数据源(MetaDataSource)表数据库访问层 + * + * @author tanc + * @since 2021-11-21 11:00:18 + */ +@Mapper +public interface MetaDataSourceDao { + + /** + * 通过ID查询单条数据 + * + * @param dataSourceId 主键 + * @return 实例对象 + */ + MetaDataSource queryById(Integer dataSourceId); + + /** + * 通过实体作为筛选条件查询 + * + * @return 对象列表 + */ + List queryAll(); + + /** + * 新增数据 + * + * @param metaDataSource 实例对象 + * @return 影响行数 + */ + int insert(MetaDataSource metaDataSource); + + /** + * 修改数据 + * + * @param metaDataSource 实例对象 + * @return 影响行数 + */ + int update(MetaDataSource metaDataSource); + + /** + * 通过主键删除数据 + * + * @param dataSourceId 主键 + * @return 影响行数 + */ + int deleteById(Integer dataSourceId); + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataTableDao.java b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataTableDao.java new file mode 100644 index 0000000..47fdbc8 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/dao/MetaDataTableDao.java @@ -0,0 +1,58 @@ +package com.warmer.meta.dao; + +import com.warmer.meta.entity.MetaDataTable; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.List; + +/** + * (MetaDataTable)表数据库访问层 + * + * @author tanc + * @since 2021-11-21 11:00:21 + */ +@Mapper +public interface MetaDataTableDao { + + /** + * 通过ID查询单条数据 + * + * @param dataTableId 主键 + * @return 实例对象 + */ + MetaDataTable queryById(Integer dataTableId); + + /** + * 通过实体作为筛选条件查询 + * + * @return 对象列表 + */ + List queryAll(); + List queryByDatasourceId(@Param("datasourceId") Integer datasourceId); + MetaDataTable queryByDatasourceIdAndTableCode(@Param("datasourceId") Integer datasourceId,@Param("dataTableCode") String dataTableCode); + + /** + * 新增数据 + * + * @param metaDataTable 实例对象 + * @return 影响行数 + */ + int insert(MetaDataTable metaDataTable); + + /** + * 修改数据 + * + * @param metaDataTable 实例对象 + * @return 影响行数 + */ + int update(MetaDataTable metaDataTable); + + /** + * 通过主键删除数据 + * + * @param dataTableId 主键 + * @return 影响行数 + */ + int deleteById(Integer dataTableId); + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DataTableSubmitItem.java b/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DataTableSubmitItem.java new file mode 100644 index 0000000..3512623 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DataTableSubmitItem.java @@ -0,0 +1,20 @@ +package com.warmer.meta.dto; +import lombok.Data; + +import java.util.List; + +@Data +public class DataTableSubmitItem { + + private Integer dataSourceId; + + private List dataTables; + + public Integer getDataSourceId() { + return dataSourceId==null?0:dataSourceId; + } + + public void setDataSourceId(Integer dataSourceId) { + this.dataSourceId = dataSourceId==null?0:dataSourceId; + } +} diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DatasourceSubmitItem.java b/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DatasourceSubmitItem.java new file mode 100644 index 0000000..0d7eb35 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/dto/DatasourceSubmitItem.java @@ -0,0 +1,85 @@ +package com.warmer.meta.dto; + +import com.warmer.meta.entity.MetaDataSource; +import lombok.Data; +import org.springframework.beans.BeanUtils; + +import java.util.Locale; + +@Data +public class DatasourceSubmitItem { + + public Integer getDataSourceId() { + return dataSourceId==null?0:dataSourceId; + } + + public void setDataSourceId(Integer dataSourceId) { + this.dataSourceId = dataSourceId==null?0:dataSourceId; + } + + private Integer dataSourceId; + /** + * 数据源类型 + */ + private String dbType; + + private String driverName; + /** + * IP及端口号 + */ + private String ipAndPort; + /** + * 数据库别名 + */ + private String dbName; + /** + * 数据库名称 + */ + private String dbCode; + /** + * 用户名 + */ + private String dbUserName; + /** + * 密码 + */ + private String dbPassWord; + + + public String buildConnUrl() { + String dbType = this.getDbType().toUpperCase(); + String dbCode = this.getDbCode(); + String connUrl=""; + switch (dbType) { + case "MYSQL": + connUrl = String.format("jdbc:mysql://%s/%s?useSSL=false&serverTimezone=Asia/Shanghai", ipAndPort, dbCode); + break; + case "SQLSERVER": + connUrl = String.format("jdbc:sqlserver://%s;databaseName=%s", ipAndPort, dbCode); + break; + case "POSTGRESQL": + connUrl = String.format("jdbc:postgresql://%s", ipAndPort); + break; + case "ORACLE": + connUrl = String.format("jdbc:oracle:thin:@//%s/%s", ipAndPort, dbCode); + break; + case "MARIADB": + connUrl = String.format("jdbc:mariadb://%s/%s", ipAndPort, dbCode); + break; + case "HIVE": + connUrl = String.format("jdbc:hive2://%s/%s", ipAndPort, dbCode); + break; + default: + return ""; + } + return connUrl; + } + + public MetaDataSource transfer(){ + MetaDataSource source = new MetaDataSource(); + BeanUtils.copyProperties(this, source); + source.setConnectUrl(this.buildConnUrl()); + source.setIPAndPort(this.ipAndPort); + return source; + } +} diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataColumn.java b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataColumn.java new file mode 100644 index 0000000..33da7ae --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataColumn.java @@ -0,0 +1,47 @@ +package com.warmer.meta.entity; + +import java.util.Date; +import java.io.Serializable; + +import com.warmer.base.common.BaseEntity; +import lombok.Data; +/** + * (MetaDataColumn)实体类 + * + * @author tanc + * @since 2021-11-21 11:00:13 + */ +@Data +public class MetaDataColumn extends BaseEntity implements Serializable { + private static final long serialVersionUID = 728550695358682173L; + /** + * 数据列id + */ + private Integer dataColumnId; + /** + * 数据表id + */ + private Integer dataTableId; + /** + * 数据列名称 + */ + private String dataColumnCode; + /** + * 数据列别名 + */ + private String dataColumnName; + /** + * 数据列描述 + */ + private String dataColumnComment; + /** + * 数据类型 + */ + private String dataColumnType; + /** + * 是否主键 + */ + private Integer isPrimary; + + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataSource.java b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataSource.java new file mode 100644 index 0000000..736aace --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataSource.java @@ -0,0 +1,64 @@ +package com.warmer.meta.entity; + +import java.util.Date; +import java.io.Serializable; + +import com.warmer.base.common.BaseEntity; +import lombok.Data; +/** + * 数据源(MetaDataSource)实体类 + * + * @author tanc + * @since 2021-11-21 11:00:17 + */ +@Data +public class MetaDataSource extends BaseEntity implements Serializable { + private static final long serialVersionUID = 931209553011500059L; + /** + * 数据源主键 + */ + private Integer dataSourceId; + /** + * 数据源类型 + */ + private String dbType; + + private String driverName; + /** + * IP及端口号 + */ + private String iPAndPort; + /** + * url + */ + private String connectUrl; + /** + * 数据库别名 + */ + private String dbName; + /** + * 数据库名称 + */ + private String dbCode; + /** + * 用户名 + */ + private String dbUserName; + /** + * 密码 + */ + private String dbPassWord; + /** + * 最大连接数 + */ + private Integer maxPoolSize; + /** + * 数据库编码 + */ + private String databaseCoding; + /** + * 转换编码 + */ + private String transcoding; + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataTable.java b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataTable.java new file mode 100644 index 0000000..79a6075 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/entity/MetaDataTable.java @@ -0,0 +1,35 @@ +package com.warmer.meta.entity; + +import java.util.Date; +import java.io.Serializable; + +import com.warmer.base.common.BaseEntity; +import lombok.Data; +/** + * (MetaDataTable)实体类 + * + * @author tanc + * @since 2021-11-21 11:00:20 + */ +@Data +public class MetaDataTable extends BaseEntity implements Serializable { + private static final long serialVersionUID = 146313789945681038L; + /** + * 数据表主键 + */ + private Integer dataTableId; + /** + * 数据源id + */ + private Integer datasourceId; + /** + * 表名 + */ + private String dataTableCode; + /** + * 表别名 + */ + private String dataTableName; + + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/query/TableQuery.java b/kgBuilder-meta/src/main/java/com/warmer/meta/query/TableQuery.java new file mode 100644 index 0000000..c8887aa --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/query/TableQuery.java @@ -0,0 +1,15 @@ +package com.warmer.meta.query; + +import com.warmer.base.common.FieldQueryItem; +import com.warmer.base.common.PageQuery; +import lombok.Data; + +import java.util.List; + +@Data +public class TableQuery extends PageQuery { + private Integer dataSourceId; + private Integer dataTableId; + private String dataTableName; + private List filterItems; +} diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataColumnService.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataColumnService.java new file mode 100644 index 0000000..86243f4 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataColumnService.java @@ -0,0 +1,57 @@ +package com.warmer.meta.service; + +import com.warmer.meta.entity.MetaDataColumn; +import com.warmer.meta.vo.DataColumnVo; +import com.warmer.meta.vo.DataTableVo; + +import java.util.List; + +/** + * (MetaDataColumn)表服务接口 + * + * @author tanc + * @since 2021-11-21 11:00:15 + */ +public interface MetaDataColumnService { + + /** + * 通过ID查询单条数据 + * + * @param dataColumnId 主键 + * @return 实例对象 + */ + MetaDataColumn queryById(Integer dataColumnId); + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + List queryAll(); + + List queryByTableId(Integer tableId); + /** + * 新增数据 + * + * @param metaDataColumn 实例对象 + * @return 实例对象 + */ + MetaDataColumn insert(MetaDataColumn metaDataColumn); + + /** + * 修改数据 + * + * @param metaDataColumn 实例对象 + * @return 实例对象 + */ + MetaDataColumn update(MetaDataColumn metaDataColumn); + + /** + * 通过主键删除数据 + * + * @param dataColumnId 主键 + * @return 是否成功 + */ + boolean deleteById(Integer dataColumnId); + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataSourceService.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataSourceService.java new file mode 100644 index 0000000..300f571 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataSourceService.java @@ -0,0 +1,61 @@ +package com.warmer.meta.service; + +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.vo.DatasourceVo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * 数据源(MetaDataSource)表服务接口 + * + * @author tanc + * @since 2021-11-21 11:00:18 + */ +public interface MetaDataSourceService { + + /** + * 通过ID查询单条数据 + * + * @param dataSourceId 主键 + * @return 实例对象 + */ + MetaDataSource queryById(Integer dataSourceId); + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + List queryAll(); + + List queryList(); + /** + * 新增数据 + * + * @param metaDataSource 实例对象 + * @return 实例对象 + */ + MetaDataSource insert(MetaDataSource metaDataSource); + + /** + * 修改数据 + * + * @param metaDataSource 实例对象 + * @return 实例对象 + */ + MetaDataSource update(MetaDataSource metaDataSource); + + /** + * 通过主键删除数据 + * + * @param dataSourceId 主键 + * @return 是否成功 + */ + boolean deleteById(Integer dataSourceId); + + HashMap>> getMetaData(MetaDataSource metaDataSource); + + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataTableService.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataTableService.java new file mode 100644 index 0000000..4e4be9d --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/MetaDataTableService.java @@ -0,0 +1,67 @@ +package com.warmer.meta.service; + +import com.warmer.base.common.PageRecord; +import com.warmer.base.util.DbUtils; +import com.warmer.meta.dto.DataTableSubmitItem; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.query.TableQuery; +import com.warmer.meta.vo.DataTableVo; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * (MetaDataTable)表服务接口 + * + * @author tanc + * @since 2021-11-21 11:00:21 + */ +public interface MetaDataTableService { + + /** + * 通过ID查询单条数据 + * + * @param dataTableId 主键 + * @return 实例对象 + */ + MetaDataTable queryById(Integer dataTableId); + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + List queryAll(); + + List queryByDatasourceId(Integer datasourceId); + /** + * 新增数据 + * + * @param metaDataTable 实例对象 + * @return 实例对象 + */ + MetaDataTable insert(MetaDataTable metaDataTable); + /** + * 修改数据 + * + * @param metaDataTable 实例对象 + * @return 实例对象 + */ + MetaDataTable update(MetaDataTable metaDataTable); + + /** + * 通过主键删除数据 + * + * @param dataTableId 主键 + * @return 是否成功 + */ + boolean deleteById(Integer dataTableId); + + ArrayList getMetaTables(MetaDataSource metaDataSource) ; + + void saveTables(DataTableSubmitItem submitItem); + + PageRecord> getTableRecords(TableQuery queryItem); +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataColumnServiceImpl.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataColumnServiceImpl.java new file mode 100644 index 0000000..a65f086 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataColumnServiceImpl.java @@ -0,0 +1,97 @@ +package com.warmer.meta.service.impl; + +import com.warmer.base.util.DbUtils; +import com.warmer.meta.entity.MetaDataColumn; +import com.warmer.meta.dao.MetaDataColumnDao; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.service.MetaDataColumnService; +import com.warmer.meta.vo.DataColumnVo; +import com.warmer.meta.vo.DataTableVo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * (MetaDataColumn)表服务实现类 + * + * @author tanc + * @since 2021-11-21 11:00:15 + */ +@Service("metaDataColumnService") +public class MetaDataColumnServiceImpl implements MetaDataColumnService { + @Resource + private MetaDataColumnDao metaDataColumnDao; + + /** + * 通过ID查询单条数据 + * + * @param dataColumnId 主键 + * @return 实例对象 + */ + @Override + public MetaDataColumn queryById(Integer dataColumnId) { + return this.metaDataColumnDao.queryById(dataColumnId); + } + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + @Override + public List queryAll() { + return this.metaDataColumnDao.queryAll(); + } + @Override + public List queryByTableId(Integer tableId){ + List dataColumns= this.metaDataColumnDao.queryByTableId(tableId); + List voList = dataColumns.stream().map(n -> { + DataColumnVo item = new DataColumnVo(); + item.setDataColumnId(n.getDataColumnId()); + item.setDataColumnName(n.getDataColumnCode()); + item.setDataColumnAlia(n.getDataColumnName()); + item.setDataColumnType(n.getDataColumnType()); + item.setIsPrimary(n.getIsPrimary()); + return item; + }).collect(Collectors.toList()); + return voList; + } + /** + * 新增数据 + * + * @param metaDataColumn 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataColumn insert(MetaDataColumn metaDataColumn) { + this.metaDataColumnDao.insert(metaDataColumn); + return metaDataColumn; + } + + /** + * 修改数据 + * + * @param metaDataColumn 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataColumn update(MetaDataColumn metaDataColumn) { + this.metaDataColumnDao.update(metaDataColumn); + return this.queryById(metaDataColumn.getDataColumnId()); + } + + /** + * 通过主键删除数据 + * + * @param dataColumnId 主键 + * @return 是否成功 + */ + @Override + public boolean deleteById(Integer dataColumnId) { + return this.metaDataColumnDao.deleteById(dataColumnId) > 0; + } +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataSourceServiceImpl.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataSourceServiceImpl.java new file mode 100644 index 0000000..d72daa7 --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataSourceServiceImpl.java @@ -0,0 +1,114 @@ +package com.warmer.meta.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.warmer.base.util.DbUtils; +import com.warmer.meta.dto.DataTableSubmitItem; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.dao.MetaDataSourceDao; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.service.MetaDataSourceService; +import com.warmer.meta.vo.DatasourceVo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 数据源(MetaDataSource)表服务实现类 + * + * @author tanc + * @since 2021-11-21 11:00:19 + */ +@Service("metaDataSourceService") +public class MetaDataSourceServiceImpl implements MetaDataSourceService { + @Resource + private MetaDataSourceDao metaDataSourceDao; + + /** + * 通过ID查询单条数据 + * + * @param dataSourceId 主键 + * @return 实例对象 + */ + @Override + public MetaDataSource queryById(Integer dataSourceId) { + return this.metaDataSourceDao.queryById(dataSourceId); + } + + @Override + public List queryList() { + List dataSources= this.metaDataSourceDao.queryAll(); + List voList = dataSources.stream().map(n -> { + DatasourceVo item = new DatasourceVo(); + item.setDatasourceId(n.getDataSourceId()); + item.setDatasourceAlia(n.getDbName()); + item.setDatasourceName(n.getDbCode()); + item.setDatasourceType(n.getDbType()); + return item; + }).collect(Collectors.toList()); + return voList; + } + /** + * 查询多条数据 + * + * @return 对象列表 + */ + @Override + public List queryAll() { + return this.metaDataSourceDao.queryAll(); + } + /** + * 新增数据 + * + * @param metaDataSource 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataSource insert(MetaDataSource metaDataSource) { + this.metaDataSourceDao.insert(metaDataSource); + return metaDataSource; + } + + /** + * 修改数据 + * + * @param metaDataSource 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataSource update(MetaDataSource metaDataSource) { + this.metaDataSourceDao.update(metaDataSource); + return this.queryById(metaDataSource.getDataSourceId()); + } + + /** + * 通过主键删除数据 + * + * @param dataSourceId 主键 + * @return 是否成功 + */ + @Override + public boolean deleteById(Integer dataSourceId) { + return this.metaDataSourceDao.deleteById(dataSourceId) > 0; + } + + public HashMap>> getMetaData(MetaDataSource metaDataSource) { + String dbType = metaDataSource.getDbType(); + String userName = metaDataSource.getDbUserName(); + String password = metaDataSource.getDbPassWord(); + String driverClassName = metaDataSource.getDriverName(); + HashMap>> result = null; + try { + result = DbUtils.getMetaData(dbType, metaDataSource.getDbCode(), metaDataSource.getConnectUrl(), userName, password, + driverClassName); + } catch (Exception e) { + throw e; + } + return result; + } + + +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataTableServiceImpl.java b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataTableServiceImpl.java new file mode 100644 index 0000000..06d11fa --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/service/impl/MetaDataTableServiceImpl.java @@ -0,0 +1,183 @@ +package com.warmer.meta.service.impl; + +import com.warmer.base.common.PageRecord; +import com.warmer.base.util.DbUtils; +import com.warmer.meta.dao.MetaDataColumnDao; +import com.warmer.meta.dao.MetaDataSourceDao; +import com.warmer.meta.dto.DataTableSubmitItem; +import com.warmer.meta.entity.MetaDataColumn; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.dao.MetaDataTableDao; +import com.warmer.meta.query.TableQuery; +import com.warmer.meta.service.MetaDataColumnService; +import com.warmer.meta.service.MetaDataSourceService; +import com.warmer.meta.service.MetaDataTableService; +import com.warmer.meta.vo.DataColumnVo; +import com.warmer.meta.vo.DataTableVo; +import com.warmer.meta.vo.DatasourceVo; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * (MetaDataTable)表服务实现类 + * + * @author tanc + * @since 2021-11-21 11:00:22 + */ +@Service("metaDataTableService") +public class MetaDataTableServiceImpl implements MetaDataTableService { + @Resource + private MetaDataSourceDao metaDataSourceDao; + @Resource + private MetaDataTableDao metaDataTableDao; + @Resource + private MetaDataColumnService metaDataColumnService; + + /** + * 通过ID查询单条数据 + * + * @param dataTableId 主键 + * @return 实例对象 + */ + @Override + public MetaDataTable queryById(Integer dataTableId) { + return this.metaDataTableDao.queryById(dataTableId); + } + + /** + * 查询多条数据 + * + * @return 对象列表 + */ + @Override + public List queryAll() { + return this.metaDataTableDao.queryAll(); + } + + @Override + public List queryByDatasourceId(Integer datasourceId) { + List dataTable = this.metaDataTableDao.queryByDatasourceId(datasourceId); + List voList = dataTable.stream().map(n -> { + DataTableVo item = new DataTableVo(); + item.setDataTableId(n.getDataTableId()); + item.setDatasourceId(n.getDatasourceId()); + item.setDataTableAlia(n.getDataTableName()); + item.setDataTableName(n.getDataTableCode()); + return item; + }).collect(Collectors.toList()); + return voList; + } + + /** + * 新增数据 + * + * @param metaDataTable 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataTable insert(MetaDataTable metaDataTable) { + this.metaDataTableDao.insert(metaDataTable); + return metaDataTable; + } + + + /** + * 修改数据 + * + * @param metaDataTable 实例对象 + * @return 实例对象 + */ + @Override + public MetaDataTable update(MetaDataTable metaDataTable) { + this.metaDataTableDao.update(metaDataTable); + return this.queryById(metaDataTable.getDataTableId()); + } + + /** + * 通过主键删除数据 + * + * @param dataTableId 主键 + * @return 是否成功 + */ + @Override + public boolean deleteById(Integer dataTableId) { + return this.metaDataTableDao.deleteById(dataTableId) > 0; + } + + @Override + public ArrayList getMetaTables(MetaDataSource metaDataSource) { + String dbType = metaDataSource.getDbType(); + String userName = metaDataSource.getDbUserName(); + String password = metaDataSource.getDbPassWord(); + String driverClassName = metaDataSource.getDriverName(); + ArrayList tables = new ArrayList<>(); + try { + tables = DbUtils.getTables(dbType, metaDataSource.getDbCode(), userName, password, + driverClassName, metaDataSource.getConnectUrl()); + } catch (Exception e) { + throw e; + } + return tables; + } + + @Override + public void saveTables(DataTableSubmitItem submitItem) { + MetaDataSource dataSource = metaDataSourceDao.queryById(submitItem.getDataSourceId()); + String dbType = dataSource.getDbType(); + String userName = dataSource.getDbUserName(); + String password = dataSource.getDbPassWord(); + String driverClassName = dataSource.getDriverName(); + HashMap>> metaData = DbUtils.getMetaData(dbType, dataSource.getDbCode(), dataSource.getConnectUrl(), userName, password, + driverClassName, submitItem.getDataTables()); + for (String table : metaData.keySet()) { + MetaDataTable dataTable = new MetaDataTable(); + dataTable.setDataTableName(table); + dataTable.setDataTableCode(table); + dataTable.setDatasourceId(dataSource.getDataSourceId()); + insert(dataTable); + Integer tableId = dataTable.getDataTableId(); + ArrayList> columns = metaData.get(table); + for (HashMap column : columns) { + String columnName = column.get("ColumnName"); + String columnAlia = column.get("ColumnAlia"); + String columnType = column.get("ColumnType"); + String isPrimary = column.get("IsPrimary"); + MetaDataColumn columnItem = new MetaDataColumn(); + columnItem.setDataColumnCode(columnName); + columnItem.setDataColumnName(columnAlia); + columnItem.setDataColumnComment(columnAlia); + columnItem.setDataColumnType(columnType); + columnItem.setDataTableId(tableId); + columnItem.setIsPrimary(isPrimary.equals("1") ? 1 : 0); + metaDataColumnService.insert(columnItem); + } + } + + } + + public PageRecord> getTableRecords(TableQuery queryItem) { + MetaDataSource metaDataSource = metaDataSourceDao.queryById(queryItem.getDataSourceId()); + String dbType = metaDataSource.getDbType(); + String userName = metaDataSource.getDbUserName(); + String password = metaDataSource.getDbPassWord(); + String driverClassName = metaDataSource.getDriverName(); + PageRecord> records = new PageRecord<>(); + MetaDataTable metaDataTable = metaDataTableDao.queryByDatasourceIdAndTableCode(queryItem.getDataSourceId(), queryItem.getDataTableName()); + List dataColumnVos = metaDataColumnService.queryByTableId(metaDataTable.getDataTableId()); + try { + records = DbUtils.getTableInfoByPage(queryItem.getCurrentPage(), queryItem.getPageSize(), dbType, metaDataSource.getDbCode(), metaDataSource.getConnectUrl(), queryItem.getDataTableName(), userName, password, + driverClassName, 10, queryItem.getFilterItems()); + records.setHeads(dataColumnVos); + } catch (Exception e) { + throw e; + } + return records; + } +} \ No newline at end of file diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataColumnVo.java b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataColumnVo.java new file mode 100644 index 0000000..226fd2b --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataColumnVo.java @@ -0,0 +1,12 @@ +package com.warmer.meta.vo; + +import lombok.Data; + +@Data +public class DataColumnVo { + private String DataColumnName; + private Integer DataColumnId; + private String DataColumnAlia; + private String DataColumnType; + private Integer IsPrimary; +} diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataTableVo.java b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataTableVo.java new file mode 100644 index 0000000..4fb156c --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DataTableVo.java @@ -0,0 +1,11 @@ +package com.warmer.meta.vo; + +import lombok.Data; + +@Data +public class DataTableVo { + private String DataTableName; + private Integer DataTableId; + private Integer DatasourceId; + private String DataTableAlia; +} diff --git a/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DatasourceVo.java b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DatasourceVo.java new file mode 100644 index 0000000..e5de2cc --- /dev/null +++ b/kgBuilder-meta/src/main/java/com/warmer/meta/vo/DatasourceVo.java @@ -0,0 +1,11 @@ +package com.warmer.meta.vo; + +import lombok.Data; + +@Data +public class DatasourceVo { + private String DatasourceName; + private Integer DatasourceId; + private String DatasourceType; + private String DatasourceAlia; +} diff --git a/kgBuilder-meta/src/main/resources/mapping/MetaDataColumnDao.xml b/kgBuilder-meta/src/main/resources/mapping/MetaDataColumnDao.xml new file mode 100644 index 0000000..1100dc3 --- /dev/null +++ b/kgBuilder-meta/src/main/resources/mapping/MetaDataColumnDao.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + DataColumnId, DataTableId, DataColumnCode,IsPrimary, DataColumnName, DataColumnComment, DataColumnType, Status, CreateUser, CreateTime, UpdateUser, UpdateTime + + + + + + + + + + + insert into meta_data_column(DataTableId, DataColumnCode, DataColumnName, DataColumnComment, DataColumnType,IsPrimary, Status, CreateUser, CreateTime, UpdateUser, UpdateTime) + values (#{dataTableId}, #{dataColumnCode}, #{dataColumnName}, #{dataColumnComment}, #{dataColumnType},#{isPrimary}, #{status}, #{createUser}, #{createTime}, #{updateUser}, #{updateTime}) + + + + + update meta_data_column + set + where DataColumnId = #{datacolumnid} + + + + + update meta_data_column set Status=0 where DataColumnId = #{datacolumnid} + + + \ No newline at end of file diff --git a/kgBuilder-meta/src/main/resources/mapping/MetaDataSourceDao.xml b/kgBuilder-meta/src/main/resources/mapping/MetaDataSourceDao.xml new file mode 100644 index 0000000..5f5f8d8 --- /dev/null +++ b/kgBuilder-meta/src/main/resources/mapping/MetaDataSourceDao.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + DataSourceId, DbType, DriverName, IPAndPort, ConnectUrl, DbName, DbCode, DbUserName, DbPassWord, MaxPoolSize, Status, DatabaseCoding, Transcoding, CreateUser, CreateTime, UpdateUser, UpdateTime + + + + + + + + + + insert into meta_data_source(DbType, DriverName, IPAndPort, ConnectUrl, DbName, DbCode, DbUserName, DbPassWord, MaxPoolSize, Status, DatabaseCoding, Transcoding, CreateUser, CreateTime, UpdateUser, UpdateTime) + values (#{dbType}, #{driverName}, #{iPAndPort}, #{connectUrl}, #{dbName}, #{dbCode}, #{dbUserName}, #{dbPassWord}, #{maxPoolSize}, #{status}, #{databaseCoding}, #{transcoding}, #{createUser}, #{createTime}, #{updateUser}, #{updateTime}) + + + + + update meta_data_source + set + where DataSourceId = #{datasourceid} + + + + + update meta_data_source set Status=0 where DataSourceId = #{datasourceid} + + + \ No newline at end of file diff --git a/kgBuilder-meta/src/main/resources/mapping/MetaDataTableDao.xml b/kgBuilder-meta/src/main/resources/mapping/MetaDataTableDao.xml new file mode 100644 index 0000000..1711d22 --- /dev/null +++ b/kgBuilder-meta/src/main/resources/mapping/MetaDataTableDao.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + DataTableId, DatasourceId, DataTableCode, DataTableName, Status, CreateUser, CreateTime, UpdateUser, UpdateTime + + + + + + + + + + + insert into meta_data_table(DatasourceId, DataTableCode, DataTableName, Status, CreateUser, CreateTime, UpdateUser, UpdateTime) + values (#{datasourceId}, #{dataTableCode}, #{dataTableName}, #{status}, #{createUser}, #{createTime}, #{updateUser}, #{updateTime}) + + + + + update meta_data_table + set + where DataTableId = #{datatableid} + + + + + update meta_data_table set Status=0 where DataTableId = #{datatableid} + + + \ No newline at end of file diff --git a/kgBuilder-pro/pom.xml b/kgBuilder-pro/pom.xml new file mode 100644 index 0000000..c9302ec --- /dev/null +++ b/kgBuilder-pro/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + com.warmer + kgbuilder + 0.0.1 + ../pom.xml + + com.warmer + kgBuilder-pro + release + kgBuilder-pro + jar + Demo project for Spring Boot + + 1.8 + + + + com.warmer + kgBuilder-base + 0.0.1 + + + com.warmer + kgBuilder-meta + 0.0.1 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-configuration-processor + + + org.projectlombok + lombok + + + org.springframework.boot + spring-boot-starter-test + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-starter-validation + + + org.neo4j.driver + neo4j-java-driver + 4.4.12 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.5.6 + + + + diff --git a/kgBuilder-pro/src/main/java/com/warmer/Application.java b/kgBuilder-pro/src/main/java/com/warmer/Application.java new file mode 100644 index 0000000..43cc0ad --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/Application.java @@ -0,0 +1,64 @@ +package com.warmer; + +import cn.hutool.core.util.IdUtil; +import com.warmer.base.util.DateUtil; +import com.warmer.base.util.Neo4jUtil; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.service.KGGraphService; +import com.warmer.web.service.KGManagerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@SpringBootApplication +@ComponentScan(basePackages = {"com.warmer"}) +public class Application implements ApplicationRunner { + + @Autowired + private KGManagerService kgManagerService; + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + /** + * 启动时初始化现有的neo4j 标签到mysql + * 将标签同步到mysql管理是为了权限区分,根据需要选择,mysql不是必须 + * @param args + * @throws Exception + */ + @Override + public void run(ApplicationArguments args) throws Exception { + Map labelsInfo = Neo4jUtil.getLabelsInfo(); + if(labelsInfo!=null&&labelsInfo.keySet().size()>0){ + for (String label : labelsInfo.keySet()) { + long value=(Long) labelsInfo.get(label); + KgDomain domainModel = kgManagerService.getDomainByLabel(label); + if(domainModel!=null){ + domainModel.setModifyTime(DateUtil.getDateNow()); + domainModel.setModifyUser("sa"); + domainModel.setNodeCount(value); + kgManagerService.updateDomain(domainModel); + }else { + domainModel=KgDomain.builder() + .label(label) + .name(label) + .nodeCount(value) + .createTime(DateUtil.getDateNow()) + .shipCount(0) + .type(0) + .status(1) + .commend(0) + .build(); + kgManagerService.saveDomain(domainModel); + } + } + } + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/config/Neo4jConfig.java b/kgBuilder-pro/src/main/java/com/warmer/web/config/Neo4jConfig.java new file mode 100644 index 0000000..bc60813 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/config/Neo4jConfig.java @@ -0,0 +1,32 @@ +package com.warmer.web.config; + +import org.neo4j.driver.AuthTokens; +import org.neo4j.driver.Driver; +import org.neo4j.driver.GraphDatabase; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "spring.neo4j") //指明配置节点 +public class Neo4jConfig { + @Value("${spring.neo4j.url}") + private String url; + + @Value("${spring.neo4j.username}") + private String username; + + @Value("${spring.neo4j.password}") + private String password; + + /** + * 图数据库驱动模式 + */ + + @Bean + public Driver neo4jDriver() { + return GraphDatabase.driver(url, AuthTokens.basic(username, password)); + } + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/config/WebAppConfig.java b/kgBuilder-pro/src/main/java/com/warmer/web/config/WebAppConfig.java new file mode 100644 index 0000000..d843472 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/config/WebAppConfig.java @@ -0,0 +1,27 @@ + +package com.warmer.web.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + + +@Configuration +@Data +public class WebAppConfig{ + + /** + * 在配置文件中配置的文件保存路径 + */ + @Value("${file.location}") + private String location; + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/BaseController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/BaseController.java new file mode 100644 index 0000000..7bafa60 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/BaseController.java @@ -0,0 +1,9 @@ + +package com.warmer.web.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BaseController { + Logger log = LoggerFactory.getLogger(getClass()); +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/CategoryController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/CategoryController.java new file mode 100644 index 0000000..71d6e63 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/CategoryController.java @@ -0,0 +1,101 @@ +package com.warmer.web.controller; + +import com.warmer.base.util.R; +import com.warmer.base.util.StringUtil; +import com.warmer.web.entity.CategoryNode; +import com.warmer.web.model.TreeExcel; +import com.warmer.web.model.TreeExcelRecordData; +import com.warmer.web.service.CategoryNodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +@Controller +public class CategoryController extends BaseController{ + @Autowired + CategoryNodeService categoryNodeService; + @PostMapping("/importKGNodes") + @ResponseBody + public R importKGNodes(Long categoryId, Integer parentId, HttpServletRequest request) { + if (parentId == null) { + parentId = 0; + + } + String parentCode=""; + CategoryNode searchCategoryDetail = categoryNodeService.selectByPrimaryKey(parentId); + if(searchCategoryDetail!=null){ + parentCode=searchCategoryDetail.getSystemCode(); + } + MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request; + MultipartFile file = multipartHttpServletRequest.getFile("file"); + String count = ""; + try { + if (file == null) { + return R.error("请上传 有效的excel的文件"); + } + String fileName = file.getOriginalFilename(); + String extName = fileName != null ? fileName.substring(fileName.lastIndexOf(".")) : null; + + if (StringUtil.isBlank(fileName) || (!extName.equals(".xls") && !extName.equals(".xlsx"))) { + return R.error("请上传 xls 或 xlsx 类型的文件"); + } + TreeExcel treeExcel = new TreeExcel(String.valueOf(parentId), parentCode, fileName, file.getInputStream(), new TreeExcel.IResultHandler() { + @Override + public TreeExcelRecordData store(String cellVal, String cellColor, TreeExcelRecordData parent, boolean isLeaf) { + CategoryNode submitItem = new CategoryNode(); + submitItem.setCategoryNodeName(cellVal); + submitItem.setCreateUser("tc"); + submitItem.setUpdateUser("tc"); + submitItem.setSystemCode(""); + submitItem.setCategoryId(categoryId); + List brotherNodes = categoryNodeService.selectByParentIdAndName(categoryId, Integer.parseInt(parent.getRecordId()), cellVal.trim()); + if (brotherNodes != null && brotherNodes.size() > 0) { // 如果同一级下已有同名的,不在新增。 + TreeExcelRecordData data = new TreeExcelRecordData(); + data.setRecordId(String.valueOf(brotherNodes.get(0).getCategoryNodeId())); + data.setClassCode(brotherNodes.get(0).getSystemCode()); + return data; + } + Integer parentId = parent.getRecordId() != null ? Integer.parseInt(parent.getRecordId()) : 0; + submitItem.setParentId(parentId); + int parentIsLeaf = 0; + if (parentId == 0) { + submitItem.setTreeLevel(0); + } else { + CategoryNode parentNode = categoryNodeService.selectByPrimaryKey(parentId); + if (parentNode != null) { + if(parentNode.getTreeLevel()==null){ + parentNode.setTreeLevel(0); + } + submitItem.setTreeLevel(parentNode.getTreeLevel() + 1); + parentIsLeaf = parentNode.getIsLeaf(); + } + } + submitItem.setIsLeaf(isLeaf ? 1 : 0); + categoryNodeService.insert(submitItem); + Integer id = submitItem.getCategoryNodeId(); + String classCode = String.format("%s%s%s", parent.getClassCode() != null ? parent.getClassCode() : "", StringUtil.isNotBlank(parent.getClassCode()) ? "/" : "", id); + categoryNodeService.updateCodeByPrimaryKey(id, classCode); + if (parentIsLeaf == 1) { + categoryNodeService.updateLeafStatusByPrimaryKey(parentId, 0); + } + TreeExcelRecordData data = new TreeExcelRecordData(); + data.setRecordId(String.valueOf(id)); + data.setClassCode(classCode); + return data; + } + }); + treeExcel.handleByStream(); + return R.success(count); + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage()); + return R.error("处理失败"); + } + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/DatasourceController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/DatasourceController.java new file mode 100644 index 0000000..280c7a7 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/DatasourceController.java @@ -0,0 +1,116 @@ +package com.warmer.web.controller; + +import com.warmer.base.common.PageRecord; +import com.warmer.base.util.R; +import com.warmer.meta.dto.DataTableSubmitItem; +import com.warmer.meta.dto.DatasourceSubmitItem; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.query.TableQuery; +import com.warmer.meta.service.MetaDataColumnService; +import com.warmer.meta.service.MetaDataSourceService; +import com.warmer.meta.service.MetaDataTableService; +import com.warmer.meta.vo.DataColumnVo; +import com.warmer.meta.vo.DataTableVo; +import com.warmer.meta.vo.DatasourceVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/datasource") +public class DatasourceController extends BaseController { + + @Autowired + MetaDataSourceService metaDataSourceService; + @Autowired + MetaDataTableService metaDataTableService; + + @Autowired + MetaDataColumnService metaDataColumnService; + + @GetMapping("/getDataSource") + @ResponseBody + public R> getDataSource() { + List voList = metaDataSourceService.queryList(); + return R.success(voList, "操作成功"); + } + + @GetMapping("/getDataTable") + @ResponseBody + public R> getDataTable(Integer datasourceId) { + List voList = metaDataTableService.queryByDatasourceId(datasourceId); + return R.success(voList, "操作成功"); + } + + @GetMapping("/getDataColumn") + @ResponseBody + public R> getDataColumn(Integer dataTableId) { + List voList = metaDataColumnService.queryByTableId(dataTableId); + return R.success(voList, "操作成功"); + } + @GetMapping("/getDataTableInfo") + @ResponseBody + public R> getDataTableInfo(Integer dataTableId) { + Map data=new HashMap<>(); + MetaDataTable metaDataTable = metaDataTableService.queryById(dataTableId); + DataTableVo tableItem=new DataTableVo(); + tableItem.setDataTableId(metaDataTable.getDataTableId()); + tableItem.setDatasourceId(metaDataTable.getDatasourceId()); + tableItem.setDataTableName(metaDataTable.getDataTableCode()); + tableItem.setDataTableAlia(metaDataTable.getDataTableName()); + data.put("table",tableItem); + List voList = metaDataColumnService.queryByTableId(dataTableId); + data.put("column",voList); + return R.success(data, "操作成功"); + } + @PostMapping("/getTableRecords") + @ResponseBody + public R>> getTableRecords(@RequestBody TableQuery queryItem) { + PageRecord> voList = metaDataTableService.getTableRecords(queryItem); + return R.success(voList, "操作成功"); + } + /** + * 保存数据源 + * + * @param submitItem + * @return + */ + @ResponseBody + @PostMapping(value = "/saveDataSource") + public R> saveDataSource(@RequestBody DatasourceSubmitItem submitItem) { + Map result=new HashMap<>(); + if (submitItem.getDataSourceId() == 0) { + // 插入指标来源 + MetaDataSource dataSource = metaDataSourceService.insert(submitItem.transfer()); + ArrayList tableList = metaDataTableService.getMetaTables(submitItem.transfer()); + result.put("sourceId",dataSource.getDataSourceId()); + result.put("tables",tableList); + }else{ + return R.error("暂不支持编辑"); + } + return R.success(result, "操作成功"); + } + /** + * 保存数据源 + * + * @param submitItem + * @return + */ + @ResponseBody + @RequestMapping(value = "/saveDataTable") + public R> saveDataTable(@RequestBody DataTableSubmitItem submitItem) { + Map result=new HashMap<>(); + MetaDataSource dataSource = metaDataSourceService.queryById(submitItem.getDataSourceId()); + if(dataSource==null){ + return R.error("数据源不存在"); + } + metaDataTableService.saveTables(submitItem); + return R.success(result, "操作成功"); + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/ERBuilderController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/ERBuilderController.java new file mode 100644 index 0000000..12baf8b --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/ERBuilderController.java @@ -0,0 +1,60 @@ +package com.warmer.web.controller; + +import com.warmer.base.util.R; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.request.GraphItem; +import com.warmer.web.service.KgGraphNodeService; +import com.warmer.web.service.KGManagerService; +import com.warmer.web.service.impl.WorkFlowDirectorServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@Controller +@RequestMapping(value = "/er") +public class ERBuilderController extends BaseController { + @Autowired + private KGManagerService kgService; + + @Autowired + private KgGraphNodeService kgGraphNodeService; + @Autowired + WorkFlowDirectorServiceImpl workFlowDirectorService; + @ResponseBody + @PostMapping(value = "/saveData") + public R> saveDataSource(@RequestBody GraphItem submitItem) throws IOException { + Map result = new HashMap<>(); + KgDomain domainItem = kgService.selectById(submitItem.getDomainId()); + if (domainItem == null) { + return R.error("领域不存在"); + } + kgGraphNodeService.createNode(submitItem); + return R.success(result, "操作成功"); + } + + @ResponseBody + @GetMapping(value = "/getDomainNode") + public R saveDataSource(Integer domainId) throws IOException { + KgDomain domainItem = kgService.selectById(domainId); + if (domainItem == null) { + return R.error("领域不存在"); + } + GraphItem domainNode = kgGraphNodeService.getDomainNode(domainId); + return R.success(domainNode, "操作成功"); + } + + @ResponseBody + @GetMapping(value = "/execute") + public R execute(Integer domainId){ + KgDomain domainItem = kgService.selectById(domainId); + if (domainItem == null) { + return R.error("领域不存在"); + } + workFlowDirectorService.direct(domainId); + return R.success(); + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/FileController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/FileController.java new file mode 100644 index 0000000..d9a1c5a --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/FileController.java @@ -0,0 +1,114 @@ +package com.warmer.web.controller; + +import cn.hutool.core.util.IdUtil; +import com.warmer.base.util.FileResponse; +import com.warmer.base.util.FileResult; +import com.warmer.web.config.WebAppConfig; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.util.ArrayList; +import java.util.List; + + +@Controller +@RequestMapping("/file") +public class FileController extends BaseController { + @Autowired + private WebAppConfig appConfig; + + + @PostMapping("/upload") + @ResponseBody + public FileResponse upload(HttpServletRequest req) { + FileResponse res = new FileResponse(); + List fre = new ArrayList(); + List files = ((MultipartHttpServletRequest) req).getFiles("file"); + String filePath = appConfig.getLocation(); + try { + for (MultipartFile file : files) { + FileResult fileResult = new FileResult(); + String rootFileName = file.getOriginalFilename(); + String suffix= rootFileName.substring(rootFileName.lastIndexOf(".")); + String fileName =filePath+ IdUtil.getSnowflakeNextIdStr()+"."+suffix; + File saveFile = new File(fileName); + file.transferTo(saveFile); // 文件保存 + if (StringUtils.isNotBlank(fileName)) { + String success = "上传成功"; + fileResult.setMessage(success); + fileResult.setName(rootFileName); + fileResult.setStatus(0); + String src="/file/download/"; + fileResult.setUrl(src + fileName); + fre.add(fileResult); + } + } + res.setSuccess(1); + res.setMessage("操作成功"); + res.setResults(fre); + + } catch (IOException e) { + log.error(e.getMessage()); + } + return res; + } + //文件下载相关代码 + @GetMapping(value = "/download/{fileName}") + public String downloadImage(@PathVariable("fileName")String fileName, HttpServletResponse response) { + String filePath = appConfig.getLocation() ; + String fileUrl = filePath+ File.separator + fileName; + String[] arr = fileName.split("\\."); + String suffix = arr[1]; + File file = new File(fileUrl); + + if (file.exists()) { + //response.setContentType("application/force-download");// 设置强制下载不打开 + response.addHeader("Content-Disposition","attachment;fileName=" + fileName);// 设置文件名 + byte[] buffer = new byte[1024]; + FileInputStream fis = null; + BufferedInputStream bis = null; + try { + fis = new FileInputStream(file); + bis = new BufferedInputStream(fis); + OutputStream os = response.getOutputStream(); + if("csv".equalsIgnoreCase(suffix)){ + //加上UTF-8文件的标识字符,避免乱码 + os.write(new byte []{( byte ) 0xEF ,( byte ) 0xBB ,( byte ) 0xBF }); + } + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (bis != null) { + try { + + bis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (fis != null) { + try { + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + return null; + } + + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/controller/KGBuilderController.java b/kgBuilder-pro/src/main/java/com/warmer/web/controller/KGBuilderController.java new file mode 100644 index 0000000..df219b0 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/controller/KGBuilderController.java @@ -0,0 +1,687 @@ +package com.warmer.web.controller; + +import cn.hutool.core.text.csv.CsvUtil; +import cn.hutool.core.text.csv.CsvWriter; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.IdUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.warmer.base.enums.ReturnStatus; +import com.warmer.base.util.*; +import com.warmer.web.config.WebAppConfig; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.entity.KgFeedBack; +import com.warmer.web.entity.KgNodeDetail; +import com.warmer.web.entity.KgNodeDetailFile; +import com.warmer.web.model.NodeItem; +import com.warmer.web.request.*; +import com.warmer.web.service.FeedBackService; +import com.warmer.web.service.KGGraphService; +import com.warmer.web.service.KGManagerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.*; + +@RestController +@RequestMapping(value = "/") +public class KGBuilderController extends BaseController { + + @Autowired + private WebAppConfig config; + @Autowired + private KGGraphService kgGraphService; + @Autowired + private KGManagerService kgManagerService; + @Autowired + FeedBackService feedBackService; + + /** + * 获取图谱标签列表(存放mysql表) + * + * @param queryItem + * @return + */ + @PostMapping(value = "/getGraph") // call db.labels + public R> getGraph(@RequestBody GraphQuery queryItem) { + GraphPageRecord resultRecord = new GraphPageRecord(); + try { + PageHelper.startPage(queryItem.getPageIndex(), queryItem.getPageSize(), true); + List domainList = kgManagerService.getDomainList(queryItem.getDomain(), queryItem.getType(), queryItem.getCommend()); + PageInfo pageInfo = new PageInfo(domainList); + long total = pageInfo.getTotal(); + resultRecord.setPageIndex(queryItem.getPageIndex()); + resultRecord.setPageSize(queryItem.getPageSize()); + resultRecord.setTotalCount(new Long(total).intValue()); + resultRecord.setNodeList(pageInfo.getList()); + return R.success(resultRecord); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 搜索框查询相关节点和关系 + * + * @param query + * @return + */ + @PostMapping(value = "/queryGraphResult") + public R> queryGraphResult(@RequestBody GraphQuery query) { + try { + HashMap graphData = kgGraphService.queryGraphResult(query); + return R.success(graphData); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + + } + + /** + * 根据自定义cypher查询结果 + * + * @param cypher + * @return + */ + + @RequestMapping(value = "/getCypherResult") + public R getCypherResult(String cypher) { + try { + HashMap graphData = Neo4jUtil.getGraphNodeAndShip(cypher); + return R.success(graphData); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 获取某个领域指定节点拥有的上下级的节点数 + * + * @param domain + * @param nodeId + * @return + */ + + @RequestMapping(value = "/getRelationNodeCount") + public R getRelationNodeCount(String domain, long nodeId) { + try { + long totalCount = 0; + if (!StringUtil.isBlank(domain)) { + totalCount = kgGraphService.getRelationNodeCount(domain, nodeId); + return R.success(totalCount); + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("操作失败"); + } + + /** + * 创建领域标签 + * + * @param domain + * @param type + * @return + */ + + @RequestMapping(value = "/createDomain") + public R createDomain(String domain, Integer type) { + try { + if (!StringUtil.isBlank(domain)) { + List domainItem = kgManagerService.getDomainByName(domain); + if (domainItem.size() > 0) { + return R.create(ReturnStatus.Error, "领域已存在"); + } else { + String label=String.format("%s_%s",domain, IdUtil.nanoId(6)); + int domainId = kgManagerService.quickCreateDomain(label,domain, type);// 保存到mysql + kgGraphService.createDomain(label);// 保存到图数据 + return R.success(domainId); + } + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.success(); + } + + /** + * 获取当前节点的下级节点 + * + * @param domain + * @param nodeId + * @return + */ + + @RequestMapping(value = "/getMoreRelationNode") + public R> getMoreRelationNode(String domain, String nodeId) { + try { + if (!StringUtil.isBlank(domain)) { + HashMap graphModel = kgGraphService.getMoreRelationNode(domain, nodeId); + if (graphModel != null) { + return R.success(graphModel); + } + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("没有更多数据了"); + } + + /** + * 更新节点名称 + * + * @param request + * @return + */ + + @RequestMapping(value = "/updateNodeName") + public R> updateNodeName(@RequestBody KgNodeItem request) { + HashMap graphNodeList = new HashMap(); + try { + if (!StringUtil.isBlank(request.getDomain())) { + graphNodeList = kgGraphService.updateNodeName(request.getDomain(), request.getNodeId(), request.getNodeName()); + if (graphNodeList.size() > 0) { + return R.success(graphNodeList); + } + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("操作失败"); + } + + /** + * 更新节点坐标 + * + * @param request + * @return + */ + + @RequestMapping(value = "/updateCoordinateOfNode") + public R updateCoordinateOfNode(@RequestBody NodeCoordinateSubmitItem request) { + try { + String domain = request.getDomain(); + List nodes = request.getNodes(); + kgGraphService.batchUpdateGraphNodesCoordinate(domain, nodes); + return R.success(); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 创建节点 + * + * @param entity + * @return + */ + + @RequestMapping(value = "/createNode") + public R> createNode(@RequestBody NodeItem entity) { + HashMap graphNode = new HashMap(); + try { + graphNode = kgGraphService.createNode(entity.getDomain(), entity); + if (graphNode != null && graphNode.size() > 0) { + return R.success(graphNode); + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("操作失败"); + + } + + /** + * 批量创建节点 + * + * @param request + * @return + */ + + @RequestMapping(value = "/batchCreateNode") + public R> batchCreateNode(@RequestBody BatchCreateNodeItem request) { + + HashMap rss = new HashMap(); + try { + String[] tNames = request.getTargetNames().split(","); + rss = kgGraphService.batchCreateNode(request.getDomain(), request.getSourceName(), request.getRelation(), tNames); + return R.success(rss); + } catch (Exception e) { + e.printStackTrace(); + + return R.error(e.getMessage()); + } + } + + /** + * 批量创建子节点 + * + * @param request + * @return + */ + + @RequestMapping(value = "/batchCreateChildNode") + public R> batchCreateChildNode(@RequestBody BatchCreateNodeItem request) { + + HashMap rss = new HashMap(); + try { + String[] tNames = request.getTargetNames().split(","); + rss = kgGraphService.batchCreateChildNode(request.getDomain(), request.getSourceId(), request.getEntityType(), tNames, request.getRelation()); + return R.success(rss); + } catch (Exception e) { + e.printStackTrace(); + + return R.error(e.getMessage()); + } + } + + /** + * 批量创建同级节点 + * + * @param request + * @return + */ + + @RequestMapping(value = "/batchCreateSameNode") + public R>> batchCreateSameNode(@RequestBody BatchCreateNodeItem request) { + List> rss = new ArrayList>(); + try { + rss = kgGraphService.batchCreateSameNode(request.getDomain(), request.getEntityType(), request.getSourceNames()); + return R.success(rss); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 创建连线 + * + * @param request + * @return + */ + + @RequestMapping(value = "/createLink") + public R> createLink(@RequestBody CreateLinkItem request) { + try { + HashMap cypherResult = kgGraphService.createLink(request.getDomain(), request.getSourceId(), request.getTargetId(), request.getShip()); + return R.success(cypherResult); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 更新连线信息 + * + * @param domain + * @param shipId + * @param shipName + * @return + */ + + @RequestMapping(value = "/updateLink") + public R> updateLink(String domain, long shipId, String shipName) { + try { + HashMap cypherResult = kgGraphService.updateLink(domain, shipId, shipName); + return R.success(cypherResult); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + + } + + /** + * 删除节点 + * + * @param domain + * @param nodeId + * @return + */ + + @RequestMapping(value = "/deleteNode") + public R>> deleteNode(String domain, long nodeId) { + try { + List> rList = kgGraphService.deleteNode(domain, nodeId); + return R.success(rList); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 删除领域标签 + * + * @param domainId + * @param domain + * @return + */ + + @RequestMapping(value = "/deleteDomain") + public R>> deleteDomain(Integer domainId, String domain) { + try { + kgManagerService.deleteDomain(domainId); + kgGraphService.deleteKGDomain(domain); + return R.success(); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 删除连线 + * + * @param domain + * @param shipId + * @return + */ + + @RequestMapping(value = "/deleteLink") + public R> deleteLink(String domain, long shipId) { + try { + kgGraphService.deleteLink(domain, shipId); + return R.success(); + + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + + } + + /** + * 导入图谱 + * + * @param file + * @param request + * @return + */ + + @RequestMapping(value = "/importGraph") + public R importGraph(@RequestParam(value = "file", required = true) + @Validated @NotNull(message = "请上传有效的excel的文件") @Pattern(regexp = "^(?:\\w+\\.xlsx|\\w+\\.xls)$", + message = "请上传有效的excel的文件") + MultipartFile file, + HttpServletRequest request) { + try { + String domain = request.getParameter("domain"); + Integer type = Integer.parseInt(request.getParameter("type")); + List domainList = kgManagerService.getDomainByName(domain); + int domainExist = 0; + if (domainList != null && domainList.size() > 0) { + //导入已有图谱,更新图谱创建时间 + KgDomain domainItem = domainList.get(0); + domainItem.setModifyTime(DateUtil.getDateNow()); + kgManagerService.updateDomain(domainItem); + domainExist = 1; + } else { + kgManagerService.quickCreateDomain(domain,domain, type);// 三元组 + } + if (type.equals(1)) {//三元组导入 + kgGraphService.importBySyz(file, request, domain, domainExist); + } else { + kgGraphService.importByCategory(file, request, domain); + } + return R.success("操作成功"); + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage()); + return R.error("处理失败"); + } + } + + /** + * 导出图谱 + * + * @param request + * @return + */ + + @RequestMapping(value = "/exportGraph") + public Map exportGraph(HttpServletRequest request) { + Map res = new HashMap<>(); + String label = request.getParameter("domain"); + String filePath = config.getLocation(); + String fileName = UUID.randomUUID() + ".csv"; + String fileUrl = filePath + fileName; + String cypher = String.format( + "MATCH (n:`%s`) -[r]->(m:`%s`) return n.name as source,m.name as target,r.name as relation", label, label); + List> list = Neo4jUtil.getGraphTable(cypher); + if (list.size() == 0) { + res.put("code", -1); + res.put("message", "该领域没有任何有关系的实体!"); + return res; + } + try { + CsvWriter csvWriter = CsvUtil.getWriter(fileUrl, CharsetUtil.CHARSET_UTF_8); + String[] header = {"source", "target", "relation"}; + //写入表头 + csvWriter.write(header); + for (HashMap hashMap : list) { + int colSize = hashMap.size(); + String[] cntArr = new String[colSize]; + cntArr[0] = hashMap.get("source").toString().replace("\"", ""); + cntArr[1] = hashMap.get("target").toString().replace("\"", ""); + cntArr[2] = hashMap.get("relation").toString().replace("\"", ""); + csvWriter.write(cntArr); + } + csvWriter.close(); + String csvUrl = "/file/download/" + fileName; + res.put("code", 200); + res.put("fileName", csvUrl); + res.put("message", "success!"); + return res; + } catch (Exception e) { + e.printStackTrace(); + } + + return res; + + } + + /** + * 获取节点图片 + * + * @param domainId + * @param nodeId + * @return + */ + + @RequestMapping(value = "/getNodeImage") + public R>> getNodeImageList(int domainId, int nodeId) { + try { + List images = kgManagerService.getNodeImageList(domainId, nodeId); + return R.success(images); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 获取节点描述信息 + * + * @param domainId + * @param nodeId + * @return + */ + + @RequestMapping(value = "/getNodeContent") + public R> getNodeContent(int domainId, int nodeId) { + try { + List contents = kgManagerService.getNodeContent(domainId, nodeId); + if (contents != null && contents.size() > 0) { + return R.success(contents.get(0)); + } + return R.success(new ArrayList<>()); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + + } + + /** + * 获取节点详情 + * + * @param domainId + * @param nodeId + * @return + */ + + @RequestMapping(value = "/getNodeDetail") + public R> getNodeDetail(int domainId, int nodeId) { + try { + Map res = new HashMap(); + res.put("content", ""); + res.put("imageList", new String[]{}); + List contents = kgManagerService.getNodeContent(domainId, nodeId); + if (contents != null && contents.size() > 0) { + res.replace("content", contents.get(0).getContent()); + } + List images = kgManagerService.getNodeImageList(domainId, nodeId); + if (images != null && images.size() > 0) { + res.replace("imageList", images); + } + return R.success(res); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 内容反馈 + * + * @param submitItem + * @return + */ + + @RequestMapping(value = "/feedBack") + public R> feedBack(KgFeedBack submitItem) { + try { + feedBackService.insert(submitItem); + return R.success(); + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + } + + /** + * 保存节点图片 + * + * @param params + * @return + */ + + @RequestMapping(value = "/saveNodeImage") + public R saveNodeImage(@RequestBody Map params) { + try { + int domainId = (int) params.get("domainId"); + String nodeId = params.get("nodeId").toString(); + String imagePath = params.get("imagePath").toString(); + List domainList = kgManagerService.getDomainById(domainId); + if (domainList != null && domainList.size() > 0) { + String domainName = domainList.get(0).getName(); + if (StringUtil.isNotBlank(imagePath)) { + List> submitItemList = new ArrayList>(); + Map sb = new HashMap(); + sb.put("file", imagePath); + sb.put("imageType", 0); + sb.put("domainId", domainId); + sb.put("nodeId", nodeId); + sb.put("status", 1); + sb.put("createUser", "tc"); + sb.put("createTime", DateUtil.getDateNow()); + submitItemList.add(sb); + kgManagerService.deleteNodeImage(domainId, Integer.parseInt(nodeId)); + kgManagerService.saveNodeImage(submitItemList); + // 更新到图数据库,表明该节点有附件,加个标识,0=没有,1=有 + kgGraphService.updateNodeImg(domainName, Long.parseLong(nodeId), imagePath); + return R.success("操作成功"); + } else { + kgManagerService.deleteNodeImage(domainId, Integer.parseInt(nodeId)); + kgGraphService.removeNodeImg(domainName, Long.parseLong(nodeId)); + return R.success("操作成功"); + } + } + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("操作失败"); + } + + /** + * 保存节点正文 + * + * @param params + * @return + */ + + @RequestMapping(value = "/saveNodeContent") + public R saveNodeContent(@RequestBody Map params) { + try { + String username = "tc"; + int domainId = (int) params.get("domainId"); + String nodeId = params.get("nodeId").toString(); + String content = params.get("content").toString(); + List domainList = kgManagerService.getDomainById(domainId); + if (domainList != null && domainList.size() > 0) { + String domainName = domainList.get(0).getName(); + // 检查是否存在 + List items = kgManagerService.getNodeContent(domainId, Integer.parseInt(nodeId)); + if (items != null && items.size() > 0) { + KgNodeDetail oldItem = items.get(0); + Map item = new HashMap(); + item.put("domainId", oldItem.getDomainId()); + item.put("nodeId", oldItem.getNodeId()); + item.put("content", content); + item.put("modifyUser", username); + item.put("modifyTime", DateUtil.getDateNow()); + kgManagerService.updateNodeContent(item); + return R.success("更新成功"); + } else { + Map sb = new HashMap(); + sb.put("content", content); + sb.put("domainId", domainId); + sb.put("nodeId", nodeId); + sb.put("status", 1); + sb.put("createUser", username); + sb.put("createTime", DateUtil.getDateNow()); + if (sb.size() > 0) { + kgManagerService.saveNodeContent(sb); + return R.success("保存成功"); + } + } + // 更新到图数据库,表明该节点有附件,加个标识,0=没有,1=有 + kgGraphService.updateNodeFileStatus(domainName, Long.parseLong(nodeId), 1); + } + + } catch (Exception e) { + e.printStackTrace(); + return R.error(e.getMessage()); + } + return R.error("操作失败"); + } + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/CategoryNodeDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/CategoryNodeDao.java new file mode 100644 index 0000000..0cbd85d --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/CategoryNodeDao.java @@ -0,0 +1,55 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.CategoryNode; +import com.warmer.web.request.CategoryNodeQuery; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface CategoryNodeDao { + int deleteByPrimaryKey(Integer id); + + int insert(CategoryNode record); + + int batchInsert(List records); + + void batchUpdateExpression(List records); + + CategoryNode selectByPrimaryKey(@Param("categoryNodeId")Integer categoryNodeId); + + int updateByPrimaryKey(CategoryNode record); + + int reName(@Param("categoryNodeId")Integer categoryNodeId,@Param("categoryNodeName")String categoryNodeName); + + int updateCodeByPrimaryKey(@Param("categoryNodeId")Integer categoryNodeId,@Param("systemCode")String systemCode); + + void initSystemCode(@Param("categoryId")Long categoryId,@Param("fileUuid")String fileUuid); + + void updateNodeRelation(@Param("categoryId")Long categoryId,@Param("fileUuid")String fileUuid,@Param("categoryNodeId")Integer categoryNodeId); + + void updateSystemCodeFullPath(@Param("categoryId")Long categoryId,@Param("fileUuid")String fileUuid); + + void updateTreeLevel(@Param("categoryId")Long categoryId); + + int updateLeafStatusByPrimaryKey(@Param("categoryNodeId")Integer categoryNodeId,@Param("isLeaf")Integer isLeaf); + + List queryForList(CategoryNodeQuery queryItem); + + List selectByParentId(@Param("categoryId")Long categoryId, @Param("parentId") Integer parentId); + + List selectByParentIdAndName(@Param("categoryId")Long categoryId,@Param("parentId") Integer parentId,@Param("categoryNodeName") String categoryNodeName); + + List queryForTree(@Param("categoryId") Long categoryId, @Param("categoryNodeId") Integer categoryNodeId); + List selectTreeForParent(@Param("categoryNodeId") Integer categoryNodeId); + List selectTreeForParentBySystemCode(@Param("systemCode") String systemCode); + List selectRecentEditNode(@Param("categoryId") Long categoryId); + + int deleteNodeByFileUuid(@Param("fileUuid") String fileUuid,@Param("systemCode") String systemCode); + + int deleteNodeBySystemLeftRegular(@Param("systemCode") String systemCode); + + List selectByFileUuid(@Param("fileUuid") String fileUuid); + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/FeedBackDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/FeedBackDao.java new file mode 100644 index 0000000..f5f15f1 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/FeedBackDao.java @@ -0,0 +1,19 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.KgFeedBack; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface FeedBackDao { + int deleteByPrimaryKey(Integer id); + + int insert(KgFeedBack record); + + KgFeedBack selectByPrimaryKey(@Param("id") Integer id); + + List queryForList(KgFeedBack queryItem); + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/KGGraphDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KGGraphDao.java new file mode 100644 index 0000000..8edb50f --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KGGraphDao.java @@ -0,0 +1,242 @@ +package com.warmer.web.dao; + + +import com.warmer.web.model.NodeItem; +import com.warmer.web.request.GraphQuery; +import com.warmer.base.util.GraphPageRecord; +import com.warmer.web.request.NodeCoordinateItem; +import org.apache.ibatis.annotations.Mapper; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface KGGraphDao { + /** + * 领域标签分页 + * @param queryItem + * @return + */ + GraphPageRecord> getPageDomain(GraphQuery queryItem); + /** + * 删除Neo4j 标签 + * + * @param domain + */ + void deleteKgDomain(String domain); + + /** + * 查询图谱节点和关系 + * + * @param query + * @return node relationship + */ + HashMap queryGraphResult(GraphQuery query); + + /** + * 获取节点列表 + * + * @param domain + * @param pageIndex + * @param pageSize + * @return + */ + HashMap getDomainNodes(String domain, Integer pageIndex, Integer pageSize); + + /** + * 获取某个领域指定节点拥有的上下级的节点数 + * + * @param domain + * @param nodeId + * @return long 数值 + */ + long getRelationNodeCount(String domain, long nodeId); + + /** + * 创建领域,默认创建一个新的节点,给节点附上默认属性 + * + * @param domain + */ + void createDomain(String domain); + void quickCreateDomain(String domain,String nodeName); + /** + * 获取/展开更多节点,找到和该节点有关系的节点 + * + * @param domain + * @param nodeId + * @return + */ + HashMap getMoreRelationNode(String domain, String nodeId); + + /** + * 更新节点名称 + * + * @param domain + * @param nodeId + * @param nodeName + * @return 修改后的节点 + */ + HashMap updateNodeName(String domain, String nodeId, String nodeName); + + /** + * 创建单个节点 + * + * @param domain + * @param entity + * @return + */ + HashMap createNode(String domain, NodeItem entity); + HashMap createNodeWithUUid(String domain, NodeItem entity); + + /** + * 批量创建节点和关系 + * + * @param domain + * 领域 + * @param sourceName + * 源节点 + * @param relation + * 关系 + * @param targetNames + * 目标节点数组 + * @return + */ + HashMap batchCreateNode(String domain, String sourceName, String relation, String[] targetNames); + + /** + * 批量创建下级节点 + * + * @param domain + * 领域 + * @param sourceId + * 源节点id + * @param entityType + * 节点类型 + * @param targetNames + * 目标节点名称数组 + * @param relation + * 关系 + * @return + */ + HashMap batchCreateChildNode(String domain, String sourceId, Integer entityType, + String[] targetNames, String relation); + + /** + * 批量创建同级节点 + * + * @param domain + * 领域 + * @param entityType + * 节点类型 + * @param sourceNames + * 节点名称 + * @return + */ + List> batchCreateSameNode(String domain, Integer entityType, String[] sourceNames); + + /** + * 添加关系 + * + * @param domain + * 领域 + * @param sourceId + * 源节点id + * @param targetId + * 目标节点id + * @param ship + * 关系 + * @return + */ + HashMap createLink(String domain, long sourceId, long targetId, String ship); + HashMap createLinkByUuid(String domain, long sourceId, long targetId, String ship); + + /** + * 更新关系 + * + * @param domain + * 领域 + * @param shipId + * 关系id + * @param shipName + * 关系名称 + * @return + */ + HashMap updateLink(String domain, long shipId, String shipName); + + /** + * 删除节点(先删除关系再删除节点) + * + * @param domain + * @param nodeId + * @return + */ + List> deleteNode(String domain, long nodeId); + + /** + * 删除关系 + * + * @param domain + * @param shipId + */ + void deleteLink(String domain, long shipId); + + /** + * 段落识别出的三元组生成图谱 + * + * @param domain + * @param entityType + * @param operateType + * @param sourceId + * @param rss + * 关系三元组 + * [[startname;ship;endname],[startname1;ship1;endname1],[startname2;ship2;endname2]] + * @return node relationship + */ + HashMap createGraphByText(String domain, Integer entityType, Integer operateType, Integer sourceId, + String[] rss); + /** + * 批量创建节点,关系 + * @param domain + * @param params 三元组 sourceNode,relationship,targetNode + */ + void batchCreateGraph(String domain, List> params); + + /** + * 批量更新节点坐标 + * @param domain + * @param params + */ + void batchUpdateGraphNodesCoordinate(String domain,List params); + /** + * 更新节点有无附件 + * @param domain + * @param nodeId + * @param status + */ + void updateNodeFileStatus(String domain,long nodeId, int status); + + /** + * 更新图谱节点的图片 + * @param domain + * @param nodeId + * @param img + */ + void updateNodeImg(String domain, long nodeId, String img); + + /** + * 移除节点图片 + * @param domain + * @param nodeId + */ + void removeNodeImg(String domain, long nodeId); + /** + * 导入csv + * @param domain + * @param csvUrl + * @param status + */ + void batchInsertByCsv(String domain, String csvUrl, int status) ; + void updateCoordinateOfNode(String domain, String uuid, Double fx, Double fy); +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphLinkDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphLinkDao.java new file mode 100644 index 0000000..99e4c8d --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphLinkDao.java @@ -0,0 +1,14 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.KgGraphLink; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface KgGraphLinkDao { + List selectByDomainId(Integer domainId); + int insert(KgGraphLink record); + int batchInsert(List records); + int deleteByDomainId(Integer domainId); +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeDao.java new file mode 100644 index 0000000..58bb929 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeDao.java @@ -0,0 +1,17 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.KgGraphNode; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface KgGraphNodeDao { + List selectByDomainId(Integer domainId); + + int insert(KgGraphNode record); + + int batchInsert(List record); + + int deleteByDomainId(Integer domainId); +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeMapDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeMapDao.java new file mode 100644 index 0000000..2c9148a --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KgGraphNodeMapDao.java @@ -0,0 +1,20 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.KgGraphNodeMap; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface KgGraphNodeMapDao { + + int insert(KgGraphNodeMap record); + + int batchInsert(List records); + + int deleteByDomainId(Integer domainId); + + List selectByDomainId(Integer domainId); + + List selectByDomainIdAndNodeId(Integer domainId,Long nodeId); +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/KnowledgeGraphDao.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KnowledgeGraphDao.java new file mode 100644 index 0000000..204d5ff --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/KnowledgeGraphDao.java @@ -0,0 +1,29 @@ +package com.warmer.web.dao; + +import com.warmer.web.entity.KgDomain; +import com.warmer.web.entity.KgNodeDetail; +import com.warmer.web.entity.KgNodeDetailFile; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface KnowledgeGraphDao { + List getDomains(); + List getDomainList(@Param("domainName")String domainName, @Param("type")Integer type,@Param("commend")Integer commend); + void saveDomain(KgDomain map); + void updateDomain(KgDomain map); + void deleteDomain(@Param("id") Integer id); + List getDomainByName(@Param("domainName") String domainName); + KgDomain getDomainByLabel(@Param("label") String label); + List getDomainById(@Param("domainId")Integer domainId); + KgDomain selectById(@Param("domainId")Integer domainId); + void saveNodeImage(@Param("maplist") List> mapList); + void saveNodeContent(@Param("params") Map map); + void updateNodeContent(@Param("params") Map map); + List getNodeImageList(@Param("domainId") Integer domainId, @Param("nodeId") Integer nodeId); + List getNodeContent(@Param("domainId") Integer domainId, @Param("nodeId") Integer nodeId); + void deleteNodeImage(@Param("domainId") Integer domainId,@Param("nodeId") Integer nodeId); +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/dao/impl/KGGraphRepository.java b/kgBuilder-pro/src/main/java/com/warmer/web/dao/impl/KGGraphRepository.java new file mode 100644 index 0000000..0480534 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/dao/impl/KGGraphRepository.java @@ -0,0 +1,726 @@ +package com.warmer.web.dao.impl; + +import com.warmer.base.util.JsonHelper; +import com.warmer.base.util.Neo4jUtil; +import com.warmer.web.dao.KGGraphDao; +import com.warmer.web.model.NodeItem; + +import com.warmer.web.request.GraphQuery; +import com.warmer.base.util.GraphPageRecord; +import com.warmer.base.util.StringUtil; +import com.warmer.web.request.NodeCoordinateItem; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Repository +public class KGGraphRepository implements KGGraphDao { + /** + * 领域标签分页 + */ + @Override + public GraphPageRecord> getPageDomain(GraphQuery queryItem) { + GraphPageRecord> resultRecord = new GraphPageRecord>(); + try { + String totalCountQuery = "MATCH (n) RETURN count(distinct labels(n)) as count"; + long totalCount = 0; + totalCount = Neo4jUtil.getGraphValue(totalCountQuery); + if (totalCount > 0) { + int skipCount = (queryItem.getPageIndex() - 1) * queryItem.getPageSize(); + int limitCount = queryItem.getPageSize(); + String domainSql = String.format( + "START n=node(*) RETURN distinct labels(n) as domain,count(n) as nodeCount order by nodeCount desc SKIP %s LIMIT %s", + skipCount, limitCount); + List> pageList = Neo4jUtil.getGraphNode(domainSql); + resultRecord.setPageIndex(queryItem.getPageIndex()); + resultRecord.setPageSize(queryItem.getPageSize()); + resultRecord.setTotalCount(totalCount); + resultRecord.setNodeList(pageList); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return resultRecord; + } + + /** + * 删除Neo4j 标签 + */ + @Override + public void deleteKgDomain(String domain) { + try { + String deleteRelation = String.format("MATCH (n:`%s`)-[r]-(m) detach delete r", domain); + Neo4jUtil.runCypherSql(deleteRelation); + String deleteNode = String.format("MATCH (n:`%s`) detach delete n", domain); + Neo4jUtil.runCypherSql(deleteNode); + } catch (Exception e) { + e.printStackTrace(); + + } + } + + /** + * 查询图谱节点和关系 + */ + @Override + public HashMap queryGraphResult(GraphQuery query) { + HashMap nr = new HashMap(); + try { + String domain = query.getDomain(); + // MATCH (n:`症状`) -[r]-(m:症状) where r.name='治疗' or r.name='危险因素' return n,m + if (!StringUtil.isBlank(domain)) { + String cqr = ""; + List lis = new ArrayList(); + if (query.getRelation() != null && query.getRelation().length > 0) { + for (String r : query.getRelation()) { + String it = String.format("r.name='%s'", r); + lis.add(it); + } + cqr = String.join(" or ", lis); + } + String cqWhere = ""; + if (!StringUtil.isBlank(query.getNodeName()) || !StringUtil.isBlank(cqr)) { + + if (!StringUtil.isBlank(query.getNodeName())) { + if (query.getMatchType() == 1) { + cqWhere = String.format("where n.name ='%s' ", query.getNodeName()); + + } else { + cqWhere = String.format("where n.name contains('%s')", query.getNodeName()); + } + } + String nodeOnly = cqWhere; + if (!StringUtil.isBlank(cqr)) { + if (StringUtil.isBlank(cqWhere)) { + cqWhere = String.format(" where ( %s )", cqr); + + } else { + cqWhere += String.format(" and ( %s )", cqr); + } + + } + // 下边的查询查不到单个没有关系的节点,考虑要不要左箭头 + String nodeSql = String.format("MATCH (n:`%s`) <-[r]->(m) %s return * limit %s", domain, cqWhere, + query.getPageSize()); + HashMap graphNode = Neo4jUtil.getGraphNodeAndShip(nodeSql); + Object node = graphNode.get("node"); + // 没有关系显示则显示节点 + if (node != null) { + nr.put("node", graphNode.get("node")); + nr.put("relationship", graphNode.get("relationship")); + } else { + String nodecql = String.format("MATCH (n:`%s`) %s RETURN distinct(n) limit %s", domain, + nodeOnly, query.getPageSize()); + List> nodeItem = Neo4jUtil.getGraphNode(nodecql); + nr.put("node", nodeItem); + nr.put("relationship", new ArrayList>()); + } + } else { + String nodeSql = String.format("MATCH (n:`%s`) %s RETURN distinct(n) limit %s", domain, cqWhere, + query.getPageSize()); + List> graphNode = Neo4jUtil.getGraphNode(nodeSql); + nr.put("node", graphNode); + String domainSql = String.format("MATCH (n:`%s`)<-[r]-> (m) %s RETURN distinct(r) limit %s", domain, + cqWhere, query.getPageSize());// m是否加领域 + List> graphRelation = Neo4jUtil.getGraphRelationShip(domainSql); + nr.put("relationship", graphRelation); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return nr; + } + + /** + * 获取节点列表 + */ + @Override + public HashMap getDomainNodes(String domain, Integer pageIndex, Integer pageSize) { + HashMap resultItem = new HashMap(); + List> ents = new ArrayList>(); + List> concepts = new ArrayList>(); + List> props = new ArrayList>(); + List> methods = new ArrayList>(); + List> entitys = new ArrayList>(); + try { + int skipCount = (pageIndex - 1) * pageSize; + int limitCount = pageSize; + String domainSql = String.format("START n=node(*) MATCH (n:`%s`) RETURN n SKIP %s LIMIT %s", domain, + skipCount, limitCount); + if (!StringUtil.isBlank(domain)) { + ents = Neo4jUtil.getGraphNode(domainSql); + for (HashMap hashMap : ents) { + Object et = hashMap.get("entityType"); + if (et != null) { + String typeStr = et.toString(); + if (StringUtil.isNotBlank(typeStr)) { + int type = Integer.parseInt(et.toString()); + if (type == 0) { + concepts.add(hashMap); + } else if (type == 1) { + entitys.add(hashMap); + } else if (type == 2 || type == 3) { + props.add(hashMap);// 属性和方法放在一起展示 + } else { + // methods.add(hashMap); + } + } + } + } + resultItem.put("concepts", concepts); + resultItem.put("props", props); + resultItem.put("methods", methods); + resultItem.put("entitys", entitys); + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return resultItem; + } + + /** + * 获取某个领域指定节点拥有的上下级的节点数 + */ + @Override + public long getRelationNodeCount(String domain, long nodeId) { + long totalCount = 0; + try { + if (!StringUtil.isBlank(domain)) { + String nodeSql = String.format("MATCH (n:`%s`) <-[r]->(m) where id(n)=%s return count(m)", domain, + nodeId); + totalCount = Neo4jUtil.getGraphValue(nodeSql); + } + } catch (Exception e) { + e.printStackTrace(); + } + return totalCount; + } + + /** + * 创建领域,默认创建一个新的节点,给节点附上默认属性 + */ + @Override + public void createDomain(String domain) { + try { + String cypherSql = String.format( + "create (n:`%s`{entityType:0,name:''}) return id(n)", domain); + Neo4jUtil.runCypherSql(cypherSql); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void quickCreateDomain(String domain,String nodeName) { + try { + String cypherSql = String.format( + "create (n:`%s`{entityType:0,name:'%s'}) return id(n)", domain,nodeName); + Neo4jUtil.runCypherSql(cypherSql); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** + * 获取/展开更多节点,找到和该节点有关系的节点 + */ + @Override + public HashMap getMoreRelationNode(String domain, String nodeId) { + HashMap result = new HashMap(); + try { + String cypherSql = String.format("MATCH (n:`%s`) -[r]-(m) where id(n)=%s return * limit 100", domain, + nodeId); + result = Neo4jUtil.getGraphNodeAndShip(cypherSql); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 更新节点名称 + */ + @Override + public HashMap updateNodeName(String domain, String nodeId, String nodeName) { + HashMap result = new HashMap(); + List> graphNodeList = new ArrayList>(); + try { + String cypherSql = String.format("MATCH (n:`%s`) where id(n)=%s set n.name='%s' return n", domain, nodeId, + nodeName); + graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + if (graphNodeList.size() > 0) { + return graphNodeList.get(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 创建单个节点 + */ + @Override + public HashMap createNode(String domain, NodeItem entity) { + HashMap rss = new HashMap(); + List> graphNodeList = new ArrayList>(); + try { + if (entity.getUuid() != 0) { + String sqlKeyVal = Neo4jUtil.getKeyValCyphersql(entity); + String cypherSql = String.format("match (n:`%s`) where id(n)=%s set %s return n", domain, + entity.getUuid(), sqlKeyVal); + graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + } else { + entity.setColor("#ff4500");// 默认颜色 + entity.setR(30);// 默认半径 + String propertiesString = Neo4jUtil.getFilterPropertiesJson(JsonHelper.toJSONString(entity)); + String cypherSql = String.format("create (n:`%s` %s) return n", domain, propertiesString); + graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + } + if (graphNodeList.size() > 0) { + rss = graphNodeList.get(0); + return rss; + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + /** + * 自定义uuid,重复则返回节点,不存在则创建 + * @param domain + * @param entity + * @return + */ + @Override + public HashMap createNodeWithUUid(String domain, NodeItem entity) { + HashMap rss = new HashMap(); + List> graphNodeList = new ArrayList>(); + try { + if (entity.getUuid() != 0) { + String sqlKeyVal = Neo4jUtil.getKeyValCyphersql(entity); + String cypherSql = String.format("match (n:`%s`) where id(n)=%s set %s return n", domain, + entity.getUuid(), sqlKeyVal); + graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + } + if (graphNodeList.size() > 0) { + rss = graphNodeList.get(0); + return rss; + } + entity.setName(entity.getName()); + entity.setColor(entity.getColor()); + entity.setR(30);// 默认半径 + entity.setUuid(entity.getUuid()); + String propertiesString = Neo4jUtil.getFilterPropertiesJson(JsonHelper.toJSONString(entity)); + String cypherSql = String.format("create (n:`%s` %s) return n", domain, propertiesString); + graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + if (graphNodeList.size() > 0) { + rss = graphNodeList.get(0); + return rss; + } + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + /** + * 批量创建节点和关系 + */ + @Override + public HashMap batchCreateNode(String domain, String sourceName, String relation, + String[] targetNames) { + HashMap rss = new HashMap(); + List> nodes = new ArrayList>(); + List> ships = new ArrayList>(); + try { + String cypherSqlFmt = "create (n:`%s` {name:'%s',color:'#ff4500',r:30}) return n"; + String cypherSql = String.format(cypherSqlFmt, domain, sourceName);// 概念实体 + List> graphNodeList = Neo4jUtil.getGraphNode(cypherSql); + if (graphNodeList.size() > 0) { + HashMap sourceNode = graphNodeList.get(0); + nodes.add(sourceNode); + String sourceUuid = String.valueOf(sourceNode.get("uuid")); + for (String tn : targetNames) { + String targetNodeSql = String.format(cypherSqlFmt, domain, tn); + List> targetNodeList = Neo4jUtil.getGraphNode(targetNodeSql); + if (targetNodeList.size() > 0) { + HashMap targetNode = targetNodeList.get(0); + nodes.add(targetNode); + String targetUuid = String.valueOf(targetNode.get("uuid")); + String rSql = String.format( + "match(n:`%s`),(m:`%s`) where id(n)=%s and id(m)=%s create (n)-[r:RE {name:'%s'}]->(m) return r", + domain, domain, sourceUuid, targetUuid, relation); + List> rShipList = Neo4jUtil.getGraphRelationShip(rSql); + ships.addAll(rShipList); + } + + } + } + rss.put("nodes", nodes); + rss.put("ships", ships); + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + /** + * 批量创建下级节点 + * + * @param domain 领域 + * @param sourceId 源节点id + * @param entityType 节点类型 + * @param targetNames 目标节点名称数组 + * @param relation 关系 + */ + @Override + public HashMap batchCreateChildNode(String domain, String sourceId, Integer entityType, + String[] targetNames, String relation) { + HashMap rss = new HashMap(); + List> nodes = new ArrayList>(); + List> ships = new ArrayList>(); + try { + String cypherSqlFmt = "create (n:`%s`{name:'%s',color:'#ff4500',r:30}) return n"; + String cypherSql = String.format("match (n:`%s`) where id(n)=%s return n", domain, sourceId); + List> sourceNodeList = Neo4jUtil.getGraphNode(cypherSql); + if (sourceNodeList.size() > 0) { + nodes.addAll(sourceNodeList); + for (String tn : targetNames) { + String targetNodeSql = String.format(cypherSqlFmt, domain, tn); + List> targetNodeList = Neo4jUtil.getGraphNode(targetNodeSql); + if (targetNodeList.size() > 0) { + HashMap targetNode = targetNodeList.get(0); + nodes.add(targetNode); + String targetUuid = String.valueOf(targetNode.get("uuid")); + // 创建关系 + String rSql = String.format( + "match(n:`%s`),(m:`%s`) where id(n)=%s and id(m)=%s create (n)-[r:RE {name:'%s'}]->(m) return r", + domain, domain, sourceId, targetUuid, relation); + List> shipList = Neo4jUtil.getGraphRelationShip(rSql); + ships.addAll(shipList); + } + } + } + rss.put("nodes", nodes); + rss.put("ships", ships); + + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + /** + * 批量创建同级节点 + * + * @param domain 领域 + * @param entityType 节点类型 + * @param sourceNames 节点名称 + */ + @Override + public List> batchCreateSameNode(String domain, Integer entityType, String[] sourceNames) { + List> rss = new ArrayList>(); + try { + String cypherSqlFmt = "create (n:`%s`{name:'%s',color:'#ff4500',r:30}) return n"; + for (String tn : sourceNames) { + String sourceNodeSql = String.format(cypherSqlFmt, domain, tn, entityType); + List> targetNodeList = Neo4jUtil.getGraphNode(sourceNodeSql); + rss.addAll(targetNodeList); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + /** + * 添加关系 + * + * @param domain 领域 + * @param sourceId 源节点id + * @param targetId 目标节点id + * @param ship 关系 + */ + @Override + public HashMap createLink(String domain, long sourceId, long targetId, String ship) { + HashMap rss = new HashMap(); + try { + String cypherSql = String.format("MATCH (n:`%s`),(m:`%s`) WHERE id(n)=%s AND id(m) = %s " + + "CREATE (n)-[r:RE{name:'%s'}]->(m)" + "RETURN r", domain, domain, sourceId, targetId, ship); + List> cypherResult = Neo4jUtil.getGraphRelationShip(cypherSql); + if (cypherResult.size() > 0) { + rss = cypherResult.get(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + + @Override + public HashMap createLinkByUuid(String domain, long sourceId, long targetId, String ship) { + HashMap rss = new HashMap(); + try { + String cypherSql = String.format("MATCH (n:`%s`),(m:`%s`) WHERE n.uuid=%s AND m.uuid = %s " + + "CREATE (n)-[r:RE{name:'%s'}]->(m)" + "RETURN r", domain, domain, sourceId, targetId, ship); + List> cypherResult = Neo4jUtil.getGraphRelationShip(cypherSql); + if (cypherResult.size() > 0) { + rss = cypherResult.get(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return rss; + } + /** + * 更新关系 + * + * @param domain 领域 + * @param shipId 关系id + * @param shipName 关系名称 + */ + @Override + public HashMap updateLink(String domain, long shipId, String shipName) { + HashMap rss = new HashMap(); + try { + String cypherSql = String.format("MATCH (n:`%s`) -[r]->(m) where id(r)=%s set r.name='%s' return r", domain, + shipId, shipName); + List> cypherResult = Neo4jUtil.getGraphRelationShip(cypherSql); + if (cypherResult.size() > 0) { + rss = cypherResult.get(0); + } + } catch (Exception e) { + e.printStackTrace(); + } + return rss; + } + + /** + * 删除节点(先删除关系再删除节点) + * + */ + @Override + public List> deleteNode(String domain, long nodeId) { + List> result = new ArrayList>(); + try { + String nSql = String.format("MATCH (n:`%s`) where id(n)=%s return n", domain, nodeId); + result = Neo4jUtil.getGraphNode(nSql); + String deleteRelationSql = String.format("MATCH (n:`%s`) -[r]-(m) where id(n)=%s detach delete r", domain, nodeId); + Neo4jUtil.runCypherSql(deleteRelationSql); + String deleteNodeSql = String.format("MATCH (n:`%s`) where id(n)=%s detach delete n", domain, nodeId); + Neo4jUtil.runCypherSql(deleteNodeSql); + return result; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + /** + * 删除关系 + * + */ + @Override + public void deleteLink(String domain, long shipId) { + try { + String cypherSql = String.format("MATCH (n:`%s`) -[r]-(m) where id(r)=%s detach delete r", domain, shipId); + Neo4jUtil.runCypherSql(cypherSql); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 段落识别出的三元组生成图谱 + * + * @param domain 领域名称 + * @param entityType 实体类型 + * @param operateType 操作类型 + * @param sourceId 节点id + * @param rss 关系三元组 + * [[startname;ship;endname],[startname1;ship1;endname1],[startname2;ship2;endname2]] + * @return node relationship + */ + @Override + public HashMap createGraphByText(String domain, Integer entityType, Integer operateType, + Integer sourceId, String[] rss) { + HashMap rsList = new HashMap(); + try { + List nodeIds = new ArrayList(); + List> nodeList = new ArrayList>(); + List> shipList = new ArrayList>(); + + if (rss != null && rss.length > 0) { + for (String item : rss) { + String[] ns = item.split(";"); + String nodeStart = ns[0]; + String ship = ns[1]; + String nodeEnd = ns[2]; + String nodeStartSql = String.format("MERGE (n:`%s`{name:'%s',entityType:'%s'}) return n", domain, + nodeStart, entityType); + String nodeEndSql = String.format("MERGE (n:`%s`{name:'%s',entityType:'%s'}) return n", domain, + nodeEnd, entityType); + // 创建初始节点 + List> startNode = Neo4jUtil.getGraphNode(nodeStartSql); + // 创建结束节点 + List> endNode = Neo4jUtil.getGraphNode(nodeEndSql); + Object startId = startNode.get(0).get("uuid"); + if (!nodeIds.contains(startId)) { + nodeIds.add(startId); + nodeList.addAll(startNode); + } + Object endId = endNode.get(0).get("uuid"); + if (!nodeIds.contains(endId)) { + nodeIds.add(endId); + nodeList.addAll(endNode); + } + if (sourceId != null && sourceId > 0 && operateType == 2) {// 添加下级 + String shipSql = String.format( + "MATCH (n:`%s`),(m:`%s`) WHERE id(n)=%s AND id(m) = %s " + + "CREATE (n)-[r:RE{name:'%s'}]->(m)" + "RETURN r", + domain, domain, sourceId, startId, ""); + List> shipResult = Neo4jUtil.getGraphRelationShip(shipSql); + shipList.add(shipResult.get(0)); + } + String shipSql = String.format("MATCH (n:`%s`),(m:`%s`) WHERE id(n)=%s AND id(m) = %s " + + "CREATE (n)-[r:RE{name:'%s'}]->(m)" + "RETURN r", domain, domain, startId, endId, ship); + List> shipResult = Neo4jUtil.getGraphRelationShip(shipSql); + shipList.addAll(shipResult); + + } + rsList.put("node", nodeList); + rsList.put("relationship", shipList); + } + + } catch (Exception e) { + e.printStackTrace(); + } + return rsList; + } + + @Override + public void batchCreateGraph(String domain, List> params) { + try { + if (params != null && params.size() > 0) { + String nodeStr = Neo4jUtil.getFilterPropertiesJson(JsonHelper.toJSONString(params)); + String nodeCypher = String + .format("UNWIND %s as row " + " MERGE (n:`%s` {name:row.SourceNode,source:row.Source})" + + " MERGE (m:`%s` {name:row.TargetNode,source:row.Source})", nodeStr, domain, domain); + Neo4jUtil.runCypherSql(nodeCypher); + String relationShipCypher = String.format("UNWIND %s as row " + " MATCH (n:`%s` {name:row.SourceNode})" + + " MATCH (m:`%s` {name:row.TargetNode})" + " MERGE (n)-[:RE{name:row.RelationShip}]->(m)", + nodeStr, domain, domain); + Neo4jUtil.runCypherSql(relationShipCypher); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void batchUpdateGraphNodesCoordinate(String domain,List params) { + try { + if (params != null && params.size() > 0) { + String nodeStr = Neo4jUtil.getFilterPropertiesJson(JsonHelper.toJSONString(params)); + String nodeCypher = String + .format("UNWIND %s as row " + " MATCH (n:`%s`) where id(n)=row.uuid SET n.fx=row.fx,n.fy=row.fy", nodeStr, domain); + Neo4jUtil.runCypherSql(nodeCypher); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + /** + * 批量导入csv + * + */ + @Override + public void batchInsertByCsv(String domain, String csvUrl, int isCreateIndex) { + String loadNodeCypher1 = null; + String loadNodeCypher2 = null; + String addIndexCypher = null; + addIndexCypher = " CREATE INDEX ON :`" + domain + "`(name);"; + loadNodeCypher1 = " USING PERIODIC COMMIT 500 LOAD CSV FROM '" + csvUrl + "' AS line " + " MERGE (:`" + domain + + "` {name:line[0]});"; + loadNodeCypher2 = " USING PERIODIC COMMIT 500 LOAD CSV FROM '" + csvUrl + "' AS line " + " MERGE (:`" + domain + + "` {name:line[1]});"; + // 拼接生产关系导入cypher + String loadRelCypher = null; + String type = "RE"; + loadRelCypher = " USING PERIODIC COMMIT 500 LOAD CSV FROM '" + csvUrl + "' AS line " + " MATCH (m:`" + domain + + "`),(n:`" + domain + "`) WHERE m.name=line[0] AND n.name=line[1] " + " MERGE (m)-[r:" + type + "]->(n) " + + " SET r.name=line[2];"; + if(isCreateIndex==0){//已经创建索引的不能重新创建 + Neo4jUtil.runCypherSql(addIndexCypher); + } + Neo4jUtil.runCypherSql(loadNodeCypher1); + Neo4jUtil.runCypherSql(loadNodeCypher2); + Neo4jUtil.runCypherSql(loadRelCypher); + } + + @Override + public void updateNodeFileStatus(String domain, long nodeId, int status) { + try { + String nodeCypher = String.format("match (n:`%s`) where id(n)=%s set n.hasFile=%s ", domain, nodeId, status); + Neo4jUtil.runCypherSql(nodeCypher); + + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void updateNodeImg(String domain, long nodeId, String img) { + try { + String nodeCypher = String.format("match (n:`%s`) where id(n)=%s set n.image='%s' ", domain, nodeId, img); + Neo4jUtil.runCypherSql(nodeCypher); + + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void removeNodeImg(String domain, long nodeId) { + try { + String nodeCypher = String.format("match (n:`%s`) where id(n)=%s remove n.image ", domain, nodeId); + Neo4jUtil.runCypherSql(nodeCypher); + + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void updateCoordinateOfNode(String domain, String uuid, Double fx, Double fy) { + String cypher = null; + if (fx == null && fy == null) { + cypher = " MATCH (n:`" + domain + "`) where ID(n)=" + uuid + + " set n.fx=null, n.fy=null; "; + } else { + assert fx != null; + if ("0.0".equals(fx.toString()) && "0.0".equals(fy.toString())) { + cypher = " MATCH (n:`" + domain + "`) where ID(n)=" + uuid + + " set n.fx=null, n.fy=null; "; + } else { + cypher = " MATCH (n:`" + domain + "`) where ID(n)=" + uuid + + " set n.fx='" + fx + "', n.fy='" + fy + "';"; + } + } + Neo4jUtil.runCypherSql(cypher); + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/domain/ComponentContainer.java b/kgBuilder-pro/src/main/java/com/warmer/web/domain/ComponentContainer.java new file mode 100644 index 0000000..9241834 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/domain/ComponentContainer.java @@ -0,0 +1,153 @@ +package com.warmer.web.domain; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * DataNode 构成的 map + * key: 组件DataNode 的id + * value: 组件DataNode 对象 + */ +@Data +public class ComponentContainer { + HashMap dataNodeList; + List dataLinkList; + /** + * 构造方法 + */ + public ComponentContainer() { + this.dataNodeList = new HashMap<>(); + this.dataLinkList = new ArrayList<>(); + } + + /** + * 添加DataNode 键值对 + * @param dataNode + */ + public void addNode(DataNode dataNode) { + this.dataNodeList.put(dataNode.getId(), dataNode); + } + + /** + * 获取map中的所有DataNode, 即全部map 中所有 value + * @return List + */ + public List getNodes() { + return new ArrayList<>(this.dataNodeList.values()); + } + + + /** + * 根据key(nodeId), 把value(DataNode) 标记为 executedNode + */ + public void markExecutedDone(String nodeId) { + this.dataNodeList.get(nodeId).setExecuted(true); + } + + /** + * 标记该DataNode 为 executedNode + */ + public void markExecutedDone(DataNode dataNode) { + String nodeId = dataNode.getId(); + this.markExecutedDone(nodeId); + } + public void markValidDone(DataNode dataNode) { + //String nodeId = dataNode.getId(); + //this.dataNodeList.get(nodeId).setValid(true); + dataNode.setValid(true); + } + /** + * 获取startNode list + */ + public List getStartNodes() { + List startNodes=new ArrayList<>(); + for (String key : this.dataNodeList.keySet()) { + List sourceIds = this.getTargetIds(); + boolean isStart = !sourceIds.contains(key); + if (isStart) { + DataNode dataNode = this.dataNodeList.get(key); + dataNode.setStart(true); + startNodes.add(dataNode); + } + } + return startNodes; + } + + /** + * 根据nodeId 获取 DataNode + */ + public DataNode getDataNodeByNodeId(String nodeId) { + return this.dataNodeList.get(nodeId); + } + /** + * 根据nodeId list 获取 DataNode list + * @param list + * @return List + */ + public List getNodesByList(List list) { + List nodeList = new ArrayList<>(); + list.forEach(nodeId -> { + DataNode node = this.dataNodeList.get(nodeId); + nodeList.add(node); + }); + return nodeList; + } + + /** + * 判断当前节点所有一度前置节点是否全部执行完毕 + * @param nodeId 节点id + * @return true 一度前置节点全部执行完毕 + * false 一度前置节点未执行完毕 + */ + public boolean isPreNodesExecuted(String nodeId) { + DataNode currentNode = this.dataNodeList.get(nodeId); + List preNodes = currentNode.getPrevNodes(); + return preNodes.stream().allMatch(DataNode::isExecuted); + } + public boolean isPreNodesValid(String nodeId) { + DataNode currentNode = this.dataNodeList.get(nodeId); + List preNodes = currentNode.getPrevNodes(); + return preNodes.stream().allMatch(DataNode::isValid); + } + /** + * 所有节点是否全部执行完毕 + * @return true 流程节点全部执行完毕 + * false 流程未执行完毕 + */ + public boolean isAllExecuted() { + return this.getNodes().stream().allMatch(DataNode::isExecuted); + } + + public boolean isAllValid() { + return this.getNodes().stream().allMatch(DataNode::isValid); + } + + /** + *添加link元素到linkList + * @param dataLink + */ + public void addLink(DataLink dataLink) { + this.dataLinkList.add(dataLink); + } + + + /** + * 获取当前link list中所有target节点的id,及除起始节点外的所有节点 + * 如 a->b b->c b->d + * 则 b c d + * 的id会被返回 + */ + public List getTargetIds() { + List list = new ArrayList<>(); + this.dataLinkList.forEach(link -> { + String targetId = link.getTargetId(); + if ( !list.contains(targetId) ) { + list.add(targetId); + } + }); + return list; + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataLink.java b/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataLink.java new file mode 100644 index 0000000..2dc00a0 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataLink.java @@ -0,0 +1,19 @@ +package com.warmer.web.domain; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +/** + * 数据分析流程化配置中的 组件连接 + * ComponentLink + */ +@Data +public class DataLink { + + String sourceId; + + String targetId; + + String label; + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataNode.java b/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataNode.java new file mode 100644 index 0000000..06a1a8b --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/domain/DataNode.java @@ -0,0 +1,46 @@ +package com.warmer.web.domain; + +import com.warmer.web.request.GraphNodeItem; +import lombok.Data; + +import java.util.List; +import java.util.Map; +/** + * 数据分析流程化配置中的节点数据存放对象 + */ +@Data +public class DataNode { + /** + * 组件id + */ + private String id; + private String domain; + + private String nodeName; + + /** + * 组件类型code:调用相关的服务 + */ + private String nodeCode; + + /** + * 组件数据json + */ + private GraphNodeItem data; + + /** + * 组件输入:所有指向当前节点的上一组件id集合 + */ + private List prevNodes; + /** + * 组件输出:当前节点的下一组件id集合 + */ + private List nextNodes; + + + private boolean isStart; + + private boolean isExecuted; + private boolean isValid; + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/CategoryNode.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/CategoryNode.java new file mode 100644 index 0000000..13270f7 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/CategoryNode.java @@ -0,0 +1,75 @@ +package com.warmer.web.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class CategoryNode { + /** + *节点id + */ + + private Integer categoryNodeId; + /** + *节点名称 + */ + private String categoryNodeName; + /** + *节点编码 + */ + private String categoryNodeCode; + /** + *节点颜色 + */ + private String color; + + /** + * 系统编码 + */ + private String systemCode; + /** + *分类id + */ + private Long categoryId; + /** + *节点父id + */ + private Integer parentId; + /** + *节点父编码 + */ + private String parentCode; + + /** + * 附件uuid + */ + private String fileUuid; + /** + *层数 + */ + private Integer treeLevel; + /** + *是否叶子节点 + */ + private Integer isLeaf; + /** + *状态 + */ + private Integer status; + + + private String createUser; + /** + * + */ + private Date createTime; + /** + * + */ + private String updateUser; + /** + * + */ + private Date updateTime; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgDomain.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgDomain.java new file mode 100644 index 0000000..3368be3 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgDomain.java @@ -0,0 +1,29 @@ +package com.warmer.web.entity; + +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Tolerate; + +import java.util.Date; + +@Data +@Builder +public class KgDomain { + private Integer id; + private String name; + private String label; + private long nodeCount; + private long shipCount; + private Integer status; + private String createUser; + private String modifyUser; + private Integer type; + private Integer commend; + private Date createTime; + private Date modifyTime; + @Tolerate + public KgDomain(){ + + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgFeedBack.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgFeedBack.java new file mode 100644 index 0000000..fad5202 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgFeedBack.java @@ -0,0 +1,21 @@ +package com.warmer.web.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class KgFeedBack { + + private Integer id; + + private String name; + + private String desc; + + private String type; + + private String email; + + private Date createTime; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphLink.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphLink.java new file mode 100644 index 0000000..80cac2f --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphLink.java @@ -0,0 +1,26 @@ +package com.warmer.web.entity; + +import java.io.Serializable; +import lombok.Data; + +/** + * kg_graph_link + * @author + */ +@Data +public class KgGraphLink implements Serializable { + private Long id; + + private String from; + + private String to; + + private String label; + + /** + * 领域id + */ + private Integer domainId; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNode.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNode.java new file mode 100644 index 0000000..6ce8c35 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNode.java @@ -0,0 +1,78 @@ +package com.warmer.web.entity; + +import java.io.Serializable; +import lombok.Data; + +/** + * kg_graph_node + * @author + */ +@Data +public class KgGraphNode implements Serializable { + /** + * 主键 + */ + private Long nodeId; + + /** + * 节点唯一标识 + */ + private String nodeKey; + + /** + * 数据表id + */ + private Integer tableId; + + /** + * 节点名称 + */ + private String nodeName; + + /** + * 节点类型 + */ + private String type; + + /** + * 节点左位置 + */ + private String left; + + /** + * 节点右位置 + */ + private String top; + + /** + * 节点图标 + */ + private String ico; + + /** + * 节点状态 + */ + private String state; + + /** + * 是否可以拖动,1=是,0=否 + */ + private Integer viewOnly; + + /** + * 数据源id + */ + private Integer sourceId; + + /** + * 领域id + */ + private Integer domainId; + + /** + * 是否是起点 + */ + private Integer startNode; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNodeMap.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNodeMap.java new file mode 100644 index 0000000..944e8b6 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgGraphNodeMap.java @@ -0,0 +1,65 @@ +package com.warmer.web.entity; + +import java.io.Serializable; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +/** + * kg_graph_node_map + * @author + */ +@Data +public class KgGraphNodeMap implements Serializable { + private Long id; + + /** + * 列id + */ + private Integer columnId; + + /** + * 列图标 + */ + private String ico; + + /** + * 是否主键 + */ + private Integer isPrimary; + /** + * 主实体 + */ + private Integer isMainEntity; + + /** + * 数据列key + */ + private String itemId; + + /** + * 原始数据列字段 + */ + private String itemCode; + + /** + * 列别名 + */ + private String itemName; + + /** + * 字段类型 + */ + private String itemType; + + /** + * 节点id + */ + private Long nodeId; + /** + * 领域id + */ + private Integer domainId; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetail.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetail.java new file mode 100644 index 0000000..e804cc4 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetail.java @@ -0,0 +1,16 @@ +package com.warmer.web.entity; + +import lombok.Data; + +@Data +public class KgNodeDetail { + private Integer id; + private Integer domainId; + private Integer nodeId; + private String content; + private Integer status; + private String createUser; + private String createTime; + private String modifyUser; + private String modifyTime; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetailFile.java b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetailFile.java new file mode 100644 index 0000000..d983b41 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/entity/KgNodeDetailFile.java @@ -0,0 +1,17 @@ +package com.warmer.web.entity; + +import lombok.Data; + +@Data +public class KgNodeDetailFile { + private Integer id; + private Integer domainId; + private Integer nodeId; + private String fileName; + private Integer imageType; + private Integer status; + private String createUser; + private String createTime; + private String modifyUser; + private String modifyTime; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/job/DomainCleanService.java b/kgBuilder-pro/src/main/java/com/warmer/web/job/DomainCleanService.java new file mode 100644 index 0000000..4a2fc06 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/job/DomainCleanService.java @@ -0,0 +1,35 @@ +package com.warmer.web.job; + +import com.warmer.base.util.Neo4jUtil; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.service.KGGraphService; +import com.warmer.web.service.KGManagerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class DomainCleanService { + @Autowired + private KGGraphService kgGraphService; + @Autowired + private KGManagerService kgService; + @Scheduled(cron = "0 0 1 * * ? ") + public void clearDomain(){ + List domains = kgService.getDomains(); + if(domains!=null&&domains.size()>0){ + for (KgDomain domainItem : domains) { + String cypher=String.format("match(n:`%s`) return count(n)",domainItem.getName()); + long nodeCount = Neo4jUtil.getGraphValue(cypher); + if(nodeCount<10){ + kgService.deleteDomain(domainItem.getId()); + kgGraphService.deleteKGDomain(domainItem.getName()); + // 删除索引 + Neo4jUtil.deleteIndex(domainItem.getName()); + } + } + } + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/model/NodeItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/model/NodeItem.java new file mode 100644 index 0000000..12c8362 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/model/NodeItem.java @@ -0,0 +1,35 @@ +package com.warmer.web.model; + +import lombok.Data; + +@Data +public class NodeItem{ + private long uuid; + private String name;//显示名称 + private String domain;//显示名称 + private String color;//对应关系数据库字段 + private Integer r; + /*private String x; + private String y;*/ + public NodeItem(){ + + } + public NodeItem(long uuid,String name,String color){ + this.uuid=uuid; + this.name=name; + this.color=color; + } + public NodeItem(long uuid,String name,String color,Integer r){ + this.uuid=uuid; + this.name=name; + this.color=color; + this.r=r; + } + public NodeItem(long uuid,String name,String color,Integer r,String domain){ + this.uuid=uuid; + this.name=name; + this.color=color; + this.r=r; + this.domain=domain; + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcel.java b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcel.java new file mode 100644 index 0000000..f21edf1 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcel.java @@ -0,0 +1,324 @@ +package com.warmer.web.model; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.warmer.base.util.ColorInfo; +import com.warmer.base.util.JsonHelper; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFFont; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFColor; +import org.apache.poi.xssf.usermodel.XSSFFont; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + + +public class TreeExcel { + protected Logger log = LoggerFactory.getLogger(getClass()); + + public interface IResultHandler { + TreeExcelRecordData store(String cellVal, String cellColor, TreeExcelRecordData parent, boolean isLeaf); + } + + private String filePath; + private InputStream inputStream; + private final boolean isExcel2003; + private Workbook wb = null; + private final IResultHandler resultHandler; + + private String classId = "0"; + private String classCode = ""; + + public TreeExcel(String filePath, IResultHandler handler) { + this.filePath = filePath; + this.resultHandler = handler; + isExcel2003 = filePath.matches("^.+\\.(?i)(xls)$"); + } + + public TreeExcel(String classId, String classCode, String filePath, IResultHandler handler) { + this.classId = classId; + this.classCode = classCode; + + this.filePath = filePath; + this.resultHandler = handler; + isExcel2003 = filePath.matches("^.+\\.(?i)(xls)$"); + } + + public TreeExcel(String classId, String classCode, String fileName, InputStream inputStream, IResultHandler handler) { + this.classId = classId; + this.classCode = classCode; + this.inputStream = inputStream; + this.resultHandler = handler; + isExcel2003 = fileName.matches("^.+\\.(?i)(xls)$"); + } + + /** + * 处理流数据,无需保存临时excel + */ + public void handleByStream() throws IOException, InvalidFormatException { + wb = WorkbookFactory.create(inputStream); + handExcelData(wb); + } + + /** + * 处理业务方法,需要保存临时execl副本,供后续业务使用 + */ + public void handleByFile() throws IOException, InvalidFormatException { + InputStream stream = new FileInputStream(filePath); + wb = WorkbookFactory.create(stream); + handExcelData(wb); + } + + /** + * 处理excel数据 + */ + private void handExcelData(Workbook wb) throws JsonProcessingException { + for (int i = 0; i < wb.getNumberOfSheets(); i++) { + Sheet sheet = wb.getSheetAt(i); + if (sheet == null || sheet.getLastRowNum() == 0) { + return; + } + Row row = null; + int totalRow = sheet.getLastRowNum(); + log.info("共有" + totalRow + "行"); + for (int r = 0; r <= sheet.getLastRowNum(); r++) { + row = sheet.getRow(r); + if (null == row) { + continue; + } + short minColIx = row.getFirstCellNum(); + short maxColIx = row.getLastCellNum(); + for (short colIx = minColIx; colIx < maxColIx; colIx++) { + Cell cell = row.getCell(colIx); + String cellVal = getCellVal(cell); + String cellColor = getCellColor(cell); + TreeExcelRecordData data = new TreeExcelRecordData(); + data.setClassCode(this.classCode); + data.setRecordId(this.classId); + if (colIx > minColIx) { + CellModel cellModel = getCellValIfMerged(wb, sheet, row, r, colIx - 1); + if (cellModel != null) { + String val = cellModel.getFontName(); + data = JsonHelper.parseObject(val, TreeExcelRecordData.class); + } + } + String recordId = ""; + boolean isLeaf = colIx == maxColIx - 1; + if (StringUtils.isNotBlank(cellVal)) { + TreeExcelRecordData result = resultHandler.store(cellVal, cellColor, data, isLeaf); + String json = JsonHelper.toJSONString(result); + setFont(wb, json, colIx, row); + } + log.info(String.format("cellVal:%s recordId:%s parentId:%s isLeaf:%s,color:%s", cellVal, recordId, data.getRecordId(), isLeaf, cellColor)); + } + + } + } + } + + + private String getCellVal(Cell cell) { + if (cell == null) { + return ""; + } + + String cellVal = ""; + if (cell.getCellType() == CellType.NUMERIC) { + + java.text.DecimalFormat formatter = new java.text.DecimalFormat("########.####"); + cellVal = formatter.format(cell.getNumericCellValue()); + + } else if (cell.getCellType() == CellType.BOOLEAN) { + cellVal = String.valueOf(cell.getBooleanCellValue()); + } else if (cell.getCellType() == CellType.FORMULA) { + try { + cellVal = cell.getStringCellValue(); + } catch (IllegalStateException e) { + cellVal = String.valueOf(cell.getNumericCellValue()); + } + System.out.println(cellVal); + } else { + cellVal = cell.getStringCellValue(); + } + return cellVal; + } + + private String getCellColor(Cell cell) { + if (cell == null) { + return ""; + } + CellStyle cellStyle = cell.getCellStyle(); + ColorInfo bgColor = null; + if (cellStyle.getFillPattern() == FillPatternType.SOLID_FOREGROUND) { + bgColor = excelColor2UOF(cellStyle.getFillForegroundColorColor()); + } + if (bgColor == null) { + return ""; + } + if (bgColor.A > 0) { + return String.format("rgba(%s,%s,%s,%s)", bgColor.R, bgColor.G, bgColor.B, bgColor.A); + } + return String.format("rgb(%s,%s,%s)", bgColor.R, bgColor.G, bgColor.B); + + } + + /** + * excel(包含97和2007)中颜色转化为uof颜色 + * + * @param color 颜色序号 + * @return 颜色或者null + */ + private static ColorInfo excelColor2UOF(Color color) { + if (color == null) { + return null; + } + ColorInfo ci = null; + if (color instanceof XSSFColor) {// .xlsx + XSSFColor xc = (XSSFColor) color; + byte[] b = xc.getRGB(); + //CTColor ctColor = xc.getCTColor(); + if (b != null) {// 一定是argb + int t = 0; + if (b[0] < 0) { + t = b[0] + 255; + } + if (b.length > 3) { + ci = ColorInfo.fromARGB(formatColorIndex(b[0]),formatColorIndex(b[1]),formatColorIndex(b[2]), b[3]); + } else { + ci = ColorInfo.fromARGB(formatColorIndex(b[0]),formatColorIndex(b[1]),formatColorIndex(b[2])); + } + } + } else if (color instanceof HSSFColor) {// .xls + HSSFColor hc = (HSSFColor) color; + short[] s = hc.getTriplet();// 一定是rgb + if (s != null) { + int t = 0; + if (s[0] < 0) { + t = s[0] + 255; + } + if (s.length > 3) { + ci = ColorInfo.fromARGB(formatColorIndex(s[0]),formatColorIndex(s[1]),formatColorIndex(s[2]), s[3]); + } else { + ci = ColorInfo.fromARGB(formatColorIndex(s[0]),formatColorIndex(s[1]),formatColorIndex(s[2])); + } + } + } + return ci; + } + + private static int formatColorIndex(short v) { + int t = v; + if (v < 0) { + t = v + 255; + } + return t; + } + + private void setFont(Workbook wb, String val, int col, Row row) { + if (isExcel2003) { + HSSFCellStyle style = (HSSFCellStyle) wb.createCellStyle(); + HSSFFont font = (HSSFFont) wb.createFont(); + font.setFontName(val); + style.setFont(font); + row.getCell(col).setCellStyle(style); + } else { + XSSFCellStyle style = (XSSFCellStyle) wb.createCellStyle(); + XSSFFont font = (XSSFFont) wb.createFont(); + font.setFontName(val); + style.setFont(font); + row.getCell(col).setCellStyle(style); + } + } + + private String getFont(Workbook wb, int col, Row row) { + String name = ""; + if (row == null || row.getCell(col) == null) { + return ""; + } + if (isExcel2003) { + name = ((HSSFCellStyle) row.getCell(col).getCellStyle()).getFont(wb).getFontName(); + } else { + name = ((XSSFCellStyle) row.getCell(col).getCellStyle()).getFont().getFontName(); + } + return name; + } + + private CellModel getCellValIfMerged(Workbook wb, Sheet sheet, Row row, int rowIndex, int col) { + Cell cell = row.getCell(col); + String cellVal = getCellVal(cell); + String cellColor = getCellColor(cell); + String fontName = getFont(wb, col, row); + if (!StringUtils.isNotBlank(cellVal)) { + return getMergedRegionValue(wb, sheet, rowIndex, col); + } + return new CellModel(cellVal, fontName, cellColor); + } + + private CellModel getMergedRegionValue(Workbook wb, Sheet sheet, int row, int column) { + int sheetMergeCount = sheet.getNumMergedRegions(); + + for (int i = 0; i < sheetMergeCount; i++) { + CellRangeAddress ca = sheet.getMergedRegion(i); + int firstColumn = ca.getFirstColumn(); + int lastColumn = ca.getLastColumn(); + int firstRow = ca.getFirstRow(); + int lastRow = ca.getLastRow(); + + if (row >= firstRow && row <= lastRow) { + if (column >= firstColumn && column <= lastColumn) { + Row fRow = sheet.getRow(firstRow); + Cell fCell = fRow.getCell(firstColumn); + String fontName = getFont(wb, firstColumn, fRow); + String cellVal = getCellVal(fCell); + + return new CellModel(cellVal, fontName); + } + } + } + + return null; + } + + class CellModel { + private String cellVal; + private String fontName; + private String cellColor; + + public CellModel(String cellVal, String fontName) { + this.cellVal = cellVal; + this.fontName = fontName; + } + + public CellModel(String cellVal, String fontName, String cellColor) { + this.cellVal = cellVal; + this.fontName = fontName; + this.cellColor = cellColor; + } + + public String getCellVal() { + return cellVal; + } + + public void setCellVal(String cellVal) { + this.cellVal = cellVal; + } + + public String getFontName() { + return fontName; + } + + public void setFontName(String fontName) { + this.fontName = fontName; + } + } + + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcelRecordData.java b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcelRecordData.java new file mode 100644 index 0000000..780d05b --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeExcelRecordData.java @@ -0,0 +1,24 @@ +package com.warmer.web.model; + +import lombok.Data; + +@Data +public class TreeExcelRecordData { + private String recordId; + private String classCode; + private String classPath; + private String linkName; + + public String getClassPath() { + if (classPath == null){ + return ""; + } + return classPath; + } + public String getClassCode(){ + if (classCode == null){ + return ""; + } + return classCode; + } +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeNode.java b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeNode.java new file mode 100644 index 0000000..91a828d --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/model/TreeNode.java @@ -0,0 +1,63 @@ +package com.warmer.web.model; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Data +public class TreeNode { + /** + * 节点key值,可自由组合,需保证唯一 + */ + private String key; + /** + * 节点ID + */ + private Integer id; + + /** + * 节点Level + */ + private Integer treeLevel; + /** + * 显示节点文本 + */ + private String label; + /** + * 节点状态,open=1 closed=0 + */ + private Integer state; + + /** + * 节点是否被选中 true false + */ + private boolean checked = false; + /** + * 节点属性 + */ + private Map attributes; + + /** + * 节点的子节点 + */ + private List children = new ArrayList(); + + /** + * 父ID + */ + private Integer parentId; + + /** + * 父节点唯一标识,自由组合,保证唯一 + */ + private String parentKey; + + /** + * 是否是叶子节点 + */ + private boolean isLeaf = false; + + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/BatchCreateNodeItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/BatchCreateNodeItem.java new file mode 100644 index 0000000..3ee1460 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/BatchCreateNodeItem.java @@ -0,0 +1,14 @@ +package com.warmer.web.request; + +import lombok.Data; + +@Data +public class BatchCreateNodeItem { + private String domain; + private String sourceId; + private String sourceName; + private Integer entityType; + private String targetNames ; + private String[] sourceNames ; + private String relation; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/CategoryNodeQuery.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/CategoryNodeQuery.java new file mode 100644 index 0000000..54b1d25 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/CategoryNodeQuery.java @@ -0,0 +1,10 @@ +package com.warmer.web.request; + + +import com.warmer.base.common.PageQuery; +import lombok.Data; + +@Data +public class CategoryNodeQuery extends PageQuery { + private String Name; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/CreateLinkItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/CreateLinkItem.java new file mode 100644 index 0000000..a644a3a --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/CreateLinkItem.java @@ -0,0 +1,11 @@ +package com.warmer.web.request; + +import lombok.Data; + +@Data +public class CreateLinkItem { + private String domain; + private long sourceId; + private long targetId; + private String ship; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphItem.java new file mode 100644 index 0000000..0a69e10 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphItem.java @@ -0,0 +1,14 @@ +package com.warmer.web.request; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class GraphItem implements Serializable { + Integer domainId; + String domainName; + private List nodeList; + private List lineList; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphLinkItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphLinkItem.java new file mode 100644 index 0000000..4140608 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphLinkItem.java @@ -0,0 +1,13 @@ +package com.warmer.web.request; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class GraphLinkItem implements Serializable { + private String from; + private String to; + private String label; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeColumnItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeColumnItem.java new file mode 100644 index 0000000..9df7977 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeColumnItem.java @@ -0,0 +1,18 @@ +package com.warmer.web.request; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class GraphNodeColumnItem implements Serializable { + private Integer columnId; + private String ico; + private Integer isPrimary; + private Integer isMainEntity; + private String itemId; + private String itemCode; + private String itemName; + private String itemType; + private Long nodeId; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeItem.java new file mode 100644 index 0000000..6fcba5a --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphNodeItem.java @@ -0,0 +1,24 @@ +package com.warmer.web.request; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class GraphNodeItem implements Serializable { + private String nodeKey; + private String nodeName; + private String type; + private String left; + private String top; + private String ico; + private String state; + private Integer viewOnly; + private String alia; + private Integer sourceId; + private Integer tableId; + private Integer domainId; + private Integer startNode; + private List items; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphQuery.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphQuery.java new file mode 100644 index 0000000..f079b60 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/GraphQuery.java @@ -0,0 +1,17 @@ +package com.warmer.web.request; + +import lombok.Data; + +@Data +public class GraphQuery{ + + private int domainId; + private Integer type;//0=手动创建,1=三元组导入,2=excel导入,3=er图构建 + private Integer commend; + private String domain; + private String nodeName; + private String[] relation; + private int matchType; + private int pageSize = 10; + private int pageIndex = 1; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/KgNodeItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/KgNodeItem.java new file mode 100644 index 0000000..38fc3b5 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/KgNodeItem.java @@ -0,0 +1,10 @@ +package com.warmer.web.request; + +import lombok.Data; + +@Data +public class KgNodeItem { + private String domain; + private String nodeId; + private String nodeName; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateItem.java new file mode 100644 index 0000000..74cf1e3 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateItem.java @@ -0,0 +1,10 @@ +package com.warmer.web.request; + +import lombok.Data; + +@Data +public class NodeCoordinateItem { + private Integer uuid; + private Double fx; + private Double fy; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateSubmitItem.java b/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateSubmitItem.java new file mode 100644 index 0000000..3ff56dd --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/request/NodeCoordinateSubmitItem.java @@ -0,0 +1,11 @@ +package com.warmer.web.request; + +import lombok.Data; + +import java.util.List; + +@Data +public class NodeCoordinateSubmitItem { + private String domain; + private List nodes; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/AbstractWorkFlowService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/AbstractWorkFlowService.java new file mode 100644 index 0000000..73aa8d7 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/AbstractWorkFlowService.java @@ -0,0 +1,27 @@ +package com.warmer.web.service; + +import com.warmer.web.domain.DataNode; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; + +/** + * 流程组件父类 + * + * @author tanc + * @time 2022-1-21 10:03:59 + */ +@Configuration +@Data +@Slf4j +public abstract class AbstractWorkFlowService { + /** + * 传入参数为CpNode的id + * 组建逻辑之执行成功返回true, 执行失败返回false + * + * @param dataNode 当前组件 + * @return 是否处理成功 + */ + public abstract boolean process(DataNode dataNode); + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/CategoryNodeService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/CategoryNodeService.java new file mode 100644 index 0000000..ee63bb0 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/CategoryNodeService.java @@ -0,0 +1,62 @@ +package com.warmer.web.service; + +import com.warmer.web.entity.CategoryNode; +import com.warmer.web.model.TreeNode; +import com.warmer.web.request.CategoryNodeQuery; + +import java.util.List; + + +public interface CategoryNodeService { + int deleteByPrimaryKey(Integer id); + + int insert(CategoryNode record); + + int batchInsert(List records); + + void batchUpdateExpression(List records); + + CategoryNode selectByPrimaryKey(Integer categoryNodeId); + + int updateByPrimaryKey(CategoryNode record); + + int reName(Integer categoryNodeId,String categoryNodeName); + + int updateCodeByPrimaryKey(Integer categoryNodeId,String systemCode); + + void initSystemCode(Long categoryId,String fileUuid); + + void updateNodeRelation(Long categoryId,String fileUuid,Integer categoryNodeId); + + void updateSystemCodeFullPath(Long categoryId,String fileUuid); + + void updateTreeLevel(Long categoryId); + + int updateLeafStatusByPrimaryKey(Integer categoryNodeId,Integer isLeaf); + + List queryForList(CategoryNodeQuery queryItem); + + List selectByParentId(Long categoryId, Integer parentId); + + List selectByParentIdAndName(Long categoryId,Integer parentId,String categoryNodeName); + + /** + * 获取当前分类的所有节点数据,使用mysql8.0递归查询 + * @param categoryId 指定分类id + * @return 当前分类的所有节点数据 + */ + List queryForTree( Long categoryId, Integer categoryNodeId); + List selectTreeForParent( Integer categoryNodeId); + List selectTreeForParentBySystemCode( String systemCode); + List selectRecentEditNode( Long categoryId); + List getTreeData(Long categoryId, Integer categoryNodeId); + /** + * 删除附件导入的节点 + * @param fileUuid 附件生成的uuid + */ + int deleteNodeByFileUuid( String fileUuid, String systemCode); + + int deleteNodeBySystemLeftRegular( String systemCode); + + List selectByFileUuid( String fileUuid); +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/FeedBackService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/FeedBackService.java new file mode 100644 index 0000000..fdf2da5 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/FeedBackService.java @@ -0,0 +1,18 @@ +package com.warmer.web.service; + +import com.warmer.web.entity.KgFeedBack; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface FeedBackService { + int deleteByPrimaryKey(Integer id); + + int insert(KgFeedBack record); + + KgFeedBack selectByPrimaryKey(Integer id); + + List queryForList(KgFeedBack queryItem); + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/IWorkFlowDirectorService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/IWorkFlowDirectorService.java new file mode 100644 index 0000000..2157a9f --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/IWorkFlowDirectorService.java @@ -0,0 +1,18 @@ +package com.warmer.web.service; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import java.util.List; + +public interface IWorkFlowDirectorService { + /** + * 导演方法。 + * 从config json串中提取组件和连接信息 + * 然后依次执行执行流程 + * 1. 先执行开始节点组件, + * 2. 根据last pre nodes是否执行完毕,调用后置组件服务 + * + * @param dataAnalyseId 数据分析配置id + */ + void direct(int dataAnalyseId) throws JsonProcessingException; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/KGGraphService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/KGGraphService.java new file mode 100644 index 0000000..0a13f21 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/KGGraphService.java @@ -0,0 +1,242 @@ +package com.warmer.web.service; + +import com.warmer.base.util.GraphPageRecord; +import com.warmer.web.model.NodeItem; +import com.warmer.web.request.GraphQuery; +import com.warmer.web.request.NodeCoordinateItem; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public interface KGGraphService { + /** + * 领域标签分页 + * @param queryItem + * @return + */ + GraphPageRecord> getPageDomain(GraphQuery queryItem); + /** + * 删除Neo4j 标签 + * + * @param domain + */ + void deleteKGDomain(String domain); + + /** + * 查询图谱节点和关系 + * + * @param query + * @return node relationship + */ + HashMap queryGraphResult(GraphQuery query); + + /** + * 获取节点列表 + * + * @param domain + * @param pageIndex + * @param pageSize + * @return + */ + HashMap getdomainnodes(String domain, Integer pageIndex, Integer pageSize); + + /** + * 获取某个领域指定节点拥有的上下级的节点数 + * + * @param domain + * @param nodeId + * @return long 数值 + */ + long getRelationNodeCount(String domain, long nodeId); + + /** + * 创建领域,默认创建一个新的节点,给节点附上默认属性 + * + * @param domain + */ + void createDomain(String domain); + void quickCreateDomain(String domain,String nodeName); + + /** + * 获取/展开更多节点,找到和该节点有关系的节点 + * + * @param domain + * @param nodeId + * @return + */ + HashMap getMoreRelationNode(String domain, String nodeId); + + /** + * 更新节点名称 + * + * @param domain + * @param nodeId + * @param nodeName + * @return 修改后的节点 + */ + HashMap updateNodeName(String domain, String nodeId, String nodeName); + + /** + * 创建单个节点 + * + * @param domain + * @param entity + * @return + */ + HashMap createNode(String domain, NodeItem entity); + + /** + * 批量创建节点和关系 + * + * @param domain + * 领域 + * @param sourceName + * 源节点 + * @param relation + * 关系 + * @param targetNames + * 目标节点数组 + * @return + */ + HashMap batchCreateNode(String domain, String sourceName, String relation, String[] targetNames); + + /** + * 批量创建下级节点 + * + * @param domain + * 领域 + * @param sourceId + * 源节点id + * @param entityType + * 节点类型 + * @param targetNames + * 目标节点名称数组 + * @param relation + * 关系 + * @return + */ + HashMap batchCreateChildNode(String domain, String sourceId, Integer entityType, + String[] targetNames, String relation); + + /** + * 批量创建同级节点 + * + * @param domain + * 领域 + * @param entityType + * 节点类型 + * @param sourceNames + * 节点名称 + * @return + */ + List> batchCreateSameNode(String domain, Integer entityType, String[] sourceNames); + + /** + * 添加关系 + * + * @param domain + * 领域 + * @param sourceId + * 源节点id + * @param targetId + * 目标节点id + * @param ship + * 关系 + * @return + */ + HashMap createLink(String domain, long sourceId, long targetId, String ship); + + /** + * 更新关系 + * + * @param domain + * 领域 + * @param shipId + * 关系id + * @param shipName + * 关系名称 + * @return + */ + HashMap updateLink(String domain, long shipId, String shipName); + + /** + * 删除节点(先删除关系再删除节点) + * + * @param domain + * @param nodeId + * @return + */ + List> deleteNode(String domain, long nodeId); + + /** + * 删除关系 + * + * @param domain + * @param shipId + */ + void deleteLink(String domain, long shipId); + + /** + * 段落识别出的三元组生成图谱 + * + * @param domain + * @param entityType + * @param operateType + * @param sourceId + * @param rss + * 关系三元组 + * [[startname;ship;endname],[startname1;ship1;endname1],[startname2;ship2;endname2]] + * @return node relationship + */ + HashMap createGraphByText(String domain, Integer entityType, Integer operateType, Integer sourceId, + String[] rss); + /** + * 批量创建节点,关系 + * @param domain + * @param params 三元组 sourceNode,relationship,targetNode + */ + void batchCreateGraph(String domain, List> params); + /** + * 导入csv + * @param domain + * @param csvUrl + * @param status + */ + void batchInsertByCSV(String domain, String csvUrl, int status) ; + /** + * 更新节点有无附件 + * @param domain + * @param nodeId + * @param status + */ + void updateNodeFileStatus(String domain,long nodeId, int status); + /** + * 更新图谱节点的图片 + * @param domain + * @param nodeId + * @param img + */ + void updateNodeImg(String domain, long nodeId, String img); + + /** + * 移除节点图片 + * @param domain + * @param nodeId + */ + void removeNodeImg(String domain, long nodeId); + + void updateCoordinateOfNode(String domain, String uuid, Double fx, Double fy); + + /** + * 批量更新节点坐标 + * @param domain + * @param nodes + */ + void batchUpdateGraphNodesCoordinate(String domain,List nodes); + + void importBySyz(MultipartFile file, HttpServletRequest request,String label,Integer isCreateIndex)throws Exception ; + void importByCategory(MultipartFile file, HttpServletRequest request,String label)throws Exception ; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/KGManagerService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/KGManagerService.java new file mode 100644 index 0000000..aa15836 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/KGManagerService.java @@ -0,0 +1,28 @@ +package com.warmer.web.service; + + +import com.warmer.web.entity.KgDomain; +import com.warmer.web.entity.KgNodeDetail; +import com.warmer.web.entity.KgNodeDetailFile; + +import java.util.List; +import java.util.Map; + +public interface KGManagerService { + List getDomains(); + List getDomainList(String domainName,Integer type,Integer commend); + Integer saveDomain(KgDomain map); + Integer quickCreateDomain(String domain,String domainAlia,Integer type); + void updateDomain(KgDomain map); + void deleteDomain(Integer id); + List getDomainByName(String domainName); + KgDomain getDomainByLabel(String label); + List getDomainById(Integer domainId); + KgDomain selectById(Integer domainId); + void saveNodeImage(List> mapList); + void saveNodeContent(Map map); + void updateNodeContent(Map map); + List getNodeImageList(Integer domainId, Integer nodeId); + List getNodeContent(Integer domainId, Integer nodeId); + void deleteNodeImage(Integer domainId,Integer nodeId); +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphLinkService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphLinkService.java new file mode 100644 index 0000000..d947fd5 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphLinkService.java @@ -0,0 +1,32 @@ +package com.warmer.web.service; + +import com.warmer.web.entity.KgGraphLink; +import java.util.List; + +/** + * (KgGraphLink)表服务接口 + * + * @author tanc + * @since 2021-12-24 15:53:53 + */ +public interface KgGraphLinkService { + + /** + * 通过ID查询单条数据 + * + * @param domainId 领域id + * @return 实例对象 + */ + List queryById(Integer domainId); + + + /** + * 新增数据 + * + * @param kgGraphLink 实例对象 + * @return 实例对象 + */ + Integer insert(KgGraphLink kgGraphLink); + + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeMapService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeMapService.java new file mode 100644 index 0000000..3e3e838 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeMapService.java @@ -0,0 +1,32 @@ +package com.warmer.web.service; + +import com.warmer.web.entity.KgGraphNodeMap; +import java.util.List; + +/** + * (KgGraphNodeMap)表服务接口 + * + * @author tanc + * @since 2021-12-24 15:53:51 + */ +public interface KgGraphNodeMapService { + + /** + * 通过ID查询单条数据 + * + * @param id 主键 + * @return 实例对象 + */ + List queryById(Integer id); + + + /** + * 新增数据 + * + * @param kgGraphNodeMap 实例对象 + * @return 实例对象 + */ + Integer insert(KgGraphNodeMap kgGraphNodeMap); + + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeService.java new file mode 100644 index 0000000..4556551 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/KgGraphNodeService.java @@ -0,0 +1,18 @@ +package com.warmer.web.service; + +import com.warmer.web.request.GraphItem; + +import java.io.IOException; + +/** + * (KgGraphNode)表服务接口 + * + * @author tanc + * @since 2021-12-24 12:14:23 + */ +public interface KgGraphNodeService { + + void createNode(GraphItem submitItem) throws IOException; + + GraphItem getDomainNode(Integer domainId) throws IOException; +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/QuestionService.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/QuestionService.java new file mode 100644 index 0000000..e2ce603 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/QuestionService.java @@ -0,0 +1,7 @@ +package com.warmer.web.service; + +public interface QuestionService { + + void showDictPath(); + String answer(String question) throws Exception; +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/CategoryNodeServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/CategoryNodeServiceImpl.java new file mode 100644 index 0000000..a145e17 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/CategoryNodeServiceImpl.java @@ -0,0 +1,181 @@ +package com.warmer.web.service.impl; + +import com.warmer.web.dao.CategoryNodeDao; +import com.warmer.web.entity.CategoryNode; +import com.warmer.web.model.TreeNode; +import com.warmer.web.request.CategoryNodeQuery; +import com.warmer.web.service.CategoryNodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class CategoryNodeServiceImpl implements CategoryNodeService { + @Autowired + CategoryNodeDao categoryNodeRepository; + @Override + public int deleteByPrimaryKey(Integer id) { + return categoryNodeRepository.deleteByPrimaryKey(id); + } + + @Override + public int insert(CategoryNode record) { + return categoryNodeRepository.insert(record); + } + @Override + public int batchInsert(List records) { + return categoryNodeRepository.batchInsert(records); + } + + @Override + public void batchUpdateExpression(List records) { + categoryNodeRepository.batchUpdateExpression(records); + } + + @Override + public CategoryNode selectByPrimaryKey(Integer id) { + return categoryNodeRepository.selectByPrimaryKey(id); + } + + @Override + public int updateByPrimaryKey(CategoryNode record) { + return categoryNodeRepository.updateByPrimaryKey(record); + } + + @Override + public int updateCodeByPrimaryKey(Integer categoryNodeId, String systemCode) { + return categoryNodeRepository.updateCodeByPrimaryKey(categoryNodeId, systemCode); + } + + @Override + public void initSystemCode(Long categoryId, String fileUuid) { + categoryNodeRepository.initSystemCode(categoryId,fileUuid); + } + + @Override + public void updateNodeRelation(Long categoryId, String fileUuid, Integer categoryNodeId) { + categoryNodeRepository.updateNodeRelation(categoryId,fileUuid,categoryNodeId); + } + + @Override + public void updateSystemCodeFullPath(Long categoryId, String fileUuid) { + categoryNodeRepository.updateSystemCodeFullPath(categoryId,fileUuid); + } + + @Override + public void updateTreeLevel(Long categoryId) { + categoryNodeRepository.updateTreeLevel(categoryId); + } + + @Override + public int updateLeafStatusByPrimaryKey(Integer categoryNodeId, Integer isLeaf) { + return categoryNodeRepository.updateLeafStatusByPrimaryKey(categoryNodeId, isLeaf); + } + + @Override + public int reName(Integer categoryNodeId, String categoryNodeName) { + return categoryNodeRepository.reName(categoryNodeId, categoryNodeName); + } + + + @Override + public int deleteNodeByFileUuid(String fileUuid,String systemCode) { + //删除与本身节点来自同一个文件的所有子节点 + return categoryNodeRepository.deleteNodeByFileUuid(fileUuid,systemCode); + } + + @Override + public int deleteNodeBySystemLeftRegular(String systemCode) { + return categoryNodeRepository.deleteNodeBySystemLeftRegular(systemCode); + } + + @Override + public List selectByFileUuid(String fileUuid) { + return categoryNodeRepository.selectByFileUuid(fileUuid); + } + + @Override + public List queryForList(CategoryNodeQuery queryItem) { + return categoryNodeRepository.queryForList(queryItem); + } + + @Override + public List selectByParentId(Long categoryId, Integer parentId) { + List nodeData = categoryNodeRepository.selectByParentId(categoryId, parentId); + List item = new ArrayList<>(); + for (CategoryNode cate : nodeData) { + TreeNode cateModel = new TreeNode(); + cateModel.setId(cate.getCategoryNodeId()); + cateModel.setLabel(cate.getCategoryNodeName()); + cateModel.setParentId(cate.getParentId()); + cateModel.setTreeLevel(cateModel.getTreeLevel()); + //添加额外的属性 + Map attributes = new HashMap<>(); + attributes.put("categoryId", cate.getCategoryId()); + attributes.put("categoryNodeCode", cate.getCategoryNodeCode()); + attributes.put("systemCode", cate.getSystemCode()); + cateModel.setAttributes(attributes); + cateModel.setLeaf(cate.getIsLeaf() == 1); + item.add(cateModel); + } + return item; + } + + @Override + public List selectByParentIdAndName(Long categoryId, Integer parentId, String categoryNodeName) { + return categoryNodeRepository.selectByParentIdAndName(categoryId,parentId,categoryNodeName); + } + + @Override + public List queryForTree(Long categoryId, Integer categoryNodeId) { + return categoryNodeRepository.queryForTree(categoryId,categoryNodeId); + } + + @Override + public List selectTreeForParent(Integer categoryNodeId) { + return categoryNodeRepository.selectTreeForParent(categoryNodeId); + } + + @Override + public List selectTreeForParentBySystemCode(String systemCode) { + return categoryNodeRepository.selectTreeForParentBySystemCode(systemCode); + } + + @Override + public List selectRecentEditNode(Long categoryId) { + return categoryNodeRepository.selectRecentEditNode(categoryId); + } + + @Override + public List getTreeData(Long categoryId, Integer categoryNodeId) { + List CategoryNodes = categoryNodeRepository.queryForTree(categoryId, categoryNodeId); + return getTree(categoryNodeId, CategoryNodes); + } + + private List getTree(int parentId, List nodeList) { + List item = new ArrayList<>(); + Iterator treeList = nodeList.stream().filter(m -> m.getParentId() == parentId).iterator(); + while (treeList.hasNext()) { + CategoryNode cate = treeList.next(); + TreeNode cateModel = new TreeNode(); + cateModel.setId(cate.getCategoryNodeId()); + cateModel.setLabel(cate.getCategoryNodeName()); + cateModel.setParentId(cate.getParentId()); + cateModel.setTreeLevel(cateModel.getTreeLevel()); + //添加额外的属性 + Map attributes = new HashMap<>(); + attributes.put("categoryId", cate.getCategoryId()); + attributes.put("categoryNodeCode", cate.getCategoryNodeCode()); + cateModel.setAttributes(attributes); + List childrenList = getTree(cate.getCategoryNodeId(), nodeList); + if (!childrenList.isEmpty()) { + cateModel.setChildren(childrenList); + } + cateModel.setLeaf(childrenList.isEmpty()); + item.add(cateModel); + } + return item; + } + +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/FeedBackServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/FeedBackServiceImpl.java new file mode 100644 index 0000000..25af094 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/FeedBackServiceImpl.java @@ -0,0 +1,37 @@ +package com.warmer.web.service.impl; + +import com.warmer.web.dao.FeedBackDao; +import com.warmer.web.entity.*; +import com.warmer.web.service.FeedBackService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + + + +@Service +public class FeedBackServiceImpl implements FeedBackService { + @Autowired + private FeedBackDao feedBackDao; + + + @Override + public int deleteByPrimaryKey(Integer id) { + return feedBackDao.deleteByPrimaryKey(id); + } + + @Override + public int insert(KgFeedBack record) { + return feedBackDao.insert(record); + } + + @Override + public KgFeedBack selectByPrimaryKey(Integer id) { + return feedBackDao.selectByPrimaryKey(id); + } + + @Override + public List queryForList(KgFeedBack queryItem) { + return feedBackDao.queryForList(queryItem); + } +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGGraphServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGGraphServiceImpl.java new file mode 100644 index 0000000..ed71116 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGGraphServiceImpl.java @@ -0,0 +1,316 @@ +package com.warmer.web.service.impl; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.text.csv.*; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.IdUtil; +import com.warmer.base.util.ExcelUtil; +import com.warmer.web.config.WebAppConfig; +import com.warmer.base.util.GraphPageRecord; +import com.warmer.base.util.StringUtil; +import com.warmer.web.dao.impl.KGGraphRepository; +import com.warmer.web.entity.CategoryNode; +import com.warmer.web.model.NodeItem; +import com.warmer.web.model.TreeExcel; +import com.warmer.web.model.TreeExcelRecordData; +import com.warmer.web.request.GraphQuery; + +import com.warmer.web.request.NodeCoordinateItem; +import com.warmer.web.service.CategoryNodeService; +import com.warmer.web.service.KGGraphService; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class KGGraphServiceImpl implements KGGraphService { + + @Autowired + private KGGraphRepository kgRepository; + @Autowired + private WebAppConfig config; + @Autowired + CategoryNodeService categoryNodeService; + @Override + public GraphPageRecord> getPageDomain(GraphQuery queryItem) { + return kgRepository.getPageDomain(queryItem); + } + @Override + public void deleteKGDomain(String domain) { + kgRepository.deleteKgDomain(domain); + } + + @Override + public HashMap queryGraphResult(GraphQuery query) { + return kgRepository.queryGraphResult(query); + } + + @Override + public HashMap getdomainnodes(String domain, Integer pageIndex, Integer pageSize) { + return kgRepository.getDomainNodes(domain, pageIndex, pageSize); + } + + @Override + public long getRelationNodeCount(String domain, long nodeId) { + return kgRepository.getRelationNodeCount(domain, nodeId); + } + + @Override + public void createDomain(String domain) { + kgRepository.createDomain(domain); + } + + @Override + public void quickCreateDomain(String domain, String nodeName) { + kgRepository.quickCreateDomain(domain,nodeName); + } + + @Override + public HashMap getMoreRelationNode(String domain, String nodeId) { + return kgRepository.getMoreRelationNode(domain, nodeId); + } + + @Override + public HashMap updateNodeName(String domain, String nodeId, String nodeName) { + return kgRepository.updateNodeName(domain, nodeId, nodeName); + } + + @Override + public HashMap createNode(String domain, NodeItem entity) { + return kgRepository.createNode(domain, entity); + } + + @Override + public HashMap batchCreateNode(String domain, String sourceName, String relation, + String[] targetNames) { + return kgRepository.batchCreateNode(domain, sourceName, relation, targetNames); + } + + @Override + public HashMap batchCreateChildNode(String domain, String sourceId, Integer entityType, + String[] targetNames, String relation) { + return kgRepository.batchCreateChildNode(domain, sourceId, entityType, targetNames, relation); + } + + @Override + public List> batchCreateSameNode(String domain, Integer entityType, String[] sourceNames) { + return kgRepository.batchCreateSameNode(domain, entityType, sourceNames); + } + + @Override + public HashMap createLink(String domain, long sourceId, long targetId, String ship) { + return kgRepository.createLink(domain, sourceId, targetId, ship); + } + + @Override + public HashMap updateLink(String domain, long shipId, String shipName) { + return kgRepository.updateLink(domain, shipId, shipName); + } + + @Override + public List> deleteNode(String domain, long nodeId) { + return kgRepository.deleteNode(domain, nodeId); + } + + @Override + public void deleteLink(String domain, long shipId) { + kgRepository.deleteLink(domain, shipId); + } + + @Override + public HashMap createGraphByText(String domain, Integer entityType, Integer operateType, + Integer sourceId, String[] rss) { + return kgRepository.createGraphByText(domain, entityType, operateType, sourceId, rss); + } + + @Override + public void batchCreateGraph(String domain, List> params) { + kgRepository.batchCreateGraph(domain, params); + } + + @Override + public void updateNodeFileStatus(String domain, long nodeId, int status) { + kgRepository.updateNodeFileStatus(domain,nodeId,status); + } + + @Override + public void updateNodeImg(String domain, long nodeId, String img) { + kgRepository.updateNodeImg(domain,nodeId,img); + } + + @Override + public void removeNodeImg(String domain, long nodeId) { + + } + + @Override + public void updateCoordinateOfNode(String domain, String uuid, Double fx, Double fy) { + kgRepository.updateCoordinateOfNode(domain,uuid,fx,fy); + } + + @Override + public void batchUpdateGraphNodesCoordinate(String domain, List nodes) { + kgRepository.batchUpdateGraphNodesCoordinate(domain,nodes); + } + + @Override + public void batchInsertByCSV(String domain, String csvUrl, int status) { + kgRepository.batchInsertByCsv(domain, csvUrl, status); + } + + @Override + public void importBySyz(MultipartFile file,HttpServletRequest request,String label,Integer isCreateIndex) throws Exception { + List> dataList = getFormatData(file); + String filename = IdUtil.getSnowflakeNextIdStr()+ ".csv"; + String fullFileName = config.getLocation()+filename; + CsvWriter writer = CsvUtil.getWriter(fullFileName, CharsetUtil.CHARSET_UTF_8); + for (Map item : dataList) { + String[] lst = new String[3]; + lst[0]=item.get("sourceNode").toString(); + lst[1]=item.get("targetNode").toString(); + lst[2]=item.get("relationship").toString(); + writer.write(lst); + } + String serverUrl=request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); + String csvUrl = "http://"+serverUrl+ "/file/download/" + filename; + batchInsertByCSV(label, csvUrl, isCreateIndex); + } + private List> getFormatData(MultipartFile file) throws Exception { + List> mapList = new ArrayList<>(); + try { + String fileName = file.getOriginalFilename(); + assert fileName != null; + if (!fileName.endsWith(".csv")) { + Workbook workbook = null; + if (ExcelUtil.isExcel2007(fileName)) { + workbook = new XSSFWorkbook(file.getInputStream()); + } else { + workbook = new HSSFWorkbook(file.getInputStream()); + } + // 有多少个sheet + int sheets = workbook.getNumberOfSheets(); + for (int i = 0; i < sheets; i++) { + Sheet sheet = workbook.getSheetAt(i); + int rowSize = sheet.getPhysicalNumberOfRows(); + for (int j = 0; j < rowSize; j++) { + Row row = sheet.getRow(j); + if(row==null) continue; + int cellSize = row.getPhysicalNumberOfCells(); + if (cellSize != 3) continue; //只读取3列 + row.getCell(0); + Cell cell0 = row.getCell(0);//节点1 + row.getCell(1); + Cell cell1 = row.getCell(1);//节点2 + row.getCell(2); + Cell cell2 = row.getCell(2);//关系 + if (null == cell0 || null == cell1 || null == cell2) { + continue; + } + String sourceNode = cell0.getStringCellValue(); + String targetNode = cell1.getStringCellValue(); + String relationShip = cell2.getStringCellValue(); + if (StringUtil.isBlank(sourceNode) || StringUtils.isBlank(targetNode) || StringUtils.isBlank(relationShip)) + continue; + Map map = new HashMap(); + map.put("sourceNode", sourceNode); + map.put("targetNode", targetNode); + map.put("relationship", relationShip); + mapList.add(map); + } + } + } else if (fileName.endsWith(".csv")) { + CsvReader reader = CsvUtil.getReader(); + String filename = config.getLocation()+IdUtil.getSnowflakeNextIdStr()+ ".csv"; + File fileTemp = new File(filename); + FileUtils.copyInputStreamToFile(file.getInputStream(), fileTemp); + CsvData data = reader.read(fileTemp); + for (CsvRow csvRow : data) { + List lst = csvRow.getRawList(); + Map map = new HashMap(); + map.put("sourceNode", lst.get(0)); + map.put("targetNode", lst.get(1)); + map.put("relationship", lst.get(2)); + mapList.add(map); + } + + } + } catch (Exception ex) { + throw new Exception(ex); + } + return mapList; + } + @Override + public void importByCategory(MultipartFile file,HttpServletRequest request,String label) throws Exception { + String fileName = file.getOriginalFilename(); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long categoryId = snowflake.nextId(); + TreeExcel treeExcel = new TreeExcel("0", "", fileName, file.getInputStream(), new TreeExcel.IResultHandler() { + @Override + public TreeExcelRecordData store(String cellVal, String cellColor, TreeExcelRecordData parent, boolean isLeaf) { + CategoryNode submitItem = new CategoryNode(); + String[] split = cellVal.split("###"); + String nodeName=split[0]; + String relationName=parent.getLinkName()==null?"":parent.getLinkName(); + submitItem.setCategoryNodeName(nodeName); + submitItem.setCreateUser("tc"); + submitItem.setUpdateUser("tc"); + submitItem.setSystemCode(""); + submitItem.setColor(cellColor); + submitItem.setCategoryId(categoryId); + Integer parentId = parent.getRecordId() != null ? Integer.parseInt(parent.getRecordId()) : 0; + submitItem.setParentId(parentId); + int parentIsLeaf = 0; + if (parentId == 0) { + submitItem.setTreeLevel(0); + } else { + CategoryNode parentNode = categoryNodeService.selectByPrimaryKey(parentId); + if (parentNode != null) { + if(parentNode.getTreeLevel()==null){ + parentNode.setTreeLevel(0); + } + submitItem.setTreeLevel(parentNode.getTreeLevel() + 1); + parentIsLeaf = parentNode.getIsLeaf(); + } + } + submitItem.setIsLeaf(isLeaf ? 1 : 0); + + categoryNodeService.insert(submitItem); + Integer id = submitItem.getCategoryNodeId(); + String classCode = String.format("%s%s%s", parent.getClassCode() != null ? parent.getClassCode() : "", StringUtil.isNotBlank(parent.getClassCode()) ? "/" : "", id); + categoryNodeService.updateCodeByPrimaryKey(id, classCode); + if (parentIsLeaf == 1) { + categoryNodeService.updateLeafStatusByPrimaryKey(parentId, 0); + } + //创建节点 + NodeItem nodeItem=new NodeItem(id,nodeName,cellColor); + kgRepository.createNodeWithUUid(label,nodeItem); + //创建关系 + if(parentId>0){ + kgRepository.createLinkByUuid(label,parentId,id,relationName); + } + TreeExcelRecordData data = new TreeExcelRecordData(); + data.setRecordId(String.valueOf(id)); + data.setClassCode(classCode); + data.setLinkName(split.length>1?split[1]:""); + return data; + } + }); + treeExcel.handleByStream(); + + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGManagerServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGManagerServiceImpl.java new file mode 100644 index 0000000..15d887b --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KGManagerServiceImpl.java @@ -0,0 +1,112 @@ +package com.warmer.web.service.impl; + +import cn.hutool.core.util.IdUtil; +import com.warmer.base.util.DateUtil; +import com.warmer.web.dao.KnowledgeGraphDao; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.entity.KgNodeDetail; +import com.warmer.web.entity.KgNodeDetailFile; +import com.warmer.web.service.KGManagerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +public class KGManagerServiceImpl implements KGManagerService { + + @Autowired + KnowledgeGraphDao knowledgeGraphDao; + @Override + public List getDomains() { + return knowledgeGraphDao.getDomains(); + } + + @Override + public List getDomainList(String domainName,Integer type,Integer commend) { + return knowledgeGraphDao.getDomainList(domainName,type,commend); + } + + @Override + public Integer saveDomain(KgDomain map) { + map.setCreateTime(DateUtil.getDateNow()); + map.setModifyTime(DateUtil.getDateNow()); + knowledgeGraphDao.saveDomain(map); + return map.getId(); + } + + @Override + public Integer quickCreateDomain(String domain,String domainAlia,Integer type) { + KgDomain item = new KgDomain(); + item.setName(domainAlia); + item.setLabel(domain); + item.setNodeCount(0); + item.setShipCount(0); + item.setCreateUser("tc"); + item.setCommend(0); + item.setType(type); + item.setStatus(1); + return saveDomain(item); + } + + @Override + public void updateDomain(KgDomain map) { + knowledgeGraphDao.updateDomain(map); + } + + @Override + public void deleteDomain(Integer id) { + knowledgeGraphDao.deleteDomain(id); + } + + @Override + public List getDomainByName(String domainName) { + return knowledgeGraphDao.getDomainByName(domainName); + } + + @Override + public KgDomain getDomainByLabel(String label) { + return knowledgeGraphDao.getDomainByLabel(label); + } + + @Override + public List getDomainById(Integer domainId) { + return knowledgeGraphDao.getDomainById(domainId); + } + + @Override + public KgDomain selectById(Integer domainId) { + return knowledgeGraphDao.selectById(domainId); + } + + @Override + public void saveNodeImage(List> mapList) { + knowledgeGraphDao.saveNodeImage(mapList); + } + + @Override + public void saveNodeContent(Map map) { + knowledgeGraphDao.saveNodeContent(map); + } + + @Override + public void updateNodeContent(Map map) { + knowledgeGraphDao.updateNodeContent(map); + } + + @Override + public List getNodeImageList(Integer domainId, Integer nodeId) { + return knowledgeGraphDao.getNodeImageList(domainId,nodeId); + } + + @Override + public List getNodeContent(Integer domainId, Integer nodeId) { + return knowledgeGraphDao.getNodeContent(domainId,nodeId); + } + + @Override + public void deleteNodeImage(Integer domainId, Integer nodeId) { + knowledgeGraphDao.deleteNodeImage(domainId,nodeId); + } +} diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphLinkServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphLinkServiceImpl.java new file mode 100644 index 0000000..be1a8f8 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphLinkServiceImpl.java @@ -0,0 +1,32 @@ +package com.warmer.web.service.impl; + +import com.warmer.web.dao.KgGraphLinkDao; +import com.warmer.web.dao.KgGraphNodeMapDao; +import com.warmer.web.entity.KgGraphLink; +import com.warmer.web.service.KgGraphLinkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * (KgGraphLink)表服务接口 + * + * @author tanc + * @since 2021-12-24 15:53:53 + */ +@Service +public class KgGraphLinkServiceImpl implements KgGraphLinkService { + + @Autowired + KgGraphLinkDao GraphLinkDao; + @Override + public List queryById(Integer domainId) { + return GraphLinkDao.selectByDomainId(domainId); + } + + @Override + public Integer insert(KgGraphLink kgGraphLink) { + return GraphLinkDao.insert(kgGraphLink); + } +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeMapServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeMapServiceImpl.java new file mode 100644 index 0000000..1ecb949 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeMapServiceImpl.java @@ -0,0 +1,33 @@ +package com.warmer.web.service.impl; + +import com.warmer.web.dao.KgGraphNodeMapDao; +import com.warmer.web.entity.KgGraphNodeMap; +import com.warmer.web.service.KgGraphNodeMapService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * (KgGraphNodeMap)表服务接口 + * + * @author tanc + * @since 2021-12-24 15:53:51 + */ +@Service +public class KgGraphNodeMapServiceImpl implements KgGraphNodeMapService { + + @Autowired + KgGraphNodeMapDao kgGraphNodeMapDao; + + @Override + public List queryById(Integer id) { + return kgGraphNodeMapDao.selectByDomainId(id); + } + + @Override + public Integer insert(KgGraphNodeMap kgGraphNodeMap) { + return kgGraphNodeMapDao.insert(kgGraphNodeMap); + } + +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeServiceImpl.java new file mode 100644 index 0000000..da27662 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/KgGraphNodeServiceImpl.java @@ -0,0 +1,101 @@ +package com.warmer.web.service.impl; + +import com.warmer.base.util.BeanUtils; +import com.warmer.web.dao.KgGraphLinkDao; +import com.warmer.web.dao.KgGraphNodeDao; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.entity.KgGraphLink; +import com.warmer.web.entity.KgGraphNode; +import com.warmer.web.entity.KgGraphNodeMap; +import com.warmer.web.dao.KgGraphNodeMapDao; +import com.warmer.web.request.GraphLinkItem; +import com.warmer.web.request.GraphNodeColumnItem; +import com.warmer.web.request.GraphNodeItem; +import com.warmer.web.request.GraphItem; +import com.warmer.web.service.KgGraphNodeService; +import com.warmer.web.service.KGManagerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * (KgGraphNodeMap)表服务实现类 + * + * @author tanc + * @since 2021-12-24 15:53:51 + */ +@Service +public class KgGraphNodeServiceImpl implements KgGraphNodeService { + @Autowired + private KgGraphNodeDao kgGraphNodeDao; + @Autowired + private KgGraphNodeMapDao kgGraphNodeMapDao; + @Autowired + private KgGraphLinkDao kgGraphLinkDao; + @Autowired + private KGManagerService kgService; + @Override + public void createNode(GraphItem submitItem) throws IOException { + //先删除在保存 + kgGraphNodeDao.deleteByDomainId(submitItem.getDomainId()); + kgGraphNodeMapDao.deleteByDomainId(submitItem.getDomainId()); + kgGraphLinkDao.deleteByDomainId(submitItem.getDomainId()); + List nodeItems = submitItem.getNodeList(); + List record = BeanUtils.trans(nodeItems, KgGraphNode.class); + record.stream().map(n->{ + n.setDomainId(submitItem.getDomainId()); + return n; + }).collect(Collectors.toList()); + kgGraphNodeDao.batchInsert(record); + for (KgGraphNode kgGraphNode : record) { + Long nodeId = kgGraphNode.getNodeId(); + String nodeKey = kgGraphNode.getNodeKey(); + Optional optionalItem = nodeItems.stream().filter(n -> n.getNodeKey().equalsIgnoreCase(nodeKey)).findFirst(); + if (optionalItem.isPresent()) { + GraphNodeItem columnItem = optionalItem.get(); + List cols = BeanUtils.trans(columnItem.getItems(), KgGraphNodeMap.class); + List colItems = cols.stream().map(n -> { + n.setNodeId(nodeId); + n.setDomainId(submitItem.getDomainId()); + return n; + }).collect(Collectors.toList()); + kgGraphNodeMapDao.batchInsert(colItems); + } + } + if (submitItem.getLineList() != null && submitItem.getLineList().size() > 0) { + List links = BeanUtils.trans(submitItem.getLineList(), KgGraphLink.class); + List linkItems = links.stream().map(n -> { + n.setDomainId(submitItem.getDomainId()); + return n; + }).collect(Collectors.toList()); + kgGraphLinkDao.batchInsert(linkItems); + } + } + @Override + public GraphItem getDomainNode(Integer domainId) throws IOException { + GraphItem model=new GraphItem(); + KgDomain kgDomain = kgService.selectById(domainId); + model.setDomainId(kgDomain.getId()); + model.setDomainName(kgDomain.getName()); + List kgGraphNodes = kgGraphNodeDao.selectByDomainId(domainId); + List nodeItems = new ArrayList<>(); + for (KgGraphNode nodeItem : kgGraphNodes) { + GraphNodeItem item=new GraphNodeItem(); + BeanUtils.copyProperties(nodeItem,item); + List kgGraphNodeMaps = kgGraphNodeMapDao.selectByDomainIdAndNodeId(domainId, nodeItem.getNodeId()); + List colItems=BeanUtils.trans(kgGraphNodeMaps, GraphNodeColumnItem.class); + item.setItems(colItems); + nodeItems.add(item); + } + model.setNodeList(nodeItems); + List kgGraphLinks = kgGraphLinkDao.selectByDomainId(domainId); + List linkItems =BeanUtils.trans(kgGraphLinks, GraphLinkItem.class); + model.setLineList(linkItems); + return model; + } +} \ No newline at end of file diff --git a/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/WorkFlowDirectorServiceImpl.java b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/WorkFlowDirectorServiceImpl.java new file mode 100644 index 0000000..7c64621 --- /dev/null +++ b/kgBuilder-pro/src/main/java/com/warmer/web/service/impl/WorkFlowDirectorServiceImpl.java @@ -0,0 +1,308 @@ +package com.warmer.web.service.impl; + + +import com.github.pagehelper.util.StringUtil; +import com.warmer.base.common.PageRecord; +import com.warmer.base.util.DbUtils; +import com.warmer.base.util.Neo4jUtil; +import com.warmer.meta.entity.MetaDataSource; +import com.warmer.meta.entity.MetaDataTable; +import com.warmer.meta.service.MetaDataColumnService; +import com.warmer.meta.service.MetaDataSourceService; +import com.warmer.meta.service.MetaDataTableService; +import com.warmer.meta.vo.DataColumnVo; +import com.warmer.web.domain.ComponentContainer; +import com.warmer.web.domain.DataLink; +import com.warmer.web.domain.DataNode; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.request.GraphItem; +import com.warmer.web.request.GraphLinkItem; +import com.warmer.web.request.GraphNodeColumnItem; +import com.warmer.web.request.GraphNodeItem; +import com.warmer.web.service.IWorkFlowDirectorService; +import com.warmer.web.service.KgGraphNodeService; +import com.warmer.web.service.KGManagerService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 流程导演服务类 + */ +@Slf4j +@Service +@Component +@Configuration +public class WorkFlowDirectorServiceImpl implements IWorkFlowDirectorService { + + @Autowired + Neo4jUtil neo4jUtil; + @Autowired + MetaDataSourceService metaDataSourceService; + @Autowired + MetaDataTableService metaDataTableService; + @Autowired + MetaDataColumnService metaDataColumnService; + @Autowired + private KGManagerService kgService; + @Autowired + private KgGraphNodeMapServiceImpl kgGraphNodeMapServiceImpl; + @Autowired + private KgGraphNodeService kgGraphNodeService; + @Autowired + private KgGraphLinkServiceImpl kgGraphLinkServiceImpl; + + /** + * 导演方法。 + * 从config json串中提取组件和连接信息 + * 然后依次执行执行流程 + * 1. 先执行开始节点组件, + * 2. 根据last pre nodes是否执行完毕,调用后置组件服务 + * + * @param domainId 数据分析配置id + */ + @Override + public void direct(int domainId) { + long startTime = System.currentTimeMillis(); + log.info("进入-->主线程方法,开始执行,开始时间:" + startTime); + try { + KgDomain kgDomain = kgService.selectById(domainId); + if (kgDomain == null) { + log.error("找不到配置的信息:domainId=" + domainId); + return; + } + GraphItem graphItem = kgGraphNodeService.getDomainNode(domainId); + //解析组件 + ComponentContainer componentContainer = explainComponentConfig(graphItem); + //处理起始节点 + log.info("头结点数量:" + componentContainer.getStartNodes().size()); + componentContainer.getStartNodes().forEach(node -> { + log.info("检查头结点"); + createGraphNode(node); + componentContainer.markExecutedDone(node); + }); + //获取除起始节点外的所有节点 + List targetIds = componentContainer.getTargetIds(); + boolean isContinue = true; + while (isContinue) { + //处理目标节点 + for (String id : targetIds) { + //查看前置节点是否执行完毕 + boolean isExecutable = componentContainer.isPreNodesExecuted(id); + if (isExecutable) { + //找到后置节点,执行该节点 + DataNode node = componentContainer.getDataNodeByNodeId(id); + //本身没有执行 + if (!node.isExecuted()) { + createGraphNode(node); + componentContainer.markExecutedDone(node); + break; + } + } + } + //等待所有节点执行完成,结束 + isContinue = !componentContainer.isAllExecuted(); + } + //创建关系 + List dataLinkList = componentContainer.getDataLinkList(); + for (DataLink dataLink : dataLinkList) { + createGraphLink(kgDomain.getName(),dataLink); + } + + } catch (Exception ex) { + throw new RuntimeException(ex); + } + + long endTime = System.currentTimeMillis(); + long totalTime = (endTime - startTime) / 1000; + log.info("结束-->主线程方法,结束时间:" + endTime + "总共花费时间:" + totalTime + " s"); + } + + + /** + * 执行组件服务调用 + * + * @param dataNode CpNode + */ + + private boolean createGraphNode(DataNode dataNode) { + Integer sourceId = dataNode.getData().getSourceId(); + MetaDataSource metaDataSource = metaDataSourceService.queryById(sourceId); + Integer tableId = dataNode.getData().getTableId(); + MetaDataTable metaDataTable = metaDataTableService.queryById(tableId); + String tableName=metaDataTable.getDataTableCode(); + List dbColumns = metaDataColumnService.queryByTableId(tableId); + List primaryItem=dbColumns.stream().filter(n->n.getIsPrimary().equals(1)).collect(Collectors.toList()); + if(primaryItem==null||primaryItem.size()==0){ + return false; + } + //界面上选中的列id + List selectColumns = dataNode.getData().getItems().stream().map(n -> n.getColumnId()).collect(Collectors.toList()); + //转化成列对象集合 + List dataColumns=dataNode.getData().getItems(); + DataColumnVo primaryModel=primaryItem.get(0); + if(!selectColumns.contains(primaryModel.getDataColumnId())){ + GraphNodeColumnItem item= new GraphNodeColumnItem(); + item.setColumnId(primaryModel.getDataColumnId()); + item.setItemCode(primaryModel.getDataColumnName()); + item.setItemName(primaryModel.getDataColumnAlia()); + item.setIsPrimary(primaryModel.getIsPrimary()); + dataColumns.add(item); + } + //取出字段名 + List columns=dataColumns.stream().map(n->n.getItemCode()).collect(Collectors.toList()); + //读取数据记录 + int totalCount = DbUtils.getTableDataNum(metaDataSource.getDbType(), metaDataSource.getDbName(), metaDataSource.getConnectUrl(), tableName, metaDataSource.getDbUserName(), metaDataSource.getDbPassWord(), metaDataSource.getDriverName(), metaDataSource.getMaxPoolSize()); + int pageSize=500; + long totalPage = totalCount / pageSize + ((totalCount % pageSize) == 0 ? 0 : 1); + for (Integer pageIndex = 1; pageIndex <= totalPage; pageIndex++) { + //逐条生成图谱 + PageRecord> dataItems = DbUtils.getTableInfoByPage(pageIndex, pageSize, metaDataSource.getDbType(), metaDataSource.getDbName(), metaDataSource.getConnectUrl(), tableName, metaDataSource.getDbUserName(), metaDataSource.getDbPassWord(), metaDataSource.getDriverName(), metaDataSource.getMaxPoolSize(), null, columns); + executeNode(dataNode.getDomain(),sourceId,tableId, dataItems.getData(),dataColumns); + } + return true; + } + private boolean createGraphLink(String domain,DataLink dataLink) { + String sourceIdStr = dataLink.getSourceId(); + String[] sourceArr=sourceIdStr.split("-"); + Integer sourceTableId=Integer.parseInt(sourceArr[1]); + Integer sourceFieldId=Integer.parseInt(sourceArr[2]); + String targetIdStr = dataLink.getTargetId(); + String[] targetArr=targetIdStr.split("-"); + Integer targetTableId=Integer.parseInt(targetArr[1]); + //Integer targetFieldId=Integer.parseInt(targetArr[2]); + MetaDataTable sourceMetaDataTable = metaDataTableService.queryById(sourceTableId); + Integer sourceDatasourceId = sourceMetaDataTable.getDatasourceId(); + String sourceTableName=sourceMetaDataTable.getDataTableCode(); + + MetaDataTable targetMetaDataTable = metaDataTableService.queryById(targetTableId); + Integer targetDatasourceId = targetMetaDataTable.getDatasourceId(); + //String targetTableName=targetMetaDataTable.getDataTableCode(); + + List sourceDataColumns = metaDataColumnService.queryByTableId(sourceTableId); + DataColumnVo sourceColumnItem=sourceDataColumns.stream().filter(m->m.getDataColumnId().equals(sourceFieldId)).collect(Collectors.toList()).get(0); + DataColumnVo sourcePrimaryColumnItem=sourceDataColumns.stream().filter(m->m.getIsPrimary().equals(1)).collect(Collectors.toList()).get(0); + MetaDataSource metaDataSource = metaDataSourceService.queryById(sourceDatasourceId); + //取出字段名 + List columns=new ArrayList<>(); + columns.add(sourcePrimaryColumnItem.getDataColumnName()); + columns.add(sourceColumnItem.getDataColumnName()); + //读取数据记录 + int totalCount = DbUtils.getTableDataNum(metaDataSource.getDbType(), metaDataSource.getDbName(), metaDataSource.getConnectUrl(), sourceTableName, metaDataSource.getDbUserName(), metaDataSource.getDbPassWord(), metaDataSource.getDriverName(), metaDataSource.getMaxPoolSize()); + int pageSize=500; + long totalPage = totalCount / pageSize + ((totalCount % pageSize) == 0 ? 0 : 1); + for (Integer pageIndex = 1; pageIndex <= totalPage; pageIndex++) { + //逐条生成图谱 + PageRecord> dataItems = DbUtils.getTableInfoByPage(pageIndex, pageSize, metaDataSource.getDbType(), metaDataSource.getDbName(), metaDataSource.getConnectUrl(), sourceTableName, metaDataSource.getDbUserName(), metaDataSource.getDbPassWord(), metaDataSource.getDriverName(), metaDataSource.getMaxPoolSize(), null, columns); + executeLink(domain,dataLink.getLabel(),sourceDatasourceId,sourceTableId, sourceColumnItem.getDataColumnName(),targetDatasourceId,targetTableId,dataItems.getData(),sourceDataColumns); + } + return true; + } + + private void executeNode(String domain,Integer sourceId,Integer tableId, List> nodes,List columns) { + for (Map node : nodes) { + String mainNodeUuid=""; + List mainEntitys = columns.stream().filter(m -> m.getIsMainEntity().equals(1)).collect(Collectors.toList()); + if(mainEntitys==null||mainEntitys.size()==0){ + return; + } + GraphNodeColumnItem mainEntity=mainEntitys.get(0); + List primaryItems = columns.stream().filter(m -> m.getIsPrimary().equals(1)).collect(Collectors.toList()); + if(primaryItems==null||primaryItems.size()==0){ + return; + } + GraphNodeColumnItem primaryItem=primaryItems.get(0); + String dataId=node.get(primaryItem.getItemCode()).toString(); + String cy = String.format("merge (n:`%s` {name:'%s',dataId:'%s',tableId:%s,sourceId:%s}) return n",domain,node.get(mainEntity.getItemCode()),dataId,tableId,sourceId); + HashMap mainNode = neo4jUtil.getSingleGraphNode(cy); + mainNodeUuid = mainNode.get("uuid").toString(); + for (String key : node.keySet()) { + if(key.equalsIgnoreCase(mainEntity.getItemCode())||key.equalsIgnoreCase(primaryItem.getItemCode())) continue; + if(node.get(key)==null||StringUtil.isEmpty(node.get(key).toString())) continue; + String name=node.get(key).toString(); + String propertiesString = String.format("merge (n:`%s` {name:'%s'}) return n",domain,name); + HashMap graphNode = Neo4jUtil.getSingleGraphNode(propertiesString); + String uuid = graphNode.get("uuid").toString(); + GraphNodeColumnItem item = columns.stream().filter(m -> m.getItemCode().equalsIgnoreCase(key)).collect(Collectors.toList()).get(0); + String alia= StringUtil.isNotEmpty(item.getItemName())?item.getItemName():item.getItemCode(); + String linkCy=String.format("match(n:`%s`),(m:`%s`) where id(n)=%s and id(m)=%s " + + "merge (n)-[r:`%s`]->(m)",domain,domain,mainNodeUuid,uuid,alia); + Neo4jUtil.runCypherSql(linkCy); + } + } + } + + + private void executeLink(String domain,String label,Integer sourceDataSourceId,Integer sourceTableId,String sourceFieldCode,Integer targetDataSourceId,Integer targetTableId, + List> nodes,List columns) { + for (Map node : nodes) { + DataColumnVo primaryItem = columns.stream().filter(m -> m.getIsPrimary().equals(1)).collect(Collectors.toList()).get(0); + String dataId=node.get(primaryItem.getDataColumnName()).toString(); + String targetDataId=node.get(sourceFieldCode).toString(); + String linkCy=String.format("match(n:`%s`),(m:`%s`) where n.sourceId=%s and n.tableId=%s and n.dataId='%s' and m.sourceId=%s and m.tableId=%s and m.dataId='%s'" + + "merge (n)-[r:'%s']->(m)",domain,domain,sourceDataSourceId,sourceTableId,dataId,targetDataSourceId,targetTableId,targetDataId,label); + Neo4jUtil.runCypherSql(linkCy); + } + + } + /** + * 从config中提取流程组件 + */ + public ComponentContainer explainComponentConfig(GraphItem graphItem) { + log.info("解析配置信息"); + ComponentContainer componentContainer = new ComponentContainer(); + //解析节点 + List nodeList = graphItem.getNodeList(); + nodeList.forEach(n -> { + String id = n.getNodeKey(); + String nodeCode = n.getNodeKey(); + String nodeName = n.getNodeName(); + DataNode dataNode = new DataNode(); + dataNode.setId(id); + dataNode.setNodeCode(nodeCode); + dataNode.setNodeName(nodeName); + dataNode.setDomain(graphItem.getDomainName()); + dataNode.setData(n); + componentContainer.addNode(dataNode); + }); + //解析连线 + List links = graphItem.getLineList(); + links.forEach(m -> { + DataLink dataLink = new DataLink(); + dataLink.setSourceId(m.getFrom()); + dataLink.setTargetId(m.getTo()); + dataLink.setLabel(m.getLabel()); + componentContainer.addLink(dataLink); + }); + //找到起始结点及当前节点的前置后置节点id + componentContainer.getNodes().forEach(n -> { + //后置节点 + List nextNodeIds = componentContainer.getDataLinkList().stream().filter(m -> m.getSourceId().equalsIgnoreCase(n.getId())).map(DataLink::getTargetId).collect(Collectors.toList()); + List nextNodes = componentContainer.getNodes().stream().filter(next -> nextNodeIds.contains(next.getId())).collect(Collectors.toList()); + if (null != nextNodes) { + n.setNextNodes(nextNodes); + } + + //前置节点 + List prevNodeIds = componentContainer.getDataLinkList().stream().filter(m -> m.getTargetId().equalsIgnoreCase(n.getId())).map(DataLink::getSourceId).collect(Collectors.toList()); + List prevNodes = componentContainer.getNodes().stream().filter(next -> prevNodeIds.contains(next.getId())).collect(Collectors.toList()); + if (null != nextNodes) { + n.setPrevNodes(prevNodes); + } + //没有前置节点就是头结点 + if (prevNodeIds.size() == 0) { + n.setStart(true); + } + } + ); + return componentContainer; + } +} diff --git a/kgBuilder-pro/src/main/resources/application-dev.yml b/kgBuilder-pro/src/main/resources/application-dev.yml new file mode 100644 index 0000000..c49b636 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/application-dev.yml @@ -0,0 +1,25 @@ +server: + port: 8080 +spring: + servlet: + multipart: + max-file-size: 100000000 + maxRequestSize: 200000000 + neo4j: + url: bolt://0.0.0.0:7687 #4.x + #url: bolt://192.168.20.153:7687 #3.x + #url: neo4j://localhost:7687 #4.x + username: neo4j + password: neo4j123 + datasource: + url: jdbc:mysql://localhost:3306/kgb?useSSL=false&serverTimezone=UTC + driverClassName: com.mysql.cj.jdbc.Driver + username: root + password: root + type: com.zaxxer.hikari.HikariDataSource +mybatis: + typeAliasesPackage: com.warmer.kgmaker.entity + mapperLocations: classpath*:/mapping/*.xml +file: + serverurl: http://localhost:8080 + location : D:\\kgmanager\\csv\\ #如果是Windows情况下,格式是 D:\\kgmanager\\csv\\ linx 格式"/home/kgmanager/csv/"; \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/application-release.yml b/kgBuilder-pro/src/main/resources/application-release.yml new file mode 100644 index 0000000..175b450 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/application-release.yml @@ -0,0 +1,46 @@ +server: + port: 8080 +spring: + servlet: + multipart: + max-file-size: 100000000 + maxRequestSize: 200000000 + thymeleaf: + cache : false + mode: HTML5 + neo4j: + url: bolt://localhost:7687 + username: neo4j + password: neo4j123 + datasource: + url: jdbc:mysql://localhost:3306/kg?useSSL=false&serverTimezone=UTC + driverClassName: com.mysql.cj.jdbc.Driver + username: root + password: root + type: com.zaxxer.hikari.HikariDataSource +mybatis: + typeAliasesPackage: com.warmer.kgmaker.entity + mapperLocations: classpath*:/mapping/*.xml +#配置分页插件pagehelper +pagehelper: + helperDialect: mysql + reasonable: true + supportMethodsArguments: true + params: count=countSql +#--------七牛云配置 +qiniu: + access: + key: 2J5BOKpbxDlzkYVYZ5dwGsS3jAevVmOJwcL3fIdpwd + secret: + key: 2LXAQbFFbFR_I76bseNEmus-Sjnh4RRaSRsazX5Djw + bucket: + name: nndt + host: + name: file.miaoleyan.com + prefixName: /nndt +#--------七牛云配置 +img: #//如果是Windows情况下,格式是 D:\\blog\\image\\ linx 格式"/home/blog/image/"; + location : D:\\blog\\image\\ +file: + serverurl: http://localhost:8089 + location : D:\\kgmanager\\csv\\ #如果是Windows情况下,格式是 D:\\kgmanager\\csv\\ linx 格式"/home/kgmanager/csv/"; \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/application.yml b/kgBuilder-pro/src/main/resources/application.yml new file mode 100644 index 0000000..86d8531 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/application.yml @@ -0,0 +1,9 @@ +spring: + application: + name: kg-builder + profiles: + active: dev + + + + diff --git a/kgBuilder-pro/src/main/resources/hanlp.properties b/kgBuilder-pro/src/main/resources/hanlp.properties new file mode 100644 index 0000000..a758d4e --- /dev/null +++ b/kgBuilder-pro/src/main/resources/hanlp.properties @@ -0,0 +1,40 @@ +#本配置文件中的路径的根目录,根目录+其他路径=完整路径(支持相对路径,请参考:https://github.com/hankcs/HanLP/pull/254) +#Windows用户请注意,路径分隔符统一使用/ +root=D:/HanLP/ +#核心词典路径 +CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt +#2元语法词典路径 +BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt +#停用词词典路径 +CoreStopWordDictionaryPath=data/dictionary/stopwords.txt +#同义词词典路径 +CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt +#人名词典路径 +PersonDictionaryPath=data/dictionary/person/nr.txt +#人名词典转移矩阵路径 +PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt +#繁简词典根目录 +tcDictionaryRoot=data/dictionary/tc +#自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。 +#另外data/dictionary/custom/CustomDictionary.txt是个高质量的词库,请不要删除。所有词典统一使用【UTF-8】编码。 +#注意,每次更新自己定义的新词典myDict.txt的内容时,要删除同目录下的词典缓存文件CustomDictionary.txt.bin +CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf; + +#CRF分词模型路径 +CRFSegmentModelPath=data/model/segment/CRFSegmentModel.txt +#HMM分词模型 +HMMSegmentModelPath=data/model/segment/HMMSegmentModel.bin +#分词结果是否展示词性 +ShowTermNature=true +#IO适配器,实现com.hankcs.hanlp.corpus.io.IIOAdapter接口以在不同的平台(Hadoop、Redis等)上运行HanLP +#默认的IO适配器如下,该适配器是基于普通文件系统的。 +#IOAdapter=com.hankcs.hanlp.corpus.io.FileIOAdapter +#感知机词法分析器 +PerceptronCWSModelPath=data/model/perceptron/pku199801/cws.bin +PerceptronPOSModelPath=data/model/perceptron/pku199801/pos.bin +PerceptronNERModelPath=data/model/perceptron/pku199801/ner.bin +#CRF词法分析器 +CRFCWSModelPath=data/model/crf/pku199801/cws.bin +CRFPOSModelPath=data/model/crf/pku199801/pos.bin +CRFNERModelPath=data/model/crf/pku199801/ner.bin +#更多配置项请参考 https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/HanLP.java#L59 自行添加 \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/mapping/CategoryNodeDao.xml b/kgBuilder-pro/src/main/resources/mapping/CategoryNodeDao.xml new file mode 100644 index 0000000..84b9009 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/CategoryNodeDao.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + CategoryNodeId, + CategoryNodeName, + CategoryNodeCode, + SystemCode, + Color, + CategoryId, + ParentId, + ParentCode, + TreeLevel, + IsLeaf, + Status, + CreateUser, + CreateTime, + UpdateUser, + UpdateTime + + + + + + + + + + + + + + + + insert into kg_category (CategoryNodeName,CategoryNodeCode,CategoryId,Color,ParentId,ParentCode,TreeLevel,IsLeaf,Status,CreateUser,CreateTime,UpdateUser,UpdateTime) + values (#{categoryNodeName},#{categoryNodeCode},#{categoryId},#{color},#{parentId},#{parentCode},#{treeLevel},#{isLeaf},1,#{createUser},now(),#{updateUser},now()) + + + + insert into kg_category (CategoryNodeName,CategoryNodeCode,Color,CategoryId,FileUuid,ParentId,ParentCode,TreeLevel,IsLeaf,Status,CreateUser,CreateTime,UpdateUser,UpdateTime) + values + + (#{item.categoryNodeName},#{item.categoryNodeCode},#{item.color},#{item.CategoryId},#{item.nodeDataType},#{item.fileUuid},#{item.parentId},#{item.parentCode},#{item.treeLevel},#{item.isLeaf},1,#{item.createUser},now(),#{item.updateUser},now()) + + + + update kg_category + set CategoryNodeName=#{categoryNodeName},UpdateUser=#{updateUser},UpdateTime=now() + where CategoryNodeId = #{id,jdbcType=INTEGER} + + + update kg_category set Status=0,UpdateTime=now() + where CategoryNodeId = #{id,jdbcType=INTEGER} + + + update kg_category set CategoryNodeName=#{categoryNodeName},UpdateTime=now() + where CategoryNodeId = #{categoryNodeId,jdbcType=INTEGER} + + + + update kg_category + set SystemCode=#{systemCode,jdbcType=VARCHAR},CategoryNodeCode=#{systemCode,jdbcType=VARCHAR} + where CategoryNodeId = #{categoryNodeId,jdbcType=INTEGER} + + + update kg_category + set IsLeaf=#{isLeaf} + where CategoryNodeId = #{categoryNodeId,jdbcType=INTEGER} + + + + update kg_category s1 , kg_category s2 + set s1.ParentId=s2.CategoryNodeId + where s1.CategoryId=#{categoryId,jdbcType=INTEGER} + and s2.CategoryId=#{categoryId,jdbcType=INTEGER} and s1.ParentCode=s2.CategoryNodeCode and s1.FileUuid=#{fileUuid} and s1.CategoryNodeId>=#{categoryNodeId} and s2.CategoryNodeId>=#{categoryNodeId} + + + + update kg_category + set SystemCode=CategoryNodeId + where CategoryId = #{categoryId,jdbcType=INTEGER} and FileUuid=#{fileUuid} + + + + update kg_category w ,( + with recursive r as + ( + select systemCode,CategoryNodeName,ParentId,CategoryNodeId from kg_category where ParentId=0 and CategoryId=#{categoryId,jdbcType=INTEGER} + union all + select CONCAT(r.systemCode, '/',c.CategoryNodeId) ,c.CategoryNodeName,c.ParentId ,c.CategoryNodeId from kg_category c,r where r.CategoryNodeId=c.ParentId and c.FileUuid=#{fileUuid} + ) select systemCode,CategoryNodeName,ParentId,CategoryNodeId from r + ) dd + set w.SystemCode=dd.systemCode + where dd.CategoryNodeId=w.CategoryNodeId and w.CategoryId=#{categoryId,jdbcType=INTEGER} + + + update kg_category set TreeLevel=LENGTH(SystemCode) - LENGTH(REPLACE(SystemCode,'/','' )) where CategoryId=#{categoryId,jdbcType=INTEGER} + + + update kg_category + set Status=0 + where fileUuid= #{fileUuid} + + + update kg_category + set Status=0 + where SystemCode like CONCAT(#{systemCode},'%') + + + + + diff --git a/kgBuilder-pro/src/main/resources/mapping/CorpusDao.xml b/kgBuilder-pro/src/main/resources/mapping/CorpusDao.xml new file mode 100644 index 0000000..351501e --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/CorpusDao.xml @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + INSERT INTO kg_corpus_document ( + domain_id, title, content, document_type, source, status, + create_user, create_time, update_user, update_time + ) VALUES ( + #{domainId}, #{title}, #{content}, #{documentType}, #{source}, #{status}, + #{createUser}, #{createTime}, #{updateUser}, #{updateTime} + ) + + + + INSERT INTO kg_corpus_document ( + domain_id, title, content, document_type, source, status, + create_user, create_time, update_user, update_time + ) VALUES + + (#{doc.domainId}, #{doc.title}, #{doc.content}, #{doc.documentType}, #{doc.source}, #{doc.status}, + #{doc.createUser}, #{doc.createTime}, #{doc.updateUser}, #{doc.updateTime}) + + + + + UPDATE kg_corpus_document SET + title = #{title}, + content = #{content}, + document_type = #{documentType}, + source = #{source}, + status = #{status}, + update_user = #{updateUser}, + update_time = #{updateTime} + WHERE id = #{id} + + + + DELETE FROM kg_corpus_document WHERE id = #{id} + + + + + + + + + + + + + + INSERT INTO kg_keyword_weight ( + domain_id, keyword, weight, category, description, status, + create_user, create_time, update_user, update_time + ) VALUES ( + #{domainId}, #{keyword}, #{weight}, #{category}, #{description}, #{status}, + #{createUser}, #{createTime}, #{updateUser}, #{updateTime} + ) + + + + INSERT INTO kg_keyword_weight ( + domain_id, keyword, weight, category, description, status, + create_user, create_time, update_user, update_time + ) VALUES + + (#{weight.domainId}, #{weight.keyword}, #{weight.weight}, #{weight.category}, #{weight.description}, #{weight.status}, + #{weight.createUser}, #{weight.createTime}, #{weight.updateUser}, #{weight.updateTime}) + + + + + UPDATE kg_keyword_weight SET + weight = #{weight}, + category = #{category}, + description = #{description}, + status = #{status}, + update_user = #{updateUser}, + update_time = #{updateTime} + WHERE id = #{id} + + + + DELETE FROM kg_keyword_weight WHERE id = #{id} + + + + + + + + + + + + + + + + INSERT INTO kg_term_frequency ( + domain_id, term, document_frequency, total_frequency, idf_value, last_update + ) VALUES ( + #{domainId}, #{term}, #{documentFrequency}, #{totalFrequency}, #{idfValue}, #{lastUpdate} + ) + + + + INSERT INTO kg_term_frequency ( + domain_id, term, document_frequency, total_frequency, idf_value, last_update + ) VALUES + + (#{freq.domainId}, #{freq.term}, #{freq.documentFrequency}, #{freq.totalFrequency}, #{freq.idfValue}, #{freq.lastUpdate}) + + + + + UPDATE kg_term_frequency SET + document_frequency = #{documentFrequency}, + total_frequency = #{totalFrequency}, + idf_value = #{idfValue}, + last_update = #{lastUpdate} + WHERE id = #{id} + + + + + UPDATE kg_term_frequency SET + document_frequency = #{freq.documentFrequency}, + total_frequency = #{freq.totalFrequency}, + idf_value = #{freq.idfValue}, + last_update = #{freq.lastUpdate} + WHERE id = #{freq.id} + + + + + DELETE FROM kg_term_frequency WHERE id = #{id} + + + + + \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/mapping/FeedBackDao.xml b/kgBuilder-pro/src/main/resources/mapping/FeedBackDao.xml new file mode 100644 index 0000000..00d5547 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/FeedBackDao.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + id, + `name`, + `desc`, + `type`, + email, + createUser + + + + + + insert into kg_feedback (`name`,`desc`,`type`,email,createTime) + values (#{name},#{desc},#{type},#{email},now()) + + + + delete from kg_feedback + where id = #{id,jdbcType=INTEGER} + + + diff --git a/kgBuilder-pro/src/main/resources/mapping/KgGraphLinkDao.xml b/kgBuilder-pro/src/main/resources/mapping/KgGraphLinkDao.xml new file mode 100644 index 0000000..4b2bf24 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/KgGraphLinkDao.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + id, `from`, `to`, `label`, domainId + + + + insert into kg_graph_link (`from`, `to`, `label`, + domainId) + values (#{from,jdbcType=VARCHAR}, #{to,jdbcType=VARCHAR}, #{label,jdbcType=VARCHAR}, + #{domainId,jdbcType=INTEGER}) + + + insert into kg_graph_link (`from`, `to`, `label`, + domainId) + values + + (#{item.from,jdbcType=VARCHAR}, #{item.to,jdbcType=VARCHAR}, #{item.label,jdbcType=VARCHAR}, + #{item.domainId,jdbcType=INTEGER}) + + + + delete + from kg_graph_link + where domainId = #{domainId} + + \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeDao.xml b/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeDao.xml new file mode 100644 index 0000000..74a4bfd --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeDao.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + nodeId, nodeKey, tableId, `nodeName`, `type`, `left`, `top`, ico, `state`, viewOnly, + sourceId, domainId, startNode + + + + insert into kg_graph_node (nodeKey, tableId, `nodeName`, + `type`, `left`, `top`, ico, + `state`, viewOnly, sourceId, + domainId, startNode) + values (#{nodeKey,jdbcType=VARCHAR}, #{tableId,jdbcType=INTEGER}, #{nodeName,jdbcType=VARCHAR}, + #{type,jdbcType=VARCHAR}, #{left,jdbcType=VARCHAR}, #{top,jdbcType=VARCHAR}, #{ico,jdbcType=VARCHAR}, + #{state,jdbcType=VARCHAR}, #{viewOnly,jdbcType=INTEGER}, #{sourceId,jdbcType=INTEGER}, + #{domainId,jdbcType=INTEGER}, #{startNode,jdbcType=INTEGER}) + + + + insert into kg_graph_node (nodeKey, tableId, `nodeName`, + `type`, `left`, `top`, ico, + `state`, viewOnly, sourceId, + domainId, startNode) + values + + (#{item.nodeKey,jdbcType=VARCHAR}, #{item.tableId,jdbcType=INTEGER}, #{item.nodeName,jdbcType=VARCHAR}, + #{item.type,jdbcType=VARCHAR}, #{item.left,jdbcType=VARCHAR}, #{item.top,jdbcType=VARCHAR}, #{item.ico,jdbcType=VARCHAR}, + #{item.state,jdbcType=VARCHAR}, #{item.viewOnly,jdbcType=INTEGER}, #{item.sourceId,jdbcType=INTEGER}, + #{item.domainId,jdbcType=INTEGER}, #{item.startNode,jdbcType=INTEGER}) + + + + + delete + from kg_graph_node + where domainId = #{domainId} + + \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeMapDao.xml b/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeMapDao.xml new file mode 100644 index 0000000..123b2f5 --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/KgGraphNodeMapDao.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + id, columnId, ico, isPrimary,isMainEntity, itemId, itemCode, itemName, itemType, nodeId,domainId + + + + + insert into kg_graph_node_map (columnId, ico, isPrimary,isMainEntity, + itemId, itemCode, itemName, + itemType, nodeId,domainId) + values (#{columnId,jdbcType=INTEGER}, #{ico,jdbcType=VARCHAR}, #{isPrimary,jdbcType=INTEGER},#{isMainEntity,jdbcType=INTEGER}, + #{itemId,jdbcType=VARCHAR}, #{itemCode,jdbcType=VARCHAR}, #{itemName,jdbcType=VARCHAR}, + #{itemType,jdbcType=VARCHAR}, #{nodeId,jdbcType=BIGINT},#{domainId,jdbcType=INTEGER}) + + + insert into kg_graph_node_map (columnId, ico, isPrimary,isMainEntity, + itemId, itemCode, itemName, + itemType, nodeId,domainId) + values + + (#{item.columnId,jdbcType=INTEGER}, #{item.ico,jdbcType=VARCHAR}, #{item.isPrimary,jdbcType=INTEGER},#{isMainEntity,jdbcType=INTEGER}, + #{item.itemId,jdbcType=VARCHAR}, #{item.itemCode,jdbcType=VARCHAR}, #{item.itemName,jdbcType=VARCHAR}, + #{item.itemType,jdbcType=VARCHAR}, #{item.nodeId,jdbcType=BIGINT},#{item.domainId,jdbcType=INTEGER}) + + + + delete + from kg_graph_node_map + where domainId = #{domainId} + + + \ No newline at end of file diff --git a/kgBuilder-pro/src/main/resources/mapping/KnowledgeGraphDao.xml b/kgBuilder-pro/src/main/resources/mapping/KnowledgeGraphDao.xml new file mode 100644 index 0000000..150a95a --- /dev/null +++ b/kgBuilder-pro/src/main/resources/mapping/KnowledgeGraphDao.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, `name`,`label`, nodeCount, shipCount,status,createUser,commend,createTime + + + + + + + + + + INSERT INTO kg_domain(name, label,createUser,nodeCount, shipCount,status,type,commend,createTime,modifyTime) + VALUES (#{name},#{label},#{createUser},#{nodeCount},#{shipCount},1,#{type},#{commend},now(),now()) + + + UPDATE kg_domain + SET + name =#{name} , + nodeCount=#{nodeCount}, + shipCount=#{shipCount}, + modifyUser=#{modifyUser} , + modifyTime=now() + WHERE id = #{id} + + + UPDATE kg_domain SET status = 0 WHERE id = #{id} + + + + insert kg_nodedetail_file + (Domainid,NodeId,FileName,ImageType,CreateUser,CreateTime,Status) + values + + (#{item.domainId},#{item.nodeId} ,#{item.file} ,#{item.imageType},#{item.createUser},#{item.createTime},#{item.status}) + + + + insert kg_nodedetail + (Domainid,NodeId,Content,CreateUser,CreateTime,Status) + values + (#{params.domainId},#{params.nodeId} ,#{params.content} ,#{params.createUser},#{params.createTime},#{params.status}) + + + UPDATE kg_nodedetail SET Content =#{params.content} ,ModifyTime=#{params.modifytime} WHERE Domainid=#{params.domainId} and NodeId = #{params.nodeId} + + + + + update kg_nodedetail_file set Status=0 where Domainid=#{domainId} and NodeId=#{nodeId} + + \ No newline at end of file diff --git a/kgBuilder-pro/src/test/java/com/warmer/web/ApplicationTests.java b/kgBuilder-pro/src/test/java/com/warmer/web/ApplicationTests.java new file mode 100644 index 0000000..a79fd14 --- /dev/null +++ b/kgBuilder-pro/src/test/java/com/warmer/web/ApplicationTests.java @@ -0,0 +1,95 @@ +package com.warmer.web; + +import com.warmer.base.util.Neo4jUtil; +import com.warmer.web.entity.KgDomain; +import com.warmer.web.service.KGGraphService; +import com.warmer.web.service.KGManagerService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + +@SpringBootTest +class ApplicationTests { + + @Autowired + private KGGraphService kgGraphService; + @Autowired + private KGManagerService kgService; + @Test + void contextLoads() { + List domains = kgService.getDomains(); + int i=0; + if(domains!=null&&domains.size()>0){ + List> graphIndex = Neo4jUtil.getGraphIndex(); + for (KgDomain domainItem : domains) { + String cypher=String.format("match(n:`%s`) return count(n)",domainItem.getName()); + long nodeCount = Neo4jUtil.getGraphValue(cypher); + if(nodeCount<10){ + System.out.println("正在清理:"+domainItem.getName()); + kgService.deleteDomain(domainItem.getId()); + kgGraphService.deleteKGDomain(domainItem.getName()); + // 删除索引 + Neo4jUtil.deleteIndex(domainItem.getName()); + //删除索引 drop index index_114254bd + List> collect = graphIndex.stream().filter(n ->{ + String[] labelsOrTypes = n.get("labelsOrTypes").toString().split(","); + List labels = Arrays.asList(labelsOrTypes); + if(labels.contains(domainItem.getName())){ + return true; + } + return false; + }).collect(Collectors.toList()); + if(collect.size()>0){ + HashMap indexMp = collect.get(0); + String indexName = indexMp.get("name").toString().replace("\"",""); + String dropIndexCy=String.format("drop index %s",indexName); + Neo4jUtil.runCypherSql(dropIndexCy); + } + + i++; + } + } + System.out.println("清理完成,共清理"+i+"个标签"); + } + } + @Test + void contextLoads2() { + List> domains = Neo4jUtil.getGraphLabels(); + int i=0; + if(domains!=null&&domains.size()>0){ + List> graphIndex = Neo4jUtil.getGraphIndex(); + for (HashMap domainItem : domains) { + String label=domainItem.get("label").toString(); + String cypher=String.format("match(n:`%s`) return count(n)",label); + long nodeCount = Neo4jUtil.getGraphValue(cypher); + if(nodeCount<10){ + // 删除索引 + Neo4jUtil.deleteIndex(label); +// //删除索引 drop index index_114254bd +// List> collect = graphIndex.stream().filter(n ->{ +// String[] labelsOrTypes = n.get("labelsOrTypes").toString().split(","); +// List labels = Arrays.asList(labelsOrTypes); +// if(labels.contains(domainItem.getName())){ +// return true; +// } +// return false; +// }).collect(Collectors.toList()); +// if(collect.size()>0){ +// HashMap indexMp = collect.get(0); +// String indexName = indexMp.get("name").toString().replace("\"",""); +// String dropIndexCy=String.format("drop index %s",indexName); +// Neo4jUtil.runCypherSql(dropIndexCy); +// } + + i++; + } + } + System.out.println("清理完成,共清理"+i+"个标签"); + } + } +} diff --git a/kgBuilder-ui/.editorconfig b/kgBuilder-ui/.editorconfig new file mode 100644 index 0000000..7034f9b --- /dev/null +++ b/kgBuilder-ui/.editorconfig @@ -0,0 +1,22 @@ +# 告诉EditorConfig插件,这是根文件,不用继续往上查找 +root = true + +# 匹配全部文件 +[*] +# 设置字符集 +charset = utf-8 +# 缩进风格,可选space、tab +indent_style = space +# 缩进的空格数 +indent_size = 2 +# 结尾换行符,可选lf、cr、crlf +end_of_line = lf +# 在文件结尾插入新行 +insert_final_newline = true +# 删除一行中的前后空格 +trim_trailing_whitespace = true + +# 匹配md结尾的文件 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/kgBuilder-ui/.env.development b/kgBuilder-ui/.env.development new file mode 100644 index 0000000..733d91c --- /dev/null +++ b/kgBuilder-ui/.env.development @@ -0,0 +1,8 @@ +# 开发环境配置 +ENV = 'development' + +# 开发环境 +VUE_APP_BASE_API = '/kg-api' + +# 路由懒加载 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/kgBuilder-ui/.env.production b/kgBuilder-ui/.env.production new file mode 100644 index 0000000..e43879c --- /dev/null +++ b/kgBuilder-ui/.env.production @@ -0,0 +1,6 @@ +# 生产环境配置 +ENV = 'production' + +# 生产环境 +VUE_APP_BASE_API = '/kg-api' + diff --git a/kgBuilder-ui/.env.staging b/kgBuilder-ui/.env.staging new file mode 100644 index 0000000..4094470 --- /dev/null +++ b/kgBuilder-ui/.env.staging @@ -0,0 +1,7 @@ +NODE_ENV = production + +# 测试环境配置 +ENV = 'staging' + +# 测试环境 +VUE_APP_BASE_API = '/stage-api' diff --git a/kgBuilder-ui/.eslintignore b/kgBuilder-ui/.eslintignore new file mode 100644 index 0000000..89be6f6 --- /dev/null +++ b/kgBuilder-ui/.eslintignore @@ -0,0 +1,10 @@ +# 忽略build目录下类型为js的文件的语法检查 +build/*.js +# 忽略src/assets目录下文件的语法检查 +src/assets +# 忽略public目录下文件的语法检查 +public +# 忽略当前目录下为js的文件的语法检查 +*.js +# 忽略当前目录下为vue的文件的语法检查 +*.vue \ No newline at end of file diff --git a/kgBuilder-ui/.gitignore b/kgBuilder-ui/.gitignore new file mode 100644 index 0000000..403adbc --- /dev/null +++ b/kgBuilder-ui/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/kgBuilder-ui/README.md b/kgBuilder-ui/README.md new file mode 100644 index 0000000..15ccea2 --- /dev/null +++ b/kgBuilder-ui/README.md @@ -0,0 +1,24 @@ +# kg-builder + +## Project setup +``` +npm install +``` + +### Compiles and hot-reloads for development +``` +npm run serve +``` + +### Compiles and minifies for production +``` +npm run build +``` + +### Lints and fixes files +``` +npm run lint +``` + +### Customize configuration +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/kgBuilder-ui/babel.config.js b/kgBuilder-ui/babel.config.js new file mode 100644 index 0000000..397abca --- /dev/null +++ b/kgBuilder-ui/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["@vue/cli-plugin-babel/preset"] +}; diff --git a/kgBuilder-ui/package-lock.json b/kgBuilder-ui/package-lock.json new file mode 100644 index 0000000..f120fba --- /dev/null +++ b/kgBuilder-ui/package-lock.json @@ -0,0 +1,15178 @@ +{ + "name": "kg-builder", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kg-builder", + "version": "0.1.0", + "dependencies": { + "@antv/x6": "^1.28.1", + "axios": "^0.24.0", + "core-js": "^3.6.5", + "element-ui": "^2.13.2", + "html2canvas": "^1.4.0", + "jquery": "^3.5.1", + "js-cookie": "^3.0.1", + "jsplumb": "^2.15.6", + "less": "^3.9.0", + "less-loader": "^5.0.0", + "lodash": "^4.17.21", + "qs": "^6.10.2", + "script-ext-html-webpack-plugin": "^2.1.5", + "vue": "^2.6.11", + "vue-axios": "^2.1.5", + "vue-codemirror": "^4.0.6", + "vue-router": "^3.2.0", + "vuedraggable": "^2.24.3", + "vuex": "^3.4.0", + "wangeditor": "^4.7.11" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/eslint-config-prettier": "^6.0.0", + "babel-eslint": "^10.1.0", + "cross-env": "^10.1.0", + "d3": "5.0.0", + "eslint": "^6.7.2", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-vue": "^6.2.2", + "prettier": "^1.19.1", + "sass": "^1.26.5", + "sass-loader": "^8.0.2", + "vue-template-compiler": "^2.6.11" + } + }, + "node_modules/@ant-design-vue/babel-helper-vue-transform-on": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz", + "integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=", + "dev": true + }, + "node_modules/@ant-design-vue/babel-plugin-jsx": { + "version": "1.0.0-rc.1", + "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-plugin-jsx/download/@ant-design-vue/babel-plugin-jsx-1.0.0-rc.1.tgz", + "integrity": "sha1-rlbOy9qfCGkbz5Lf6Y4kFud9dYs=", + "dev": true, + "dependencies": { + "@ant-design-vue/babel-helper-vue-transform-on": "^1.0.0", + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@antv/x6": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@antv/x6/-/x6-1.29.0.tgz", + "integrity": "sha512-AP+nypdP3vwD7NzS4LjktuOtpkDv8A0+JlgugN3h+B3tzlyW0zRJIYs/KpDa56TdN5CdOaWqBgkzcpu/iPl8jw==", + "dependencies": { + "csstype": "^3.0.3", + "jquery": "^3.5.1", + "jquery-mousewheel": "^3.1.13", + "lodash-es": "^4.17.15", + "mousetrap": "^1.6.5", + "utility-types": "^3.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593521174697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.11.0.tgz?cache=0&sync_timestamp=1596145129706&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.11.0.tgz", + "integrity": "sha1-6fc+/gmvE1W3I6fzmxG61jfXyZw=", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "node_modules/@babel/core": { + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.11.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.11.1.tgz", + "integrity": "sha1-LFW2BOc6QNwhsOUmULEcZc8nZkM=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.11.0.tgz?cache=0&sync_timestamp=1596144922907&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.11.0.tgz", + "integrity": "sha1-S5DHjYwSglAkVoy+g+5smvGTWFw=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.10.4.tgz?cache=0&sync_timestamp=1593522863787&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha1-W/DUlaP3V6w72ki1vzs7ownHK6M=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz?cache=0&sync_timestamp=1593522841395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor%2Fdownload%2F%40babel%2Fhelper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.10.4.tgz?cache=0&sync_timestamp=1593522736060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.10.4.tgz", + "integrity": "sha1-gEro4/BDdmB8x5G51H1UAnYzK9I=", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha1-n2FEa6gOgkCwpchcb9rIRZ1vJZ0=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha1-/dYNiFJGWaC2lZwFeZJeQlcU87g=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz?cache=0&sync_timestamp=1594751492980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-define-map%2Fdownload%2F%40babel%2Fhelper-define-map-7.10.5.tgz", + "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.10.4.tgz?cache=0&sync_timestamp=1593522841702&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha1-QKHNkXv/Eoj2malKdbN6Gi29jHw=", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522859643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.10.4.tgz", + "integrity": "sha1-0tOyDFmtjEcRL6fSqUvAnV74Lxo=", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha1-mMHL6g4jMvM/mkZhuM4VBbLBm6I=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.11.0.tgz?cache=0&sync_timestamp=1596144923081&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha1-rmnIPYTugvS0L5bioJQQk1qPJt8=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.10.4.tgz", + "integrity": "sha1-TFxUvgS9MWcKc4J5fXW5+i5bViA=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.11.0.tgz", + "integrity": "sha1-sW8lAinkchGr3YSzS2RzfCqy01k=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha1-UNyWQT1ZT5lad5BZBbBYk813lnM=", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz?cache=0&sync_timestamp=1593521047284&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.10.4.tgz", + "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=", + "dev": true + }, + "node_modules/@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.10.5.tgz?cache=0&sync_timestamp=1594751487108&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-regex%2Fdownload%2F%40babel%2Fhelper-regex-7.10.5.tgz", + "integrity": "sha1-Mt+7eYmQc8QVVXBToZvQVarlCuA=", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522846310&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha1-/Oi+pOlpC76SMFbe0h5UtOi2jtU=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.10.4.tgz?cache=0&sync_timestamp=1593522861427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.10.4.tgz", + "integrity": "sha1-1YXNk4jqBuYDHkzUS2cTy+rZ5s8=", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.10.4.tgz?cache=0&sync_timestamp=1593522836826&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.10.4.tgz", + "integrity": "sha1-D1zNopRSd6KnotOoIeFTle3PNGE=", + "dev": true, + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha1-7sFi8RLC9Y068K8SXju1dmUUZyk=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.11.0.tgz?cache=0&sync_timestamp=1596143198739&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.11.0.tgz", + "integrity": "sha1-+KSRJErPamdhWKxCBykRuoOtCZ8=", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593521048783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.10.4.tgz?cache=0&sync_timestamp=1593522846867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.10.4.tgz", + "integrity": "sha1-im9wHqsP8592W1oc/vQJmQ5iS4c=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.10.4.tgz?cache=0&sync_timestamp=1593522841291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.10.4.tgz", + "integrity": "sha1-Kr6w1yGv98Cpc3a54fb2XXpHUEQ=", + "dev": true, + "dependencies": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.11.3", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.11.3.tgz?cache=0&sync_timestamp=1596927329627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.11.3.tgz", + "integrity": "sha1-nh6uRnOLzQjiPoZ7q0PnuVKZqPk=", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.10.5.tgz?cache=0&sync_timestamp=1594749036871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha1-NJHKvy98F5q4IGBs7Cf+0V4OhVg=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.10.4.tgz?cache=0&sync_timestamp=1593522846822&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha1-ozv2Mto5ClnHqMVwBF0RFc13iAc=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.10.5.tgz?cache=0&sync_timestamp=1594750722573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-decorators%2Fdownload%2F%40babel%2Fplugin-proposal-decorators-7.10.5.tgz", + "integrity": "sha1-QomLukeLxLGuJCpwOpU6etNQ/7Q=", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-decorators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.10.4.tgz?cache=0&sync_timestamp=1593522736076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha1-uleibLmLN3QenVvKG4sN34KR8X4=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha1-Vw2IO5EDFjez4pWO6jxDjmLAX1Q=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.10.4.tgz?cache=0&sync_timestamp=1593521050442&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-json-strings%2Fdownload%2F%40babel%2Fplugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha1-WT5ZxjUoFgIzvTIbGuvgggwjQds=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.11.0.tgz?cache=0&sync_timestamp=1596145131070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha1-n4DkgsAwg8hxJd7hACa1hSfqIMg=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha1-AqfpYfwy5tWy2wZJ4Bv4Dd7n4Eo=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha1-zhWQ/wplrRKXCmCdeIVemkwa7wY=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.11.0.tgz?cache=0&sync_timestamp=1596145131427&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha1-vYH5Wh90Z2DqQ7bC09YrEXkK0K8=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha1-Mck4MJ0kp4pJ1o/av/qoY3WFVN0=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha1-3lhm0GRvav2quKVmOC/joiF1UHY=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.10.4.tgz?cache=0&sync_timestamp=1593522851635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-private-methods%2Fdownload%2F%40babel%2Fplugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha1-sWDZcrj9ulx9ERoUX8jEIfwqaQk=", + "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.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522836698&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha1-RIPNpTBBzjQTt/4vAAImZd36p10=", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz?cache=0&sync_timestamp=1578951051669&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-async-generators%2Fdownload%2F%40babel%2Fplugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha1-ZkTmoLqlWmH54yMfbJ7rbuRsEkw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.10.4.tgz", + "integrity": "sha1-aFMIWyxCn50yLQL1pjUBjN6yNgw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha1-Oauq48v3EMQ3PYQpSE5rohNAFmw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz?cache=0&sync_timestamp=1593523793973&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz?cache=0&sync_timestamp=1578951050689&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz?cache=0&sync_timestamp=1593521844415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-numeric-separator%2Fdownload%2F%40babel%2Fplugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578951050894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz?cache=0&sync_timestamp=1578951051369&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-optional-chaining%2Fdownload%2F%40babel%2Fplugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha1-S764kXtU/PdoNk4KgfVg4zo+9X0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha1-4ilg135pfHT0HFAdRNc9v4pqZM0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.10.4.tgz?cache=0&sync_timestamp=1593522851748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-async-to-generator%2Fdownload%2F%40babel%2Fplugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha1-QaUBfknrbzzak5KlHu8pQFskWjc=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha1-GvpZV0T3XkOpGvc7DZmOz+Trwug=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.11.1", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.11.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha1-W37+mIUr741lLAsoFEzZOp5LUhU=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.10.4.tgz?cache=0&sync_timestamp=1593522856487&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.10.4.tgz", + "integrity": "sha1-QFE2rys+IYvEoZJiKLyRerGgrcc=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha1-ne2DqBboLe0o1S1LTsvdgQzfwOs=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha1-cN3Ss9G+qD0BUJ6bsl3bOnT8heU=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522840988&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha1-RpwgYhBcHragQOr0+sS0iAeDle4=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha1-aX5Qyf7hQ4D+hD0fMGspVhdDHkc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.10.4.tgz?cache=0&sync_timestamp=1593522848226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-exponentiation-operator%2Fdownload%2F%40babel%2Fplugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha1-WuM4xX+M9AAb2zVgeuZrktZlry4=", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha1-wIiS6IGdOl2ykDGxFa9RHbv+uuk=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.10.4.tgz?cache=0&sync_timestamp=1593522844280&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-function-name%2Fdownload%2F%40babel%2Fplugin-transform-function-name-7.10.4.tgz", + "integrity": "sha1-akZ4gOD8ljhRS6NpERgR3b4mRLc=", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha1-n0K6CEEQChNfInEtDjkcRi9XHzw=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha1-sexE/PGVr8uNssYs2OVRyIG6+Lc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.10.5.tgz?cache=0&sync_timestamp=1594750712546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha1-G5zdrwXZ6Is6rTOcs+RFxPAgqbE=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.10.4.tgz?cache=0&sync_timestamp=1593522846595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha1-ZmZ8Pu2h6/eJbUHx8WsXEFovvKA=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.10.5.tgz?cache=0&sync_timestamp=1594749055272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha1-YnAJnIVAZmgbrp4F+H4bnK2+jIU=", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.10.4.tgz?cache=0&sync_timestamp=1593522846765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha1-moSB/oG4JGVLOgtl2j34nz0hg54=", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522846878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-named-capturing-groups-regex%2Fdownload%2F%40babel%2Fplugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha1-eLTZeIELbzvPA/njGPL8DtQa7LY=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha1-kJfXU8t7Aky3OBo7LlLpUTqcaIg=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.10.4.tgz?cache=0&sync_timestamp=1593522848107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.10.4.tgz", + "integrity": "sha1-1xRsTROUM+emUm+IjGZ+MUoJOJQ=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.10.5.tgz?cache=0&sync_timestamp=1594751489267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.10.5.tgz", + "integrity": "sha1-WdM51Y0LGVBDX0BD504lEABeLEo=", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha1-9v5UtlkDUimHhbg+3YFdIUxC48A=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.10.4.tgz?cache=0&sync_timestamp=1593522816360&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha1-IBXlnYOQdOdoON4hWdtCGWb9i2M=", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha1-jyaCvNzvntMn4bCGFYXXAT+KVN0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.11.0.tgz?cache=0&sync_timestamp=1596145575827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.11.0.tgz", + "integrity": "sha1-4n946zbxlEhjbgXDPJD9mtm4vM8=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha1-n9Jexc3VVbt/Rz5ebuHJce7eTdY=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha1-+oTTAPXk9XdS/kGm0bPFVPE/F8w=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha1-jziJ7oZXWBEwop2cyR18c7fEoo0=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.10.5", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.10.5.tgz?cache=0&sync_timestamp=1594751489580&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha1-eLxdYmpmQtszEtnQ8AH152Of3ow=", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha1-lQnxp+7DHE7b/+E3wWzDP/C8W/w=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.10.4.tgz?cache=0&sync_timestamp=1593521212970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha1-/q5SM5HHZR3awRXa4KnQaFeJIAc=", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.10.4.tgz?cache=0&sync_timestamp=1593522855498&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha1-5W1x+SgvrG2wnIJ0IFVXbV5tgKg=", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.11.0.tgz", + "integrity": "sha1-hg7jjyzhetYEgMICG6lok5Pvt5Y=", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.3.tgz", + "integrity": "sha1-EyQrU7XvjIg8PPfd3VWzbOgPvHI=", + "dev": true, + "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/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.11.2.tgz?cache=0&sync_timestamp=1596637789706&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.11.2.tgz", + "integrity": "sha1-9UnBPHVMxAuHZEufqfCaapX+BzY=", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz", + "integrity": "sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==", + "dependencies": { + "core-js-pure": "^3.19.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.10.4.tgz?cache=0&sync_timestamp=1593522831608&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftemplate%2Fdownload%2F%40babel%2Ftemplate-7.10.4.tgz", + "integrity": "sha1-MlGZbEIA68cdGo/EBfupQPNrong=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/traverse": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.11.0.tgz?cache=0&sync_timestamp=1596144921921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.11.0.tgz", + "integrity": "sha1-m5ls4bmPU/fD5BdRFWBdVu0H3SQ=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.11.0.tgz?cache=0&sync_timestamp=1596144922213&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.11.0.tgz", + "integrity": "sha1-Kua/G6mujDxDgk5YYSaYcbIG6Q0=", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&sync_timestamp=1593993944692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz", + "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=", + "deprecated": "Moved to 'npm install @sideway/address'", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz", + "integrity": "sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1593915910245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz", + "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz", + "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=", + "deprecated": "Switch to 'npm install joi'", + "dev": true, + "dependencies": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npm.taobao.org/@hapi/topo/download/@hapi/topo-3.1.6.tgz?cache=0&sync_timestamp=1593916080558&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Ftopo%2Fdownload%2F%40hapi%2Ftopo-3.1.6.tgz", + "integrity": "sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck=", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true, + "dependencies": { + "@hapi/hoek": "^8.3.0" + } + }, + "node_modules/@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@intervolga/optimize-cssnano-plugin/download/@intervolga/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha1-vnx4RhKLiPapsdEmGgrQbrXA/fg=", + "dev": true, + "dependencies": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz", + "integrity": "sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4=", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz", + "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.7.1", + "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz", + "integrity": "sha1-cG9kvLSouWQrSK46zkRMcDNNYV0=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz", + "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=", + "dev": true + }, + "node_modules/@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz", + "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.19.0.tgz", + "integrity": "sha1-BoWzxH6zAG/+0RfN1VFkth+AU48=", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/@types/color-name/download/@types/color-name-1.1.1.tgz", + "integrity": "sha1-HBJhu+qhCoBVu8XYq4S3sq/IRqA=", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.33.tgz", + "integrity": "sha1-MWEMkB7KVzuHE8MzCrxua59YhUY=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.3.tgz", + "integrity": "sha1-R3K3m4tTGF8PTJ3qsJI2uvdu47Q=", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.7", + "resolved": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.17.7.tgz", + "integrity": "sha1-QgRb5kdWNtmAE2nNRBjvZc2w3Vk=", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.9", + "resolved": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.9.tgz", + "integrity": "sha1-LXs03P0l7GY8JchddmCPiySWZ/E=", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1596841521267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz", + "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.4", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz", + "integrity": "sha1-58kuPb4+E6p5lED/QubToXqdBFs=", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-proxy-middleware": { + "version": "0.19.3", + "resolved": "https://registry.npm.taobao.org/@types/http-proxy-middleware/download/@types/http-proxy-middleware-0.19.3.tgz", + "integrity": "sha1-suuW+8D5rHJQtdnExTqt4ElJfQM=", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/http-proxy": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz?cache=0&sync_timestamp=1596837603751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz", + "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0=", + "dev": true + }, + "node_modules/@types/mime": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.3.tgz", + "integrity": "sha1-yJO3NyHbc2mZQ7/DZTsd63+qSjo=", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz", + "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.0.tgz?cache=0&sync_timestamp=1596841636087&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.0.27", + "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.0.27.tgz?cache=0&sync_timestamp=1596839331424&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.0.27.tgz", + "integrity": "sha1-oVGHOvWl6FG1GzsGXJ5jOQqeDrE=", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.4", + "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.4.tgz", + "integrity": "sha1-pZ6FHBuhbAUT6hI4MN1jmgoVy2o=", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz", + "integrity": "sha1-fuMwunyq+5gJC+zoal7kQRWQTCw=", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.5", + "resolved": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.5.tgz", + "integrity": "sha1-PSXZQaGEFdOrCS3vhG4TWgi7z1M=", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Ftapable%2Fdownload%2F%40types%2Ftapable-1.0.6.tgz", + "integrity": "sha1-qcpLcKGLJwzLK8Cqr+/R1Ia36nQ=", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.9.3", + "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.9.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.9.3.tgz", + "integrity": "sha1-2U7WCOKVvFQkyWAOa4VlQHtrS2s=", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.21", + "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.41.21.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack%2Fdownload%2F%40types%2Fwebpack-4.41.21.tgz", + "integrity": "sha1-zGhbMywz8VO7L1/B+jrIretZLe4=", + "dev": true, + "dependencies": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-dev-server%2Fdownload%2F%40types%2Fwebpack-dev-server-3.11.0.tgz", + "integrity": "sha1-vMO4Xn3GrC2yUzBhBRPyIowvz7I=", + "dev": true, + "dependencies": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/http-proxy-middleware": "*", + "@types/serve-static": "*", + "@types/webpack": "*" + } + }, + "node_modules/@types/webpack-sources": { + "version": "1.4.2", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-1.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-1.4.2.tgz", + "integrity": "sha1-XT1N6gQAineakBNf+W+1wMnmKSw=", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz", + "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=", + "dev": true + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.1.2.tgz", + "integrity": "sha1-wKPm78Ai515CR7RIqPxrhvA+kcA=", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.3.tgz?cache=0&sync_timestamp=1597137101453&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.3.tgz", + "integrity": "sha1-LY/e80JiH2YzEd8ttpRLT7jB1Xo=", + "dev": true, + "dependencies": { + "@ant-design-vue/babel-plugin-jsx": "^1.0.0-0", + "@babel/core": "^7.11.0", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3", + "@babel/plugin-proposal-decorators": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.11.0", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.0", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.6.5", + "core-js-compat": "^3.6.5", + "semver": "^6.1.0" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.0.0-0" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.1.2.tgz", + "integrity": "sha1-LhaetMIE6jfKZsLqhaiAv8mdTyA=", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "@vue/babel-sugar-functional-vue": "^1.1.2", + "@vue/babel-sugar-inject-h": "^1.1.2", + "@vue/babel-sugar-v-model": "^1.1.2", + "@vue/babel-sugar-v-on": "^1.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.1.2.tgz", + "integrity": "sha1-9+JPugnm8e5wEEVgqICAV1VfGpo=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.1.2.tgz", + "integrity": "sha1-ilJ2ttji7Rb/yAeKrZQjYnTm7fA=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.1.2.tgz", + "integrity": "sha1-H/b9G4ACI/ycsehNzrXlLXN6gZI=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.1.2.tgz", + "integrity": "sha1-su+ZuPL6sJ++rSWq1w70Lhz1sTs=", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.1.2", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-4.5.3.tgz", + "integrity": "sha1-WTeiMsYT5QGYaM4JC3w+XZ5a5HM=", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.3.tgz", + "integrity": "sha1-gLLUm3VPV3B6JQZJNctO+sYPpww=", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.0", + "@vue/babel-preset-app": "^4.5.3", + "@vue/cli-shared-utils": "^4.5.3", + "babel-loader": "^8.1.0", + "cache-loader": "^4.1.0", + "thread-loader": "^2.1.3", + "webpack": "^4.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.3.tgz", + "integrity": "sha1-7ayAG/BQAeGn/M1YsgwabP5ScBo=", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.3", + "eslint-loader": "^2.2.1", + "globby": "^9.2.0", + "inquirer": "^7.1.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0", + "eslint": ">= 1.6.0" + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.3.tgz", + "integrity": "sha1-Msc9a2ix0rDZRdzJvjzrFeHX/VI=", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^4.5.3" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.3.tgz", + "integrity": "sha1-wKVmsBVuW7vMQejOwZW8aDrKf1w=", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-4.5.3.tgz", + "integrity": "sha1-TPJpqG09eMBWjtd5CMGOm5cK0v8=", + "dev": true, + "dependencies": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.3", + "@vue/cli-plugin-router": "^4.5.3", + "@vue/cli-plugin-vuex": "^4.5.3", + "@vue/cli-shared-utils": "^4.5.3", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^7.1.0", + "terser-webpack-plugin": "^2.3.6", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.3" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.0.0-beta.14", + "vue-template-compiler": "^2.0.0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235808041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@vue/cli-service/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/cacache": { + "version": "13.0.1", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594428071983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", + "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=", + "dev": true, + "dependencies": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/cli-service/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "node_modules/@vue/cli-service/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz?cache=0&sync_timestamp=1583734687174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/@vue/cli-service/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/@vue/cli-service/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "optional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@vue/cli-service/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/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/@vue/cli-service/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/cli-service/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/@vue/cli-service/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/cli-service/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/cli-service/node_modules/ssri": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz", + "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@vue/cli-service/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-service/node_modules/terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1597229604288&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz", + "integrity": "sha1-iUdkoZsHQ/L3BOfCqEjFKDppZyQ=", + "dev": true, + "dependencies": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/vue-loader-v16": { + "name": "vue-loader", + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "4.5.3", + "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.3.tgz?cache=0&sync_timestamp=1597137192654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.3.tgz", + "integrity": "sha1-I7zKf/w6CbLFDYuNnQMan/d1tRI=", + "dev": true, + "dependencies": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz", + "integrity": "sha1-j4UYLO7Sjps8dTE95mn4MWbRHl0=", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427700888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/@vue/eslint-config-prettier/download/@vue/eslint-config-prettier-6.0.0.tgz", + "integrity": "sha1-rVkSswj0rkaEWOAqKwXbC50kZwA=", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^6.0.0" + }, + "peerDependencies": { + "eslint": ">= 5.0.0", + "eslint-plugin-prettier": "^3.1.0", + "prettier": ">= 1.13.0" + } + }, + "node_modules/@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz?cache=0&sync_timestamp=1595814792197&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fpreload-webpack-plugin%2Fdownload%2F%40vue%2Fpreload-webpack-plugin-1.1.2.tgz", + "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "html-webpack-plugin": ">=2.26.0", + "webpack": ">=4.0.0" + } + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz", + "integrity": "sha1-uw5G8VhafiibTuYGfcxaauYvHdE=", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz", + "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz", + "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz", + "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz", + "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&sync_timestamp=1580600760540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz", + "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1580599471846&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz", + "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz", + "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1580600708901&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz", + "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz", + "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz", + "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz", + "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz", + "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz", + "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz", + "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz", + "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz", + "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz", + "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.1", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1597235808041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz", + "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz", + "integrity": "sha1-TGYGkXPW/daO2FI5/CViJhgrLr4=", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1597235808138&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz", + "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/address/download/address-1.1.2.tgz?cache=0&sync_timestamp=1586265313929&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faddress%2Fdownload%2Faddress-1.1.2.tgz", + "integrity": "sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY=", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.0.1.tgz", + "integrity": "sha1-2y/nJG5Tb0DZtUQqOeEX191qJOA=", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.3", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593877011158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz", + "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1595908821568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz", + "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz", + "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=", + "dev": true, + "dependencies": { + "type-fest": "^0.11.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz", + "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=" + }, + "node_modules/arch": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.1.2.tgz", + "integrity": "sha1-DFK75zRLtPomDEQ9LLrZwA/y8L8=", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "optional": true + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "devOptional": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz", + "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz?cache=0&sync_timestamp=1586265311434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fassert%2Fdownload%2Fassert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "devOptional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1588238397004&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "devOptional": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz?cache=0&sync_timestamp=1596623693524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-1.8.5.tgz", + "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "devOptional": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1596141637688&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz", + "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.10.1", + "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.10.1.tgz?cache=0&sync_timestamp=1597237224399&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.10.1.tgz", + "integrity": "sha1-4eguTz6Zniz9YbFhKA0WoRH4ZCg=", + "devOptional": true + }, + "node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/axios/node_modules/follow-redirects": { + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", + "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz", + "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715959282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz", + "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", + "dev": true, + "dependencies": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 6.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1586450527243&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", + "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1595456511811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz", + "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "devOptional": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bfj": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz", + "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.1.0.tgz?cache=0&sync_timestamp=1593261264326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.1.0.tgz", + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz?cache=0&sync_timestamp=1586263933818&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbluebird%2Fdownload%2Fbluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=" + }, + "node_modules/bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.2.tgz", + "integrity": "sha1-yWhpAtPJoncp9DqxD515wgBNp7A=" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "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/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/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": "2.3.2", + "resolved": "https://registry.npm.taobao.org/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/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557797092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz", + "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.14.0", + "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.14.0.tgz?cache=0&sync_timestamp=1596757541827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.14.0.tgz", + "integrity": "sha1-KQiVGr/k7Jhze3LzTDvO3I1DsAA=", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz", + "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594428071983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz", + "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/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-loader": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz", + "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=", + "dev": true, + "dependencies": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/cache-loader/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz?cache=0&sync_timestamp=1583734687174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/cache-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/cache-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/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/cache-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cache-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/cache-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cache-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/call-me-maybe/download/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.0.0.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.0.0.tgz", + "integrity": "sha1-Uln3ww414njxvcKk2RIws3ytmB4=", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "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.30001113", + "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001113.tgz?cache=0&sync_timestamp=1597122354006&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001113.tgz", + "integrity": "sha1-IgFqtVtaiwT6AMo0LZ7huY30gGU=", + "dev": true + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "devOptional": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "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": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1594010907828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "node_modules/check-types": { + "version": "8.0.3", + "resolved": "https://registry.npm.taobao.org/check-types/download/check-types-8.0.3.tgz", + "integrity": "sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.4.2.tgz", + "integrity": "sha1-ONyOZY3sOAl0HrPve7Ckf+QkIy0=", + "devOptional": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz", + "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.2.tgz", + "integrity": "sha1-I0CQ7pfH1K0aLEvq4nUF3v/GCKQ=", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-1.6.0.tgz", + "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "4.2.3", + "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1592035257353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.4.tgz", + "integrity": "sha1-CYy2Qs8X9CrcHBFF4H+WDsTXUis=", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "highlight.js": "^9.6.0", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^5.1.1", + "yargs": "^15.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.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-3.0.0.tgz", + "integrity": "sha1-P3PCv1JlkfV0zEksUeJFY0n4ROQ=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.4.0.tgz", + "integrity": "sha1-xiVtsha4eM+6RyDnGc7Hz3JoXX8=", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz?cache=0&sync_timestamp=1584602265295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipboardy%2Fdownload%2Fclipboardy-2.3.0.tgz", + "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/codemirror": { + "version": "5.64.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.64.0.tgz", + "integrity": "sha512-fqr6CtDQdJ6iNMbD8NX2gH2G876nNDk+TO1rrYkgWnqQdO3O1Xa9tK6q+psqhJJgE5SpbaDcgdfLmukoUVE8pg==" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/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": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz", + "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=", + "dev": true, + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-string": { + "version": "1.5.3", + "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz", + "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz?cache=0&sync_timestamp=1593955795963&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.1.tgz", + "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "devOptional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1595168224685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcompressible%2Fdownload%2Fcompressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=" + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz", + "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525998658&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.1.tgz", + "integrity": "sha1-VIGgPeoRI9iKmIxv+LeCRyFPC4g=", + "dev": true, + "dependencies": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1584836110944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-3.3.10.tgz", + "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz", + "integrity": "sha1-7OxTsOAxe9yV73arcHS3OEeF+mE=", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz?cache=0&sync_timestamp=1586450527243&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.6.5.tgz", + "integrity": "sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo=", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.5.tgz", + "integrity": "sha1-KlHZpOJd/W5pAlGqgfmePAVIHxw=", + "dev": true, + "dependencies": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.1.tgz", + "integrity": "sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==", + "deprecated": "core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure.", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1596312428590&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1595832985835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz?cache=0&sync_timestamp=1596557796546&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-ecdh%2Fdownload%2Fcreate-ecdh-4.0.4.tgz", + "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-env": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/cross-env/-/cross-env-10.1.0.tgz", + "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-env/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1582155390641&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-line-break": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", + "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", + "dependencies": { + "base64-arraybuffer": "^0.2.0" + } + }, + "node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1596725577040&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz", + "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.3.0.tgz", + "integrity": "sha1-EP7Glqns4uWRrHctdZqsq6w4zTk=", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.10.tgz?cache=0&sync_timestamp=1597078142609&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.10.tgz", + "integrity": "sha1-CsQfCxPRPUZUh+ERt3jULaYxuLI=", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz?cache=0&sync_timestamp=1597078153540&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.7.tgz", + "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.0.3.tgz", + "integrity": "sha1-DZmF3IUsfMKyys+74QeQFNGo6QM=", + "dev": true, + "dependencies": { + "css-tree": "1.0.0-alpha.39" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha1-K/8//huz93bPfu/ZHuXLp3oUnus=", + "dev": true, + "dependencies": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.6.tgz?cache=0&sync_timestamp=1596129890334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.6.tgz", + "integrity": "sha1-hS3GD8ql2qLoz2yRicRA7T4EKXg=", + "dev": true + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "node_modules/d3": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/d3/-/d3-5.0.0.tgz", + "integrity": "sha512-JAuq1vvO8AQnAvZ5Gi3OsUWAoB1dOZlIQZEcj+JzEnafmwLlrWcW24o5I7fM9x+tsrZpsi8n9L12iHyHr0HTlg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1", + "d3-axis": "1", + "d3-brush": "1", + "d3-chord": "1", + "d3-collection": "1", + "d3-color": "1", + "d3-contour": "1", + "d3-dispatch": "1", + "d3-drag": "1", + "d3-dsv": "1", + "d3-ease": "1", + "d3-fetch": "1", + "d3-force": "1", + "d3-format": "1", + "d3-geo": "1", + "d3-hierarchy": "1", + "d3-interpolate": "1", + "d3-path": "1", + "d3-polygon": "1", + "d3-quadtree": "1", + "d3-random": "1", + "d3-scale": "2", + "d3-scale-chromatic": "1", + "d3-selection": "1", + "d3-shape": "1", + "d3-time": "1", + "d3-time-format": "2", + "d3-timer": "1", + "d3-transition": "1", + "d3-voronoi": "1", + "d3-zoom": "1" + } + }, + "node_modules/d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "node_modules/d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "node_modules/d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "dependencies": { + "d3-array": "1", + "d3-path": "1" + } + }, + "node_modules/d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "node_modules/d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "node_modules/d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^1.1.1" + } + }, + "node_modules/d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "node_modules/d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-dsv": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-1.2.0.tgz", + "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json", + "csv2tsv": "bin/dsv2dsv", + "dsv2dsv": "bin/dsv2dsv", + "dsv2json": "bin/dsv2json", + "json2csv": "bin/json2dsv", + "json2dsv": "bin/json2dsv", + "json2tsv": "bin/json2dsv", + "tsv2csv": "bin/dsv2dsv", + "tsv2json": "bin/dsv2json" + } + }, + "node_modules/d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "node_modules/d3-fetch": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-1.2.0.tgz", + "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-dsv": "1" + } + }, + "node_modules/d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "dependencies": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "node_modules/d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "dependencies": { + "d3-array": "1" + } + }, + "node_modules/d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "node_modules/d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "node_modules/d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "node_modules/d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "node_modules/d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "node_modules/d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-color": "1", + "d3-interpolate": "1" + } + }, + "node_modules/d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "node_modules/d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "d3-time": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "node_modules/d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "node_modules/d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "dependencies": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "devOptional": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", + "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1590392787863&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz?cache=0&sync_timestamp=1590419212936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-5.0.5.tgz", + "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=", + "dev": true, + "dependencies": { + "execa": "^3.3.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-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/default-gateway/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz", + "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz?cache=0&sync_timestamp=1597056546379&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-5.2.0.tgz", + "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz", + "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596094033376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/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/default-gateway/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz", + "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1574442298523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/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/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-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/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "deprecated": "Please upgrade to v1.0.1", + "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": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dev": true, + "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/globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "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": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", + "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true + }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.2.2.tgz", + "integrity": "sha1-+gnwaUFTyJGLGLoN6vrpR2n8UMQ=", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz", + "integrity": "sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g=", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1589068586633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=" + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz", + "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1589052562875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz?cache=0&sync_timestamp=1572620677785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.2.0.tgz", + "integrity": "sha1-w07MKVVtxF8fTCJpe29JBODMT8s=", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz?cache=0&sync_timestamp=1571190875964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-8.2.0.tgz", + "integrity": "sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz", + "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz", + "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz?cache=0&sync_timestamp=1581344506050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fduplexify%2Fdownload%2Fduplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "devOptional": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npm.taobao.org/ejs/download/ejs-2.7.4.tgz", + "integrity": "sha1-SGYSh1c9zFPjZsehrlLDoSDuybo=", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.532", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.532.tgz", + "integrity": "sha1-KB77i4WI7IoQXbiCnDndKtF4sfM=", + "dev": true + }, + "node_modules/element-ui": { + "version": "2.13.2", + "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.2.tgz?cache=0&sync_timestamp=1589795216634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.2.tgz", + "integrity": "sha1-WCv0eqqqr+I+oZWPriF6aHrQZEc=", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492847950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz", + "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=", + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1594972191252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz", + "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.3.tgz", + "integrity": "sha1-XEh+V0Krk8Fau12iJ1m4WQ7AO38=" + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/error-stack-parser/download/error-stack-parser-2.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ferror-stack-parser%2Fdownload%2Ferror-stack-parser-2.0.6.tgz", + "integrity": "sha1-WpmnB716TFinl5AtSNgoA+3mqtg=", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.6.tgz?cache=0&sync_timestamp=1592109236836&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.6.tgz", + "integrity": "sha1-kUIHFweFeyysx7iey2cDFsPi1So=", + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz?cache=0&sync_timestamp=1573280919382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-to-primitive%2Fdownload%2Fes-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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.0.2.tgz?cache=0&sync_timestamp=1594743153745&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.0.2.tgz", + "integrity": "sha1-algNcO24eIDyK0yR0NVgeN9pYsQ=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz?cache=0&sync_timestamp=1569523273389&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-html%2Fdownload%2Fescape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1596238095161&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-6.8.0.tgz", + "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha1-9tIjjBKQ0ByFmotcH301KgsNqLE=", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/eslint-loader/download/eslint-loader-2.2.1.tgz?cache=0&sync_timestamp=1587759762884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-loader%2Fdownload%2Feslint-loader-2.2.1.tgz", + "integrity": "sha1-KLnBLaVAV68IReKmEScBova/gzc=", + "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "dev": true, + "dependencies": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + }, + "peerDependencies": { + "eslint": ">=1.6.0 <7.0.0", + "webpack": ">=2.0.0 <5.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI=", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-6.2.2.tgz?cache=0&sync_timestamp=1597198113104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-6.2.2.tgz", + "integrity": "sha1-J/7NmjokeJsPER7N1UCp5WGY4P4=", + "dev": true, + "dependencies": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1591270013616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&sync_timestamp=1592222137228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz", + "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1592583663563&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591270013616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1596709440480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573665120798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1595034117735&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-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/espree/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235808041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/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.3.1", + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587062102034&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596641261520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz", + "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=", + "dependencies": { + "estraverse": "^4.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596641261520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz", + "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.4.tgz?cache=0&sync_timestamp=1589283112999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.4.tgz", + "integrity": "sha1-tUY6zmNaCD0Bi9x8kXtMXxCoU4Q=", + "dev": true + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz?cache=0&sync_timestamp=1595422651095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.2.0.tgz", + "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.0.7.tgz", + "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "devOptional": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "devOptional": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599604977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz", + "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=", + "dev": true + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1592290372789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz", + "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=", + "dev": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1584836110944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz?cache=0&sync_timestamp=1595428000133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffiggy-pudding%2Fdownload%2Ffiggy-pudding-3.5.2.tgz", + "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", + "deprecated": "This module is no longer supported." + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865404867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz", + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz", + "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "optional": true + }, + "node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz?cache=0&sync_timestamp=1582340569604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz", + "integrity": "sha1-CQuz7gG2+AGoqL6Z0xcQs0Irsxc=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/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/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz?cache=0&sync_timestamp=1583734687174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-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-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581229852361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz?cache=0&sync_timestamp=1593953298860&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597059692702&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "devOptional": 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.1.2", + "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-7.0.1.tgz?cache=0&sync_timestamp=1591229981021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-7.0.1.tgz", + "integrity": "sha1-TxicRKoSO4lfcigE9V6iPq3DSOk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "deprecated": "This package is no longer supported.", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.3.tgz", + "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", + "dev": true, + "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": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz", + "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz", + "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1597056546379&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "devOptional": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz?cache=0&sync_timestamp=1584836110944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1596709440480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz", + "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588087015125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=" + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz", + "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhandle-thing%2Fdownload%2Fhandle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596082672991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "deprecated": "this library is no longer supported", + "devOptional": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950770764&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz?cache=0&sync_timestamp=1588318012719&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhash-base%2Fdownload%2Fhash-base-3.1.0.tgz", + "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz", + "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "node_modules/highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.18.3.tgz", + "integrity": "sha1-oaCiAo1eMUniOA+Khl7oUWcD1jQ=", + "deprecated": "Version no longer supported. Upgrade to @latest", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz", + "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1594427950058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz", + "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=", + "dev": true + }, + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.1.tgz", + "integrity": "sha1-+5oaS1sUxdq6gtPjTGrk/nAaDkQ=", + "dev": true + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-minifier/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1595168224685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=" + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz", + "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "deprecated": "3.x is no longer supported", + "dependencies": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/big.js": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "engines": { + "node": "*" + } + }, + "node_modules/html-webpack-plugin/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dependencies": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "node_modules/html-webpack-plugin/node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/html2canvas": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.0.tgz", + "integrity": "sha512-vQMssxs2HvLuy7T0JrQqirRQxnhfB7KaHRSsQVV2WaNlXMqqhwv0gH+JUkkaWCednbDWZtRF7Msb/pbTkbcrpA==", + "dependencies": { + "css-line-break": "2.0.1", + "text-segmentation": "^1.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1582421370976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz", + "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz", + "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=" + }, + "node_modules/htmlparser2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407679215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "dev": true, + "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": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&sync_timestamp=1594313118893&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dev": true, + "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-signature": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1585807824814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "devOptional": 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/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz", + "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594185925932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz", + "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz", + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=" + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/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-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1573665120798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz?cache=0&sync_timestamp=1595471616544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-7.3.3.tgz", + "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/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/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1596094033376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inquirer/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/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/inquirer/node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1596563452008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-ip/node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1590419212936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "deprecated": "Please upgrade to v0.1.7", + "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": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-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.0.4", + "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz", + "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + }, + "node_modules/is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.0.tgz", + "integrity": "sha1-gzNlYLVKOONeOi33r9BFTWkUaLs=", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz", + "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "deprecated": "Please upgrade to v0.1.5", + "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": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-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.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.1.1.tgz", + "integrity": "sha1-QSWojkTkUNOE4JBH7eca3C0UQVY=", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/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/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1579603241991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-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": "https://registry.npm.taobao.org/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.1", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555700840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz", + "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=", + "dev": true, + "dependencies": { + "html-comment-regex": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "devOptional": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "devOptional": true + }, + "node_modules/javascript-stringify": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz", + "integrity": "sha1-bvNYA1MQ411mfGde1j0+t8GqGeU=", + "dev": true + }, + "node_modules/jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.5.0.tgz", + "integrity": "sha1-JhHQcbec6g9D7lej0RhZOsFUfbE=", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.1.0.tgz", + "integrity": "sha1-aOMlkd9z4lrRxLSRCKLsUHliv9E=", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jquery": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.5.1.tgz", + "integrity": "sha1-17TQjhv9uGrS8aPQOeoXMEcXq7U=" + }, + "node_modules/jquery-mousewheel": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz", + "integrity": "sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU=" + }, + "node_modules/js-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/js-message": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "dependencies": { + "easy-stack": "^1.0.0" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590173013124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", + "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": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "devOptional": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=" + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "devOptional": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "devOptional": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", + "dev": true + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz", + "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsplumb": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/jsplumb/-/jsplumb-2.15.6.tgz", + "integrity": "sha512-sIpbpz5eMVM+vV+MQzFCidlaa1RsknrQs6LOTKYDjYUDdTAi2AN2bFi94TxB33TifcIsRNV1jebcaxg0tCoPzg==" + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "devOptional": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz", + "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=", + "dev": true, + "dependencies": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=", + "dev": true, + "dependencies": { + "launch-editor": "^2.2.1" + } + }, + "node_modules/less": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", + "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": "5.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "dependencies": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">= 4.8.0" + }, + "peerDependencies": { + "less": "^2.3.1 || ^3.0.0", + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/less-loader/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz", + "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levenary": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz?cache=0&sync_timestamp=1580182863535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flevenary%2Fdownload%2Flevenary-1.1.1.tgz", + "integrity": "sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=", + "dev": true, + "dependencies": { + "leven": "^3.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz?cache=0&sync_timestamp=1584820899566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-fs-cache%2Fdownload%2Floader-fs-cache-1.0.3.tgz", + "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=", + "dev": true, + "dependencies": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + } + }, + "node_modules/loader-fs-cache/node_modules/find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1583734687174&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1593786193413&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.mapvalues/download/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-2.2.0.tgz?cache=0&sync_timestamp=1587899102792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.8.tgz", + "integrity": "sha1-iiX7ddCSIw7NRFcnDYC1TigBEXE=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-loglevel?utm_medium=referral&utm_source=npm_fund" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427700888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/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/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/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/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1596129890334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/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/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz?cache=0&sync_timestamp=1570885317489&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-stream%2Fdownload%2Fmerge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz?cache=0&sync_timestamp=1591170027156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge2%2Fdownload%2Fmerge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/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/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.6.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.6.tgz", + "integrity": "sha1-5bQHyQ20QvK+tbFiNz0Htpr/pNE=", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1587603342053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz", + "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=", + "devOptional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", + "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", + "devOptional": true, + "dependencies": { + "mime-db": "1.44.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz?cache=0&sync_timestamp=1596094033376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-1.2.0.tgz", + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1597072374755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1596373132679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=" + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998946330&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz", + "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mousetrap": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1585239113381&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "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": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz", + "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.14.1", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.1.tgz", + "integrity": "sha1-174036MQW5FJTDFHCJMV7/iHSwE=", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1584699726257&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz", + "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=", + "dev": true, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz", + "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=", + "dev": true, + "dependencies": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/node-releases": { + "version": "1.1.60", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.60.tgz?cache=0&sync_timestamp=1595485343599&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.60.tgz", + "integrity": "sha1-aUi9/OgobwtdDlqI6DhOlU3+cIQ=", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/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-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1596373132679&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/num2fraction/download/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/object-hash/download/object-hash-1.3.1.tgz", + "integrity": "sha1-/eRSCYqVHLFF8Dm7fUVUSd3BJt8=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592546883565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.2.tgz", + "integrity": "sha1-xdLof/nhGfeLegiEQVGeLuwVc7Y=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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.0", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/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.1", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1595208373206&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz", + "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opener": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz", + "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz", + "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/ora/download/ora-3.4.0.tgz?cache=0&sync_timestamp=1596812499056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fora%2Fdownload%2Fora-3.4.0.tgz", + "integrity": "sha1-vwdSSRBZo+8+1MhQl1Md6f280xg=", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1594559666231&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/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": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz", + "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/p-retry/download/p-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz", + "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz", + "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.0.1.tgz?cache=0&sync_timestamp=1595832985835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.0.1.tgz", + "integrity": "sha1-fP41wczWQbzjmBRn5sLs5hs7OHg=", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz?cache=0&sync_timestamp=1595849228259&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-5.1.1.tgz?cache=0&sync_timestamp=1596090057353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5-htmlparser2-tree-adapter%2Fdownload%2Fparse5-htmlparser2-tree-adapter-5.1.1.tgz", + "integrity": "sha1-6MdD1OkhlNUpPs3isIvjHmdGHLw=", + "dev": true, + "dependencies": { + "parse5": "^5.1.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "devOptional": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574442298523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-3.0.0.tgz", + "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz", + "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "devOptional": true + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz", + "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=", + "dev": true, + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018172786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz", + "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/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": "7.0.32", + "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz?cache=0&sync_timestamp=1591102384019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.32.tgz", + "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.3.tgz?cache=0&sync_timestamp=1596805564788&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.3.tgz", + "integrity": "sha1-1lzKkqPFK/J603pfcy4Fh7dPFiM=", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1597078155815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1597078155951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1597078156044&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1597080009312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1597080012208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz", + "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz", + "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1597080014595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1597078157878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1597078157978&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1597078158061&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1597078158145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1597078158253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1595731909168&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=", + "dev": true, + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz", + "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=", + "dev": true, + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1597078158340&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1597078158413&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1597078158572&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz?cache=0&sync_timestamp=1597078158672&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-string%2Fdownload%2Fpostcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz?cache=0&sync_timestamp=1597078158752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-timing-functions%2Fdownload%2Fpostcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz?cache=0&sync_timestamp=1597078158829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-unicode%2Fdownload%2Fpostcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz?cache=0&sync_timestamp=1597078158960&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-url%2Fdownload%2Fpostcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz?cache=0&sync_timestamp=1597078159036&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-whitespace%2Fdownload%2Fpostcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1597078159135&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1597078159323&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", + "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.2.tgz?cache=0&sync_timestamp=1597078159539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.2.tgz", + "integrity": "sha1-F7mXvHEbMzurFDqu07jT1uPTglg=", + "dev": true, + "dependencies": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1597078159618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz?cache=0&sync_timestamp=1588083210998&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1587489576757&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz", + "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dependencies": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "optional": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", + "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz?cache=0&sync_timestamp=1585143008124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.8.0.tgz", + "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", + "devOptional": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz", + "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1591853383585&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/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/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz", + "integrity": "sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/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/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "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/readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.4.0.tgz?cache=0&sync_timestamp=1584986156939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.4.0.tgz", + "integrity": "sha1-n9zN+ekVWAVEkiGsZF6DA6tbmto=", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.1.tgz", + "integrity": "sha1-ytkq2Oa1kXc0hfvgWkhcr09Ffm8=", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz?cache=0&sync_timestamp=1595456511811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.7.tgz", + "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz?cache=0&sync_timestamp=1593557625815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.5.tgz", + "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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.3.0", + "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz", + "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz", + "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz", + "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz?cache=0&sync_timestamp=1583896906593&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsparser%2Fdownload%2Fregjsparser-0.6.4.tgz", + "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "devOptional": true + }, + "node_modules/renderkid": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz", + "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=", + "dependencies": { + "css-select": "^1.1.0", + "dom-converter": "^0.2", + "htmlparser2": "^3.3.0", + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/renderkid/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz", + "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=", + "engines": { + "node": "*" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz?cache=0&sync_timestamp=1589052562875&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomutils%2Fdownload%2Fdomutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/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/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&sync_timestamp=1581439006948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "devOptional": 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.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "devOptional": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz", + "integrity": "sha1-sllBtUloIxzC0bt2p5y38sC/hEQ=", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/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": "2.0.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz?cache=0&sync_timestamp=1581229852361&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/rxjs": { + "version": "6.6.2", + "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.2.tgz", + "integrity": "sha1-gJanrAPyzE/lhg725XKBDZ4BwNI=", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + }, + "node_modules/sass": { + "version": "1.26.10", + "resolved": "https://registry.npm.taobao.org/sass/download/sass-1.26.10.tgz", + "integrity": "sha1-hR0SYCHNyT3svyAdHsoqIO5DR2A=", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-8.0.2.tgz?cache=0&sync_timestamp=1596631691965&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.2.tgz", + "integrity": "sha1-3r7NjDziQ8dkVPLoKQSCFQOACQ0=", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.0.tgz", + "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/script-ext-html-webpack-plugin": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-2.1.5.tgz", + "integrity": "sha512-nMjd5dtsnoB8dS+pVM9ZL4mC9O1uVtTxrDS99OGZsZxFbkZE6pw0HCMued/cncDrKivIShO9vwoyOTvsGqQHEQ==", + "dependencies": { + "debug": "^4.2.0" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "html-webpack-plugin": "^3.0.0 || ^4.0.0", + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/script-ext-html-webpack-plugin/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz", + "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=", + "dev": true, + "dependencies": { + "node-forge": "0.9.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz", + "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "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": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407679215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "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": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz", + "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel/node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz", + "integrity": "sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "deprecated": "Please upgrade to v1.0.1", + "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": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "deprecated": "Please upgrade to v1.0.1", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-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": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.20.tgz?cache=0&sync_timestamp=1596165760378&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs%2Fdownload%2Fsockjs-0.3.20.tgz", + "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=", + "dev": true, + "dependencies": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz?cache=0&sync_timestamp=1596412238101&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz", + "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=", + "dev": true, + "dependencies": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829605994&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-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.19", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz?cache=0&sync_timestamp=1587719202023&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/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.5", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz", + "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz?cache=0&sync_timestamp=1585970558936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", + "dev": true, + "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": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "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.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "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": "https://registry.npm.taobao.org/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/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "devOptional": 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/ssri": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.1.tgz", + "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/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", + "dev": true + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz?cache=0&sync_timestamp=1590881722922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.2.0.tgz", + "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz", + "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha1-hYEqa4R6wAInD1gIFGBkyZX7aRM=", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha1-FK9tnzSwU/fPyJty+PLuFLkDmlQ=", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/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": "2.0.0", + "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567647900&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1597078159789&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/svg-tags/download/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433263159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1589549570189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1596288767985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1597229604288&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz", + "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=", + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-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/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.2.tgz", + "integrity": "sha512-uTqvLxdBrVnx/CFQOtnf8tfzSXFm+1Qxau7Xi54j4OPTZokuDOX8qncQzrg2G8ZicAMOM8TgzFAYTb+AqNO4Cw==", + "dependencies": { + "utrie": "^1.0.1" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz?cache=0&sync_timestamp=1592416260110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthenify%2Fdownload%2Fthenify-3.3.1.tgz", + "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz", + "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=", + "dev": true, + "dependencies": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz?cache=0&sync_timestamp=1597223521835&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrottle-debounce%2Fdownload%2Fthrottle-debounce-1.1.0.tgz", + "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz", + "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npm.taobao.org/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-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz?cache=0&sync_timestamp=1579194040958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkind-of%2Fdownload%2Fkind-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": "https://registry.npm.taobao.org/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": "2.1.1", + "resolved": "https://registry.npm.taobao.org/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/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "devOptional": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz", + "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=", + "dev": true + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-pnp%2Fdownload%2Fts-pnp-1.2.0.tgz", + "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.13.0.tgz", + "integrity": "sha1-yIHhPMcBWJTtkUhi0nZDb6mkcEM=" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "devOptional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1581364183265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "devOptional": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz", + "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1596385766913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1595168224685&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=" + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz?cache=0&sync_timestamp=1583950507232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583946096584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/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/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "devOptional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/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": "2.3.0", + "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz", + "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.4.7.tgz", + "integrity": "sha1-qKg1NejACjFuQDpdtKwbm4U64ng=", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1588238397004&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/utila/download/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/utrie": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.1.tgz", + "integrity": "sha512-JPaDXF3vzgZxfeEwutdGzlrNoVFL5UvZcbO6Qo9D4GoahrieUPoMU8GCpVpR7MQqcKhmShIh8VlbEN3PLM3EBg==", + "dependencies": { + "base64-arraybuffer": "^1.0.1" + } + }, + "node_modules/utrie/node_modules/base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-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.", + "devOptional": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/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": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "devOptional": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870837170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=" + }, + "node_modules/vue": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.11.tgz?cache=0&sync_timestamp=1595984178995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.11.tgz", + "integrity": "sha1-dllNh31LEiNEBuhONSdcbVFBJcU=", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details." + }, + "node_modules/vue-axios": { + "version": "2.1.5", + "resolved": "https://registry.npm.taobao.org/vue-axios/download/vue-axios-2.1.5.tgz", + "integrity": "sha1-GvS/EhjtcTCcdq+zjQ9oPjEsJKc=", + "peerDependencies": { + "vue": ">= 1.0.0" + } + }, + "node_modules/vue-codemirror": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-4.0.6.tgz", + "integrity": "sha512-ilU7Uf0mqBNSSV3KT7FNEeRIxH4s1fmpG4TfHlzvXn0QiQAbkXS9lLfwuZpaBVEnpP5CSE62iGJjoliTuA8poQ==", + "dependencies": { + "codemirror": "^5.41.0", + "diff-match-patch": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.1.0.tgz?cache=0&sync_timestamp=1589540412421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.1.0.tgz", + "integrity": "sha1-nNvMgj5lawh1B6GRFzK4Z6wQHoM=", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.0.tgz?cache=0&sync_timestamp=1591270013616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.0.tgz", + "integrity": "sha1-0Plx3+WcaeDK2mhLI9Sdv4JgDOU=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=", + "dev": true + }, + "node_modules/vue-loader": { + "version": "15.9.3", + "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.3.tgz?cache=0&sync_timestamp=1597130792222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.3.tgz", + "integrity": "sha1-DeNdnlVdPtU5aVFsrFziVTEpndo=", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/vue-router": { + "version": "3.4.3", + "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.4.3.tgz", + "integrity": "sha1-+pN2hhbuM4qhdPFgrJZRZ/pXL/o=" + }, + "node_modules/vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.2.tgz", + "integrity": "sha1-3t80mAbyXOtOZPOtfApE+6c1/Pg=", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/vue-template-compiler": { + "version": "2.6.11", + "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.11.tgz", + "integrity": "sha1-wEcE749JixUxMAGJk+VjCdRpgIA=", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", + "dev": true + }, + "node_modules/vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "dependencies": { + "sortablejs": "1.10.2" + } + }, + "node_modules/vuex": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz", + "integrity": "sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/wangeditor": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/wangeditor/-/wangeditor-4.7.11.tgz", + "integrity": "sha512-z6xEHTSj4YgqvQkHWh9/V/Md7hjEKchXquwvtxvWhwlMS/wBFprCg7qgE4omzuSBeivkZZGTJP08pmdHzOwCUQ==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@babel/runtime-corejs3": "^7.11.2", + "tslib": "^2.1.0" + } + }, + "node_modules/wangeditor/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + }, + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz", + "integrity": "sha1-bp2lOzyAuy1lCBiPWyAEEIZs0ws=", + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.0.tgz?cache=0&sync_timestamp=1589640722705&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.0.tgz", + "integrity": "sha1-mUihhmy71suCTeoTp+1pH2yN3/A=", + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + }, + "engines": { + "node": "<8.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261264326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "optional": true, + "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/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1584836110944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1584986156939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "4.44.1", + "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.44.1.tgz?cache=0&sync_timestamp=1597067258124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.1.tgz", + "integrity": "sha1-F+af/58yG48RfR/acU7fwLk5zCE=", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "3.8.0", + "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.8.0.tgz", + "integrity": "sha1-zms/kI2vBp/R9yZvaSy7O97ZuhY=", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 6.14.4" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.0.tgz?cache=0&sync_timestamp=1597235808041&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.0.tgz", + "integrity": "sha1-4a1IbmxUUBY0xsOXxcEh2qODYHw=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz?cache=0&sync_timestamp=1595813279654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-6.5.1.tgz", + "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1594744651883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", + "dev": true, + "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" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz", + "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "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.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.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": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "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": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "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": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1593261264326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "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": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dev": true, + "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.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "dev": true, + "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": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz?cache=0&sync_timestamp=1584836110944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglob-parent%2Fdownload%2Fglob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "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": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "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": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz?cache=0&sync_timestamp=1584986156939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "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": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "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/semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886660126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "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.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "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": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "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.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1594421433232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dev": true, + "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": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1596945775457&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz", + "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/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-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1590761195120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-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/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "dependencies": { + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/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/wrap-ansi/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.2.1.tgz", + "integrity": "sha1-kK51xCTQCNJiTFvynq0xd+v881k=", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/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/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1593925746458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=" + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1594421433232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz", + "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.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": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1596945775457&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz", + "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1586229901005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/yargs/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/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/yargs/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/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/yargs/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/yorkie/download/yorkie-2.0.0.tgz", + "integrity": "sha1-kkEZEtQ1IU4SxRwq4Qk+VLa7g9k=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz?cache=0&sync_timestamp=1590421014780&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.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": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz?cache=0&sync_timestamp=1597056546379&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427700888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz", + "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/kgBuilder-ui/package.json b/kgBuilder-ui/package.json new file mode 100644 index 0000000..472bf91 --- /dev/null +++ b/kgBuilder-ui/package.json @@ -0,0 +1,72 @@ +{ + "name": "kg-builder", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve", + "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build", + "lint": "vue-cli-service lint" + }, + "dependencies": { + "@antv/x6": "^1.28.1", + "axios": "^0.24.0", + "core-js": "^3.6.5", + "element-ui": "^2.13.2", + "html2canvas": "^1.4.0", + "jquery": "^3.5.1", + "js-cookie": "^3.0.1", + "jsplumb": "^2.15.6", + "less": "^3.9.0", + "less-loader": "^5.0.0", + "lodash": "^4.17.21", + "qs": "^6.10.2", + "script-ext-html-webpack-plugin": "^2.1.5", + "vue": "^2.6.11", + "vue-axios": "^2.1.5", + "vue-codemirror": "^4.0.6", + "vue-router": "^3.2.0", + "vuedraggable": "^2.24.3", + "vuex": "^3.4.0", + "wangeditor": "^4.7.11" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-plugin-eslint": "~4.5.0", + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "@vue/eslint-config-prettier": "^6.0.0", + "babel-eslint": "^10.1.0", + "cross-env": "^10.1.0", + "d3": "5.0.0", + "eslint": "^6.7.2", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-vue": "^6.2.2", + "prettier": "^1.19.1", + "sass": "^1.26.5", + "sass-loader": "^8.0.2", + "vue-template-compiler": "^2.6.11" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/essential", + "eslint:recommended", + "@vue/prettier" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": { + "no-unused-vars": "off" + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/kgBuilder-ui/public/favicon.ico b/kgBuilder-ui/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/kgBuilder-ui/public/favicon.ico differ diff --git a/kgBuilder-ui/public/index.html b/kgBuilder-ui/public/index.html new file mode 100644 index 0000000..a2d561e --- /dev/null +++ b/kgBuilder-ui/public/index.html @@ -0,0 +1,18 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + + diff --git a/kgBuilder-ui/public/robots.txt b/kgBuilder-ui/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/kgBuilder-ui/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/kgBuilder-ui/public/static/icon/demo.css b/kgBuilder-ui/public/static/icon/demo.css new file mode 100644 index 0000000..2557983 --- /dev/null +++ b/kgBuilder-ui/public/static/icon/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 40px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/kgBuilder-ui/public/static/icon/demo_index.html b/kgBuilder-ui/public/static/icon/demo_index.html new file mode 100644 index 0000000..646c48f --- /dev/null +++ b/kgBuilder-ui/public/static/icon/demo_index.html @@ -0,0 +1,11228 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    ellipsis
    +
    &#xe77e;
    +
  • + +
  • + +
    training
    +
    &#xe87e;
    +
  • + +
  • + +
    email
    +
    &#xe77f;
    +
  • + +
  • + +
    packing-labeling-fill
    +
    &#xe87f;
    +
  • + +
  • + +
    falling
    +
    &#xe780;
    +
  • + +
  • + +
    export services-fill
    +
    &#xe880;
    +
  • + +
  • + +
    earth
    +
    &#xe781;
    +
  • + +
  • + +
    brand-fill
    +
    &#xe881;
    +
  • + +
  • + +
    filter
    +
    &#xe782;
    +
  • + +
  • + +
    collection
    +
    &#xe882;
    +
  • + +
  • + +
    furniture
    +
    &#xe783;
    +
  • + +
  • + +
    consumption-fill
    +
    &#xe883;
    +
  • + +
  • + +
    folder
    +
    &#xe784;
    +
  • + +
  • + +
    collection-fill
    +
    &#xe884;
    +
  • + +
  • + +
    feeds
    +
    &#xe785;
    +
  • + +
  • + +
    brand
    +
    &#xe885;
    +
  • + +
  • + +
    history
    +
    &#xe786;
    +
  • + +
  • + +
    rejected-order-fill
    +
    &#xe886;
    +
  • + +
  • + +
    hardware
    +
    &#xe787;
    +
  • + +
  • + +
    homepage-ads-fill
    +
    &#xe887;
    +
  • + +
  • + +
    help
    +
    &#xe788;
    +
  • + +
  • + +
    homepage-ads
    +
    &#xe888;
    +
  • + +
  • + +
    good
    +
    &#xe789;
    +
  • + +
  • + +
    scenes-fill
    +
    &#xe889;
    +
  • + +
  • + +
    Household appliances
    +
    &#xe78a;
    +
  • + +
  • + +
    scenes
    +
    &#xe88a;
    +
  • + +
  • + +
    gift
    +
    &#xe78b;
    +
  • + +
  • + +
    similar-product-fill
    +
    &#xe88b;
    +
  • + +
  • + +
    form
    +
    &#xe78c;
    +
  • + +
  • + +
    topraning-fill
    +
    &#xe88c;
    +
  • + +
  • + +
    image-text
    +
    &#xe78d;
    +
  • + +
  • + +
    consumption
    +
    &#xe88d;
    +
  • + +
  • + +
    hot
    +
    &#xe78e;
    +
  • + +
  • + +
    topraning
    +
    &#xe88e;
    +
  • + +
  • + +
    inspection
    +
    &#xe78f;
    +
  • + +
  • + +
    gold-supplier
    +
    &#xe88f;
    +
  • + +
  • + +
    left button
    +
    &#xe790;
    +
  • + +
  • + +
    message center-fill
    +
    &#xe890;
    +
  • + +
  • + +
    jewelry
    +
    &#xe791;
    +
  • + +
  • + +
    quick
    +
    &#xe891;
    +
  • + +
  • + +
    ipad
    +
    &#xe792;
    +
  • + +
  • + +
    writing
    +
    &#xe892;
    +
  • + +
  • + +
    left arrow
    +
    &#xe793;
    +
  • + +
  • + +
    doc-fill
    +
    &#xe893;
    +
  • + +
  • + +
    integral
    +
    &#xe794;
    +
  • + +
  • + +
    jpge-fill
    +
    &#xe894;
    +
  • + +
  • + +
    kitchen
    +
    &#xe795;
    +
  • + +
  • + +
    gif-fill
    +
    &#xe895;
    +
  • + +
  • + +
    inquiry-template
    +
    &#xe796;
    +
  • + +
  • + +
    bmp-fill
    +
    &#xe896;
    +
  • + +
  • + +
    link
    +
    &#xe797;
    +
  • + +
  • + +
    tif-fill
    +
    &#xe897;
    +
  • + +
  • + +
    libra
    +
    &#xe798;
    +
  • + +
  • + +
    png-fill
    +
    &#xe898;
    +
  • + +
  • + +
    loading
    +
    &#xe799;
    +
  • + +
  • + +
    home
    +
    &#xe899;
    +
  • + +
  • + +
    listing-content
    +
    &#xe79a;
    +
  • + +
  • + +
    home
    +
    &#xe89a;
    +
  • + +
  • + +
    lights
    +
    &#xe79b;
    +
  • + +
  • + +
    send inquiry-fill
    +
    &#xe89b;
    +
  • + +
  • + +
    logistics-icon
    +
    &#xe79c;
    +
  • + +
  • + +
    comments-fill
    +
    &#xe89c;
    +
  • + +
  • + +
    message center
    +
    &#xe79d;
    +
  • + +
  • + +
    account-fill
    +
    &#xe89d;
    +
  • + +
  • + +
    mobile-phone
    +
    &#xe79e;
    +
  • + +
  • + +
    feed-logo-fill
    +
    &#xe89e;
    +
  • + +
  • + +
    manage-order
    +
    &#xe79f;
    +
  • + +
  • + +
    feed-logo
    +
    &#xe89f;
    +
  • + +
  • + +
    move
    +
    &#xe7a0;
    +
  • + +
  • + +
    home-fill
    +
    &#xe8a0;
    +
  • + +
  • + +
    Money management
    +
    &#xe7a1;
    +
  • + +
  • + +
    add-select
    +
    &#xe8a1;
    +
  • + +
  • + +
    namecard
    +
    &#xe7a2;
    +
  • + +
  • + +
    sami-select
    +
    &#xe8a2;
    +
  • + +
  • + +
    map
    +
    &#xe7a3;
    +
  • + +
  • + +
    camera
    +
    &#xe8a3;
    +
  • + +
  • + +
    New user zone
    +
    &#xe7a4;
    +
  • + +
  • + +
    arrow-down
    +
    &#xe8a4;
    +
  • + +
  • + +
    multi-language
    +
    &#xe7a5;
    +
  • + +
  • + +
    account
    +
    &#xe8a5;
    +
  • + +
  • + +
    office
    +
    &#xe7a6;
    +
  • + +
  • + +
    comments
    +
    &#xe8a6;
    +
  • + +
  • + +
    notice
    +
    &#xe7a7;
    +
  • + +
  • + +
    cart-Empty
    +
    &#xe8a7;
    +
  • + +
  • + +
    on time shipment
    +
    &#xe7a8;
    +
  • + +
  • + +
    favorites
    +
    &#xe8a8;
    +
  • + +
  • + +
    office-supplies
    +
    &#xe7a9;
    +
  • + +
  • + +
    order
    +
    &#xe8a9;
    +
  • + +
  • + +
    password
    +
    &#xe7aa;
    +
  • + +
  • + +
    search
    +
    &#xe8aa;
    +
  • + +
  • + +
    Not visible
    +
    &#xe7ab;
    +
  • + +
  • + +
    trade-assurance
    +
    &#xe8ab;
    +
  • + +
  • + +
    operation
    +
    &#xe7ac;
    +
  • + +
  • + +
    user center
    +
    &#xe8ac;
    +
  • + +
  • + +
    packaging
    +
    &#xe7ad;
    +
  • + +
  • + +
    trading data
    +
    &#xe8ad;
    +
  • + +
  • + +
    online-tracking
    +
    &#xe7ae;
    +
  • + +
  • + +
    microphone
    +
    &#xe8ae;
    +
  • + +
  • + +
    packing-labeling
    +
    &#xe7af;
    +
  • + +
  • + +
    txt
    +
    &#xe8af;
    +
  • + +
  • + +
    phone
    +
    &#xe7b0;
    +
  • + +
  • + +
    xlsx
    +
    &#xe8b0;
    +
  • + +
  • + +
    pic
    +
    &#xe7b1;
    +
  • + +
  • + +
    办证服务
    +
    &#xe8b1;
    +
  • + +
  • + +
    pin
    +
    &#xe7b2;
    +
  • + +
  • + +
    仓库
    +
    &#xe8b2;
    +
  • + +
  • + +
    play
    +
    &#xe7b3;
    +
  • + +
  • + +
    代办财税
    +
    &#xe8b3;
    +
  • + +
  • + +
    logistic-logo
    +
    &#xe7b4;
    +
  • + +
  • + +
    集装箱
    +
    &#xe8b4;
    +
  • + +
  • + +
    print
    +
    &#xe7b5;
    +
  • + +
  • + +
    角标
    +
    &#xe8b5;
    +
  • + +
  • + +
    product
    +
    &#xe7b6;
    +
  • + +
  • + +
    客户盘点
    +
    &#xe8b6;
    +
  • + +
  • + +
    machinery
    +
    &#xe7b7;
    +
  • + +
  • + +
    动态
    +
    &#xe8b7;
    +
  • + +
  • + +
    process
    +
    &#xe7b8;
    +
  • + +
  • + +
    贷款
    +
    &#xe8b8;
    +
  • + +
  • + +
    prompt
    +
    &#xe7b9;
    +
  • + +
  • + +
    生意经
    +
    &#xe8b9;
    +
  • + +
  • + +
    QRcode
    +
    &#xe7ba;
    +
  • + +
  • + +
    结汇
    +
    &#xe8ba;
    +
  • + +
  • + +
    reeor
    +
    &#xe7bb;
    +
  • + +
  • + +
    分层配置
    +
    &#xe8bb;
    +
  • + +
  • + +
    reduce
    +
    &#xe7bc;
    +
  • + +
  • + +
    申请记录
    +
    &#xe8bc;
    +
  • + +
  • + +
    Non-staple food
    +
    &#xe7bd;
    +
  • + +
  • + +
    上传备案单证
    +
    &#xe8bd;
    +
  • + +
  • + +
    rejected-order
    +
    &#xe7be;
    +
  • + +
  • + +
    上传
    +
    &#xe8be;
    +
  • + +
  • + +
    resonse rate
    +
    &#xe7bf;
    +
  • + +
  • + +
    客户权益
    +
    &#xe8bf;
    +
  • + +
  • + +
    remind
    +
    &#xe7c0;
    +
  • + +
  • + +
    缩小
    +
    &#xe8c0;
    +
  • + +
  • + +
    response time
    +
    &#xe7c1;
    +
  • + +
  • + +
    权益配置
    +
    &#xe8c1;
    +
  • + +
  • + +
    return
    +
    &#xe7c2;
    +
  • + +
  • + +
    双审
    +
    &#xe8c2;
    +
  • + +
  • + +
    paylater
    +
    &#xe7c3;
    +
  • + +
  • + +
    通关
    +
    &#xe8c3;
    +
  • + +
  • + +
    rising
    +
    &#xe7c4;
    +
  • + +
  • + +
    退税
    +
    &#xe8c4;
    +
  • + +
  • + +
    Right arrow
    +
    &#xe7c5;
    +
  • + +
  • + +
    通关数据
    +
    &#xe8c5;
    +
  • + +
  • + +
    rmb
    +
    &#xe7c6;
    +
  • + +
  • + +
    快递物流
    +
    &#xe8c6;
    +
  • + +
  • + +
    RFQ-logo
    +
    &#xe7c7;
    +
  • + +
  • + +
    物流产品
    +
    &#xe8c7;
    +
  • + +
  • + +
    save
    +
    &#xe7c8;
    +
  • + +
  • + +
    外汇数据
    +
    &#xe8c8;
    +
  • + +
  • + +
    scanning
    +
    &#xe7c9;
    +
  • + +
  • + +
    信息bar_手机
    +
    &#xe8c9;
    +
  • + +
  • + +
    security
    +
    &#xe7ca;
    +
  • + +
  • + +
    新外综业务
    +
    &#xe8ca;
    +
  • + +
  • + +
    sales center
    +
    &#xe7cb;
    +
  • + +
  • + +
    物流订单
    +
    &#xe8cb;
    +
  • + +
  • + +
    seleted
    +
    &#xe7cc;
    +
  • + +
  • + +
    中间人
    +
    &#xe8cc;
    +
  • + +
  • + +
    search cart
    +
    &#xe7cd;
    +
  • + +
  • + +
    信息bar_账户
    +
    &#xe8cd;
    +
  • + +
  • + +
    raw
    +
    &#xe7ce;
    +
  • + +
  • + +
    一达通
    +
    &#xe8ce;
    +
  • + +
  • + +
    service
    +
    &#xe7cf;
    +
  • + +
  • + +
    专业权威
    +
    &#xe8cf;
    +
  • + +
  • + +
    share
    +
    &#xe7d0;
    +
  • + +
  • + +
    账户操作
    +
    &#xe8d0;
    +
  • + +
  • + +
    signboard
    +
    &#xe7d1;
    +
  • + +
  • + +
    旋转90度
    +
    &#xe8d1;
    +
  • + +
  • + +
    shuffling-banner
    +
    &#xe7d2;
    +
  • + +
  • + +
    退税融资
    +
    &#xe8d2;
    +
  • + +
  • + +
    Right button
    +
    &#xe7d3;
    +
  • + +
  • + +
    Add Products
    +
    &#xe8d3;
    +
  • + +
  • + +
    sorting
    +
    &#xe7d4;
    +
  • + +
  • + +
    自营业务
    +
    &#xe8d4;
    +
  • + +
  • + +
    sound-Mute
    +
    &#xe7d5;
    +
  • + +
  • + +
    addcell
    +
    &#xe8d5;
    +
  • + +
  • + +
    category products
    +
    &#xe7d6;
    +
  • + +
  • + +
    background-color
    +
    &#xe8d6;
    +
  • + +
  • + +
    sound-filling
    +
    &#xe7d7;
    +
  • + +
  • + +
    cascades
    +
    &#xe8d7;
    +
  • + +
  • + +
    suggest
    +
    &#xe7d8;
    +
  • + +
  • + +
    beijing
    +
    &#xe8d8;
    +
  • + +
  • + +
    stop
    +
    &#xe7d9;
    +
  • + +
  • + +
    bold
    +
    &#xe8d9;
    +
  • + +
  • + +
    success
    +
    &#xe7da;
    +
  • + +
  • + +
    资金
    +
    &#xe8da;
    +
  • + +
  • + +
    supplier-features
    +
    &#xe7db;
    +
  • + +
  • + +
    eraser
    +
    &#xe8db;
    +
  • + +
  • + +
    switch
    +
    &#xe7dc;
    +
  • + +
  • + +
    centeralignment
    +
    &#xe8dc;
    +
  • + +
  • + +
    survey
    +
    &#xe7dd;
    +
  • + +
  • + +
    click
    +
    &#xe8dd;
    +
  • + +
  • + +
    template
    +
    &#xe7de;
    +
  • + +
  • + +
    asp结算
    +
    &#xe8de;
    +
  • + +
  • + +
    text
    +
    &#xe7df;
    +
  • + +
  • + +
    flag
    +
    &#xe8df;
    +
  • + +
  • + +
    suspended
    +
    &#xe7e0;
    +
  • + +
  • + +
    falg-fill
    +
    &#xe8e0;
    +
  • + +
  • + +
    task-management
    +
    &#xe7e1;
    +
  • + +
  • + +
    Fee
    +
    &#xe8e1;
    +
  • + +
  • + +
    tool
    +
    &#xe7e2;
    +
  • + +
  • + +
    filling
    +
    &#xe8e2;
    +
  • + +
  • + +
    top
    +
    &#xe7e3;
    +
  • + +
  • + +
    Foreign currency
    +
    &#xe8e3;
    +
  • + +
  • + +
    smile
    +
    &#xe7e4;
    +
  • + +
  • + +
    guanliyuan
    +
    &#xe8e4;
    +
  • + +
  • + +
    textile-products
    +
    &#xe7e5;
    +
  • + +
  • + +
    language
    +
    &#xe8e5;
    +
  • + +
  • + +
    trade alert
    +
    &#xe7e6;
    +
  • + +
  • + +
    leftalignment
    +
    &#xe8e6;
    +
  • + +
  • + +
    top sales
    +
    &#xe7e7;
    +
  • + +
  • + +
    extra-inquiries
    +
    &#xe8e7;
    +
  • + +
  • + +
    trading volume
    +
    &#xe7e8;
    +
  • + +
  • + +
    Italic
    +
    &#xe8e8;
    +
  • + +
  • + +
    training
    +
    &#xe7e9;
    +
  • + +
  • + +
    pcm
    +
    &#xe8e9;
    +
  • + +
  • + +
    upload
    +
    &#xe7ea;
    +
  • + +
  • + +
    reducecell
    +
    &#xe8ea;
    +
  • + +
  • + +
    RFQ-word
    +
    &#xe7eb;
    +
  • + +
  • + +
    rightalignment
    +
    &#xe8eb;
    +
  • + +
  • + +
    view larger
    +
    &#xe7ec;
    +
  • + +
  • + +
    pointerleft
    +
    &#xe8ec;
    +
  • + +
  • + +
    viewgallery
    +
    &#xe7ed;
    +
  • + +
  • + +
    subscript
    +
    &#xe8ed;
    +
  • + +
  • + +
    vehivles
    +
    &#xe7ee;
    +
  • + +
  • + +
    square
    +
    &#xe8ee;
    +
  • + +
  • + +
    trust
    +
    &#xe7ef;
    +
  • + +
  • + +
    superscript
    +
    &#xe8ef;
    +
  • + +
  • + +
    warning
    +
    &#xe7f0;
    +
  • + +
  • + +
    tag-subscript
    +
    &#xe8f0;
    +
  • + +
  • + +
    warehouse
    +
    &#xe7f1;
    +
  • + +
  • + +
    单据转换
    +
    &#xe8f1;
    +
  • + +
  • + +
    shoes
    +
    &#xe7f2;
    +
  • + +
  • + +
    Transfer money
    +
    &#xe8f2;
    +
  • + +
  • + +
    video
    +
    &#xe7f3;
    +
  • + +
  • + +
    under-line
    +
    &#xe8f3;
    +
  • + +
  • + +
    viewlist
    +
    &#xe7f4;
    +
  • + +
  • + +
    xiakuangxian
    +
    &#xe8f4;
    +
  • + +
  • + +
    set
    +
    &#xe7f5;
    +
  • + +
  • + +
    收起
    +
    &#xe8f5;
    +
  • + +
  • + +
    store
    +
    &#xe7f6;
    +
  • + +
  • + +
    展开
    +
    &#xe8f6;
    +
  • + +
  • + +
    tool-hardware
    +
    &#xe7f7;
    +
  • + +
  • + +
    通讯录
    +
    &#xe8f7;
    +
  • + +
  • + +
    vs
    +
    &#xe7f8;
    +
  • + +
  • + +
    已关注供应商
    +
    &#xe8f8;
    +
  • + +
  • + +
    toy
    +
    &#xe7f9;
    +
  • + +
  • + +
    购买偏好
    +
    &#xe8f9;
    +
  • + +
  • + +
    sport
    +
    &#xe7fa;
    +
  • + +
  • + +
    Subscribe
    +
    &#xe8fa;
    +
  • + +
  • + +
    credit card
    +
    &#xe7fb;
    +
  • + +
  • + +
    become a gold supplier
    +
    &#xe8fb;
    +
  • + +
  • + +
    contacts
    +
    &#xe7fc;
    +
  • + +
  • + +
    new
    +
    &#xe8fc;
    +
  • + +
  • + +
    checkstand
    +
    &#xe7fd;
    +
  • + +
  • + +
    free
    +
    &#xe8fd;
    +
  • + +
  • + +
    aviation
    +
    &#xe7fe;
    +
  • + +
  • + +
    cad-fill
    +
    &#xe8fe;
    +
  • + +
  • + +
    Daytime mode
    +
    &#xe7ff;
    +
  • + +
  • + +
    robot
    +
    &#xe8ff;
    +
  • + +
  • + +
    infant & mom
    +
    &#xe800;
    +
  • + +
  • + +
    inspection
    +
    &#xe900;
    +
  • + +
  • + +
    discounts
    +
    &#xe801;
    +
  • + +
  • + +
    block
    +
    &#xe901;
    +
  • + +
  • + +
    invoice
    +
    &#xe802;
    +
  • + +
  • + +
    收货icon
    +
    &#xe902;
    +
  • + +
  • + +
    insurance
    +
    &#xe803;
    +
  • + +
  • + +
    night mode
    +
    &#xe804;
    +
  • + +
  • + +
    user center
    +
    &#xe805;
    +
  • + +
  • + +
    unlock
    +
    &#xe806;
    +
  • + +
  • + +
    vip
    +
    &#xe807;
    +
  • + +
  • + +
    wallet
    +
    &#xe808;
    +
  • + +
  • + +
    land transportation
    +
    &#xe809;
    +
  • + +
  • + +
    voice
    +
    &#xe80a;
    +
  • + +
  • + +
    exchange rate
    +
    &#xe80b;
    +
  • + +
  • + +
    contacts-fill
    +
    &#xe80c;
    +
  • + +
  • + +
    add-account
    +
    &#xe80d;
    +
  • + +
  • + +
    2years-fill
    +
    &#xe80e;
    +
  • + +
  • + +
    add-cart-fill
    +
    &#xe80f;
    +
  • + +
  • + +
    add-fill
    +
    &#xe810;
    +
  • + +
  • + +
    all-fill
    +
    &#xe811;
    +
  • + +
  • + +
    ashbin-fill
    +
    &#xe812;
    +
  • + +
  • + +
    calendar-fill
    +
    &#xe813;
    +
  • + +
  • + +
    bad-fill
    +
    &#xe814;
    +
  • + +
  • + +
    bussiness-man-fill
    +
    &#xe815;
    +
  • + +
  • + +
    atm-fill
    +
    &#xe816;
    +
  • + +
  • + +
    cart- full-fill
    +
    &#xe817;
    +
  • + +
  • + +
    cart-Empty-fill
    +
    &#xe818;
    +
  • + +
  • + +
    camera switching-fill
    +
    &#xe819;
    +
  • + +
  • + +
    atm-away-fill
    +
    &#xe81a;
    +
  • + +
  • + +
    certified-supplier-fill
    +
    &#xe81b;
    +
  • + +
  • + +
    calculator-fill
    +
    &#xe81c;
    +
  • + +
  • + +
    clock-fill
    +
    &#xe81d;
    +
  • + +
  • + +
    ali-clould-fill
    +
    &#xe81e;
    +
  • + +
  • + +
    color-fill
    +
    &#xe81f;
    +
  • + +
  • + +
    coupons-fill
    +
    &#xe820;
    +
  • + +
  • + +
    cecurity-protection-fill
    +
    &#xe821;
    +
  • + +
  • + +
    credit-level-fill
    +
    &#xe822;
    +
  • + +
  • + +
    auto
    +
    &#xe6eb;
    +
  • + +
  • + +
    default-template-fill
    +
    &#xe823;
    +
  • + +
  • + +
    all
    +
    &#xe6ef;
    +
  • + +
  • + +
    Currency Converter-fill
    +
    &#xe824;
    +
  • + +
  • + +
    bussiness-man
    +
    &#xe6f0;
    +
  • + +
  • + +
    Customer management-fill
    +
    &#xe825;
    +
  • + +
  • + +
    component
    +
    &#xe6f2;
    +
  • + +
  • + +
    discounts-fill
    +
    &#xe826;
    +
  • + +
  • + +
    code
    +
    &#xe6f3;
    +
  • + +
  • + +
    Daytime mode-fill
    +
    &#xe827;
    +
  • + +
  • + +
    copy
    +
    &#xe6f4;
    +
  • + +
  • + +
    exl-fill
    +
    &#xe828;
    +
  • + +
  • + +
    dollar
    +
    &#xe6f5;
    +
  • + +
  • + +
    cry-fill
    +
    &#xe829;
    +
  • + +
  • + +
    history
    +
    &#xe6f8;
    +
  • + +
  • + +
    email-fill
    +
    &#xe82a;
    +
  • + +
  • + +
    editor
    +
    &#xe6f6;
    +
  • + +
  • + +
    filter-fill
    +
    &#xe82b;
    +
  • + +
  • + +
    data
    +
    &#xe6f9;
    +
  • + +
  • + +
    folder-fill
    +
    &#xe82c;
    +
  • + +
  • + +
    gift
    +
    &#xe6fa;
    +
  • + +
  • + +
    feeds-fill
    +
    &#xe82d;
    +
  • + +
  • + +
    integral
    +
    &#xe6fb;
    +
  • + +
  • + +
    gold-supplie-fill
    +
    &#xe82e;
    +
  • + +
  • + +
    nav-list
    +
    &#xe6fd;
    +
  • + +
  • + +
    form-fill
    +
    &#xe82f;
    +
  • + +
  • + +
    pic
    +
    &#xe6ff;
    +
  • + +
  • + +
    camera-fill
    +
    &#xe830;
    +
  • + +
  • + +
    Not visible
    +
    &#xe6fe;
    +
  • + +
  • + +
    good-fill
    +
    &#xe831;
    +
  • + +
  • + +
    play
    +
    &#xe701;
    +
  • + +
  • + +
    image-text-fill
    +
    &#xe832;
    +
  • + +
  • + +
    rising
    +
    &#xe703;
    +
  • + +
  • + +
    inspection-fill
    +
    &#xe833;
    +
  • + +
  • + +
    QRcode
    +
    &#xe704;
    +
  • + +
  • + +
    hot-fill
    +
    &#xe834;
    +
  • + +
  • + +
    rmb
    +
    &#xe705;
    +
  • + +
  • + +
    company-fill
    +
    &#xe835;
    +
  • + +
  • + +
    similar-product
    +
    &#xe707;
    +
  • + +
  • + +
    discount-fill
    +
    &#xe836;
    +
  • + +
  • + +
    export services
    +
    &#xe702;
    +
  • + +
  • + +
    insurance-fill
    +
    &#xe837;
    +
  • + +
  • + +
    send inquiry
    +
    &#xe70d;
    +
  • + +
  • + +
    inquiry-template-fill
    +
    &#xe838;
    +
  • + +
  • + +
    all-fill
    +
    &#xe718;
    +
  • + +
  • + +
    left button-fill
    +
    &#xe839;
    +
  • + +
  • + +
    favorites-fill
    +
    &#xe721;
    +
  • + +
  • + +
    integral-fill
    +
    &#xe83a;
    +
  • + +
  • + +
    integral-fill
    +
    &#xe726;
    +
  • + +
  • + +
    help
    +
    &#xe83b;
    +
  • + +
  • + +
    namecard-fill
    +
    &#xe72a;
    +
  • + +
  • + +
    listing-content-fill
    +
    &#xe83c;
    +
  • + +
  • + +
    pic-fill
    +
    &#xe72e;
    +
  • + +
  • + +
    logistic-logo-fill
    +
    &#xe83d;
    +
  • + +
  • + +
    play-fill
    +
    &#xe72f;
    +
  • + +
  • + +
    Money management-fill
    +
    &#xe83e;
    +
  • + +
  • + +
    prompt-fill
    +
    &#xe730;
    +
  • + +
  • + +
    manage-order-fill
    +
    &#xe83f;
    +
  • + +
  • + +
    stop-fill
    +
    &#xe738;
    +
  • + +
  • + +
    multi-language-fill
    +
    &#xe840;
    +
  • + +
  • + +
    3column
    +
    &#xe741;
    +
  • + +
  • + +
    logistics-icon-fill
    +
    &#xe841;
    +
  • + +
  • + +
    add-account
    +
    &#xe742;
    +
  • + +
  • + +
    New user zone-fill
    +
    &#xe842;
    +
  • + +
  • + +
    4column
    +
    &#xe743;
    +
  • + +
  • + +
    night mode-fill
    +
    &#xe843;
    +
  • + +
  • + +
    add
    +
    &#xe744;
    +
  • + +
  • + +
    office-supplies-fill
    +
    &#xe844;
    +
  • + +
  • + +
    agriculture
    +
    &#xe745;
    +
  • + +
  • + +
    notice-fill
    +
    &#xe845;
    +
  • + +
  • + +
    2years
    +
    &#xe746;
    +
  • + +
  • + +
    mute
    +
    &#xe846;
    +
  • + +
  • + +
    add-cart
    +
    &#xe747;
    +
  • + +
  • + +
    order-fill
    +
    &#xe847;
    +
  • + +
  • + +
    arrow-right
    +
    &#xe748;
    +
  • + +
  • + +
    password
    +
    &#xe848;
    +
  • + +
  • + +
    arrow-left
    +
    &#xe749;
    +
  • + +
  • + +
    map
    +
    &#xe849;
    +
  • + +
  • + +
    apparel
    +
    &#xe74a;
    +
  • + +
  • + +
    paylater-fill
    +
    &#xe84a;
    +
  • + +
  • + +
    all
    +
    &#xe74b;
    +
  • + +
  • + +
    phone-fill
    +
    &#xe84b;
    +
  • + +
  • + +
    arrow-up
    +
    &#xe74c;
    +
  • + +
  • + +
    online-tracking-fill
    +
    &#xe84c;
    +
  • + +
  • + +
    ascending
    +
    &#xe74d;
    +
  • + +
  • + +
    play-fill
    +
    &#xe84d;
    +
  • + +
  • + +
    ashbin
    +
    &#xe74e;
    +
  • + +
  • + +
    pdf-fill
    +
    &#xe84e;
    +
  • + +
  • + +
    atm
    +
    &#xe74f;
    +
  • + +
  • + +
    phone
    +
    &#xe84f;
    +
  • + +
  • + +
    bad
    +
    &#xe750;
    +
  • + +
  • + +
    pin-fill
    +
    &#xe850;
    +
  • + +
  • + +
    attachent
    +
    &#xe751;
    +
  • + +
  • + +
    product-fill
    +
    &#xe851;
    +
  • + +
  • + +
    browse
    +
    &#xe752;
    +
  • + +
  • + +
    ranking list-fill
    +
    &#xe852;
    +
  • + +
  • + +
    beauty
    +
    &#xe753;
    +
  • + +
  • + +
    reduce-fill
    +
    &#xe853;
    +
  • + +
  • + +
    atm-away
    +
    &#xe754;
    +
  • + +
  • + +
    reeor-fill
    +
    &#xe854;
    +
  • + +
  • + +
    assessed-badge
    +
    &#xe755;
    +
  • + +
  • + +
    pic-fill
    +
    &#xe855;
    +
  • + +
  • + +
    auto
    +
    &#xe756;
    +
  • + +
  • + +
    ranking list
    +
    &#xe856;
    +
  • + +
  • + +
    bags
    +
    &#xe757;
    +
  • + +
  • + +
    product
    +
    &#xe857;
    +
  • + +
  • + +
    calendar
    +
    &#xe758;
    +
  • + +
  • + +
    prompt-fill
    +
    &#xe858;
    +
  • + +
  • + +
    cart- full
    +
    &#xe759;
    +
  • + +
  • + +
    resonse rate-fill
    +
    &#xe859;
    +
  • + +
  • + +
    calculator
    +
    &#xe75a;
    +
  • + +
  • + +
    remind-fill
    +
    &#xe85a;
    +
  • + +
  • + +
    camera switching
    +
    &#xe75b;
    +
  • + +
  • + +
    Right button-fill
    +
    &#xe85b;
    +
  • + +
  • + +
    cecurity-protection
    +
    &#xe75c;
    +
  • + +
  • + +
    RFQ-logo-fill
    +
    &#xe85c;
    +
  • + +
  • + +
    category
    +
    &#xe75d;
    +
  • + +
  • + +
    RFQ-word-fill
    +
    &#xe85d;
    +
  • + +
  • + +
    close
    +
    &#xe75e;
    +
  • + +
  • + +
    search cart-fill
    +
    &#xe85e;
    +
  • + +
  • + +
    certified-supplier
    +
    &#xe75f;
    +
  • + +
  • + +
    sales center-fill
    +
    &#xe85f;
    +
  • + +
  • + +
    cart-Empty
    +
    &#xe760;
    +
  • + +
  • + +
    save-fill
    +
    &#xe860;
    +
  • + +
  • + +
    code
    +
    &#xe761;
    +
  • + +
  • + +
    security-fill
    +
    &#xe861;
    +
  • + +
  • + +
    color
    +
    &#xe762;
    +
  • + +
  • + +
    category products-fill
    +
    &#xe862;
    +
  • + +
  • + +
    conditions
    +
    &#xe763;
    +
  • + +
  • + +
    signboard-fill
    +
    &#xe863;
    +
  • + +
  • + +
    confirm
    +
    &#xe764;
    +
  • + +
  • + +
    service-fill
    +
    &#xe864;
    +
  • + +
  • + +
    company
    +
    &#xe765;
    +
  • + +
  • + +
    shuffling-banner-fill
    +
    &#xe865;
    +
  • + +
  • + +
    ali-clould
    +
    &#xe766;
    +
  • + +
  • + +
    supplier-features-fill
    +
    &#xe866;
    +
  • + +
  • + +
    copy
    +
    &#xe767;
    +
  • + +
  • + +
    store-fill
    +
    &#xe867;
    +
  • + +
  • + +
    credit-level
    +
    &#xe768;
    +
  • + +
  • + +
    smile-fill
    +
    &#xe868;
    +
  • + +
  • + +
    coupons
    +
    &#xe769;
    +
  • + +
  • + +
    success-fill
    +
    &#xe869;
    +
  • + +
  • + +
    connections
    +
    &#xe76a;
    +
  • + +
  • + +
    sound-filling-fill
    +
    &#xe86a;
    +
  • + +
  • + +
    cry
    +
    &#xe76b;
    +
  • + +
  • + +
    sound-Mute
    +
    &#xe86b;
    +
  • + +
  • + +
    costoms-alearance
    +
    &#xe76c;
    +
  • + +
  • + +
    suspended-fill
    +
    &#xe86c;
    +
  • + +
  • + +
    clock
    +
    &#xe76d;
    +
  • + +
  • + +
    tool-fill
    +
    &#xe86d;
    +
  • + +
  • + +
    Currency Converter
    +
    &#xe76e;
    +
  • + +
  • + +
    task-management-fill
    +
    &#xe86e;
    +
  • + +
  • + +
    cut
    +
    &#xe76f;
    +
  • + +
  • + +
    unlock-fill
    +
    &#xe86f;
    +
  • + +
  • + +
    data
    +
    &#xe770;
    +
  • + +
  • + +
    trust-fill
    +
    &#xe870;
    +
  • + +
  • + +
    Customer management
    +
    &#xe771;
    +
  • + +
  • + +
    vip-fill
    +
    &#xe871;
    +
  • + +
  • + +
    descending
    +
    &#xe772;
    +
  • + +
  • + +
    set
    +
    &#xe872;
    +
  • + +
  • + +
    double-arro- right
    +
    &#xe773;
    +
  • + +
  • + +
    top-fill
    +
    &#xe873;
    +
  • + +
  • + +
    customization
    +
    &#xe774;
    +
  • + +
  • + +
    view larger
    +
    &#xe874;
    +
  • + +
  • + +
    double-arrow-left
    +
    &#xe775;
    +
  • + +
  • + +
    voice-fill
    +
    &#xe875;
    +
  • + +
  • + +
    discount
    +
    &#xe776;
    +
  • + +
  • + +
    warning-fill
    +
    &#xe876;
    +
  • + +
  • + +
    download
    +
    &#xe777;
    +
  • + +
  • + +
    warehouse-fill
    +
    &#xe877;
    +
  • + +
  • + +
    dollar
    +
    &#xe778;
    +
  • + +
  • + +
    zip-fill
    +
    &#xe878;
    +
  • + +
  • + +
    default-template
    +
    &#xe779;
    +
  • + +
  • + +
    trade-assurance-fill
    +
    &#xe879;
    +
  • + +
  • + +
    editor
    +
    &#xe77a;
    +
  • + +
  • + +
    vs-fill
    +
    &#xe87a;
    +
  • + +
  • + +
    eletrical
    +
    &#xe77b;
    +
  • + +
  • + +
    video
    +
    &#xe87b;
    +
  • + +
  • + +
    electronics
    +
    &#xe77c;
    +
  • + +
  • + +
    template-fill
    +
    &#xe87c;
    +
  • + +
  • + +
    etrical-equipm
    +
    &#xe77d;
    +
  • + +
  • + +
    wallet
    +
    &#xe87d;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1652585249336') format('woff2'),
+       url('iconfont.woff?t=1652585249336') format('woff'),
+       url('iconfont.ttf?t=1652585249336') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + ellipsis +
    +
    .icon-ellipsis +
    +
  • + +
  • + +
    + training +
    +
    .icon-training1 +
    +
  • + +
  • + +
    + email +
    +
    .icon-email +
    +
  • + +
  • + +
    + packing-labeling-fill +
    +
    .icon-packing-labeling-fill +
    +
  • + +
  • + +
    + falling +
    +
    .icon-falling +
    +
  • + +
  • + +
    + export services-fill +
    +
    .icon-Exportservices-fill +
    +
  • + +
  • + +
    + earth +
    +
    .icon-earth +
    +
  • + +
  • + +
    + brand-fill +
    +
    .icon-brand-fill +
    +
  • + +
  • + +
    + filter +
    +
    .icon-filter +
    +
  • + +
  • + +
    + collection +
    +
    .icon-collection +
    +
  • + +
  • + +
    + furniture +
    +
    .icon-furniture +
    +
  • + +
  • + +
    + consumption-fill +
    +
    .icon-consumption-fill +
    +
  • + +
  • + +
    + folder +
    +
    .icon-folder +
    +
  • + +
  • + +
    + collection-fill +
    +
    .icon-collection-fill +
    +
  • + +
  • + +
    + feeds +
    +
    .icon-feeds +
    +
  • + +
  • + +
    + brand +
    +
    .icon-brand +
    +
  • + +
  • + +
    + history +
    +
    .icon-history1 +
    +
  • + +
  • + +
    + rejected-order-fill +
    +
    .icon-rejected-order-fill +
    +
  • + +
  • + +
    + hardware +
    +
    .icon-hardware +
    +
  • + +
  • + +
    + homepage-ads-fill +
    +
    .icon-homepage-ads-fill +
    +
  • + +
  • + +
    + help +
    +
    .icon-help +
    +
  • + +
  • + +
    + homepage-ads +
    +
    .icon-homepage-ads +
    +
  • + +
  • + +
    + good +
    +
    .icon-good +
    +
  • + +
  • + +
    + scenes-fill +
    +
    .icon-scenes-fill +
    +
  • + +
  • + +
    + Household appliances +
    +
    .icon-Householdappliances +
    +
  • + +
  • + +
    + scenes +
    +
    .icon-scenes +
    +
  • + +
  • + +
    + gift +
    +
    .icon-gift1 +
    +
  • + +
  • + +
    + similar-product-fill +
    +
    .icon-similar-product-fill +
    +
  • + +
  • + +
    + form +
    +
    .icon-form +
    +
  • + +
  • + +
    + topraning-fill +
    +
    .icon-topraning-fill +
    +
  • + +
  • + +
    + image-text +
    +
    .icon-image-text +
    +
  • + +
  • + +
    + consumption +
    +
    .icon-consumption +
    +
  • + +
  • + +
    + hot +
    +
    .icon-hot +
    +
  • + +
  • + +
    + topraning +
    +
    .icon-topraning +
    +
  • + +
  • + +
    + inspection +
    +
    .icon-inspection +
    +
  • + +
  • + +
    + gold-supplier +
    +
    .icon-gold-supplier +
    +
  • + +
  • + +
    + left button +
    +
    .icon-leftbutton +
    +
  • + +
  • + +
    + message center-fill +
    +
    .icon-messagecenter-fill +
    +
  • + +
  • + +
    + jewelry +
    +
    .icon-jewelry +
    +
  • + +
  • + +
    + quick +
    +
    .icon-quick +
    +
  • + +
  • + +
    + ipad +
    +
    .icon-ipad +
    +
  • + +
  • + +
    + writing +
    +
    .icon-writing +
    +
  • + +
  • + +
    + left arrow +
    +
    .icon-leftarrow +
    +
  • + +
  • + +
    + doc-fill +
    +
    .icon-docjpge-fill +
    +
  • + +
  • + +
    + integral +
    +
    .icon-integral1 +
    +
  • + +
  • + +
    + jpge-fill +
    +
    .icon-jpge-fill +
    +
  • + +
  • + +
    + kitchen +
    +
    .icon-kitchen +
    +
  • + +
  • + +
    + gif-fill +
    +
    .icon-gifjpge-fill +
    +
  • + +
  • + +
    + inquiry-template +
    +
    .icon-inquiry-template +
    +
  • + +
  • + +
    + bmp-fill +
    +
    .icon-bmpjpge-fill +
    +
  • + +
  • + +
    + link +
    +
    .icon-link +
    +
  • + +
  • + +
    + tif-fill +
    +
    .icon-tifjpge-fill +
    +
  • + +
  • + +
    + libra +
    +
    .icon-libra +
    +
  • + +
  • + +
    + png-fill +
    +
    .icon-pngjpge-fill +
    +
  • + +
  • + +
    + loading +
    +
    .icon-loading +
    +
  • + +
  • + +
    + home +
    +
    .icon-Hometextile +
    +
  • + +
  • + +
    + listing-content +
    +
    .icon-listing-content +
    +
  • + +
  • + +
    + home +
    +
    .icon-home +
    +
  • + +
  • + +
    + lights +
    +
    .icon-lights +
    +
  • + +
  • + +
    + send inquiry-fill +
    +
    .icon-sendinquiry-fill +
    +
  • + +
  • + +
    + logistics-icon +
    +
    .icon-logistics-icon +
    +
  • + +
  • + +
    + comments-fill +
    +
    .icon-comments-fill +
    +
  • + +
  • + +
    + message center +
    +
    .icon-messagecenter +
    +
  • + +
  • + +
    + account-fill +
    +
    .icon-account-fill +
    +
  • + +
  • + +
    + mobile-phone +
    +
    .icon-mobile-phone +
    +
  • + +
  • + +
    + feed-logo-fill +
    +
    .icon-feed-logo-fill +
    +
  • + +
  • + +
    + manage-order +
    +
    .icon-manage-order +
    +
  • + +
  • + +
    + feed-logo +
    +
    .icon-feed-logo +
    +
  • + +
  • + +
    + move +
    +
    .icon-move +
    +
  • + +
  • + +
    + home-fill +
    +
    .icon-home-fill +
    +
  • + +
  • + +
    + Money management +
    +
    .icon-Moneymanagement +
    +
  • + +
  • + +
    + add-select +
    +
    .icon-add-select +
    +
  • + +
  • + +
    + namecard +
    +
    .icon-namecard +
    +
  • + +
  • + +
    + sami-select +
    +
    .icon-sami-select +
    +
  • + +
  • + +
    + map +
    +
    .icon-map +
    +
  • + +
  • + +
    + camera +
    +
    .icon-camera +
    +
  • + +
  • + +
    + New user zone +
    +
    .icon-Newuserzone +
    +
  • + +
  • + +
    + arrow-down +
    +
    .icon-arrow-down +
    +
  • + +
  • + +
    + multi-language +
    +
    .icon-multi-language +
    +
  • + +
  • + +
    + account +
    +
    .icon-account +
    +
  • + +
  • + +
    + office +
    +
    .icon-office +
    +
  • + +
  • + +
    + comments +
    +
    .icon-comments +
    +
  • + +
  • + +
    + notice +
    +
    .icon-notice +
    +
  • + +
  • + +
    + cart-Empty +
    +
    .icon-cart-Empty1 +
    +
  • + +
  • + +
    + on time shipment +
    +
    .icon-ontimeshipment +
    +
  • + +
  • + +
    + favorites +
    +
    .icon-favorites +
    +
  • + +
  • + +
    + office-supplies +
    +
    .icon-office-supplies +
    +
  • + +
  • + +
    + order +
    +
    .icon-order +
    +
  • + +
  • + +
    + password +
    +
    .icon-password +
    +
  • + +
  • + +
    + search +
    +
    .icon-search +
    +
  • + +
  • + +
    + Not visible +
    +
    .icon-Notvisible1 +
    +
  • + +
  • + +
    + trade-assurance +
    +
    .icon-trade-assurance +
    +
  • + +
  • + +
    + operation +
    +
    .icon-operation +
    +
  • + +
  • + +
    + user center +
    +
    .icon-usercenter1 +
    +
  • + +
  • + +
    + packaging +
    +
    .icon-packaging +
    +
  • + +
  • + +
    + trading data +
    +
    .icon-tradingdata +
    +
  • + +
  • + +
    + online-tracking +
    +
    .icon-online-tracking +
    +
  • + +
  • + +
    + microphone +
    +
    .icon-microphone +
    +
  • + +
  • + +
    + packing-labeling +
    +
    .icon-packing-labeling +
    +
  • + +
  • + +
    + txt +
    +
    .icon-txt +
    +
  • + +
  • + +
    + phone +
    +
    .icon-phone +
    +
  • + +
  • + +
    + xlsx +
    +
    .icon-xlsx +
    +
  • + +
  • + +
    + pic +
    +
    .icon-pic1 +
    +
  • + +
  • + +
    + 办证服务 +
    +
    .icon-banzhengfuwu +
    +
  • + +
  • + +
    + pin +
    +
    .icon-pin +
    +
  • + +
  • + +
    + 仓库 +
    +
    .icon-cangku +
    +
  • + +
  • + +
    + play +
    +
    .icon-play1 +
    +
  • + +
  • + +
    + 代办财税 +
    +
    .icon-daibancaishui +
    +
  • + +
  • + +
    + logistic-logo +
    +
    .icon-logistic-logo +
    +
  • + +
  • + +
    + 集装箱 +
    +
    .icon-jizhuangxiang +
    +
  • + +
  • + +
    + print +
    +
    .icon-print +
    +
  • + +
  • + +
    + 角标 +
    +
    .icon-jiaobiao +
    +
  • + +
  • + +
    + product +
    +
    .icon-product +
    +
  • + +
  • + +
    + 客户盘点 +
    +
    .icon-kehupandian +
    +
  • + +
  • + +
    + machinery +
    +
    .icon-machinery +
    +
  • + +
  • + +
    + 动态 +
    +
    .icon-dongtai +
    +
  • + +
  • + +
    + process +
    +
    .icon-process +
    +
  • + +
  • + +
    + 贷款 +
    +
    .icon-daikuan +
    +
  • + +
  • + +
    + prompt +
    +
    .icon-prompt +
    +
  • + +
  • + +
    + 生意经 +
    +
    .icon-shengyijing +
    +
  • + +
  • + +
    + QRcode +
    +
    .icon-QRcode1 +
    +
  • + +
  • + +
    + 结汇 +
    +
    .icon-jiehui +
    +
  • + +
  • + +
    + reeor +
    +
    .icon-reeor +
    +
  • + +
  • + +
    + 分层配置 +
    +
    .icon-fencengpeizhi +
    +
  • + +
  • + +
    + reduce +
    +
    .icon-reduce +
    +
  • + +
  • + +
    + 申请记录 +
    +
    .icon-shenqingjilu +
    +
  • + +
  • + +
    + Non-staple food +
    +
    .icon-Non-staplefood +
    +
  • + +
  • + +
    + 上传备案单证 +
    +
    .icon-shangchuanbeiandanzheng +
    +
  • + +
  • + +
    + rejected-order +
    +
    .icon-rejected-order +
    +
  • + +
  • + +
    + 上传 +
    +
    .icon-shangchuan +
    +
  • + +
  • + +
    + resonse rate +
    +
    .icon-resonserate +
    +
  • + +
  • + +
    + 客户权益 +
    +
    .icon-kehuquanyi +
    +
  • + +
  • + +
    + remind +
    +
    .icon-remind +
    +
  • + +
  • + +
    + 缩小 +
    +
    .icon-suoxiao +
    +
  • + +
  • + +
    + response time +
    +
    .icon-responsetime +
    +
  • + +
  • + +
    + 权益配置 +
    +
    .icon-quanyipeizhi +
    +
  • + +
  • + +
    + return +
    +
    .icon-return +
    +
  • + +
  • + +
    + 双审 +
    +
    .icon-shuangshen +
    +
  • + +
  • + +
    + paylater +
    +
    .icon-paylater +
    +
  • + +
  • + +
    + 通关 +
    +
    .icon-tongguan +
    +
  • + +
  • + +
    + rising +
    +
    .icon-rising1 +
    +
  • + +
  • + +
    + 退税 +
    +
    .icon-tuishui +
    +
  • + +
  • + +
    + Right arrow +
    +
    .icon-Rightarrow +
    +
  • + +
  • + +
    + 通关数据 +
    +
    .icon-tongguanshuju +
    +
  • + +
  • + +
    + rmb +
    +
    .icon-rmb1 +
    +
  • + +
  • + +
    + 快递物流 +
    +
    .icon-kuaidiwuliu +
    +
  • + +
  • + +
    + RFQ-logo +
    +
    .icon-RFQ-logo +
    +
  • + +
  • + +
    + 物流产品 +
    +
    .icon-wuliuchanpin +
    +
  • + +
  • + +
    + save +
    +
    .icon-save +
    +
  • + +
  • + +
    + 外汇数据 +
    +
    .icon-waihuishuju +
    +
  • + +
  • + +
    + scanning +
    +
    .icon-scanning +
    +
  • + +
  • + +
    + 信息bar_手机 +
    +
    .icon-xinxibar_shouji +
    +
  • + +
  • + +
    + security +
    +
    .icon-security +
    +
  • + +
  • + +
    + 新外综业务 +
    +
    .icon-xinwaizongyewu +
    +
  • + +
  • + +
    + sales center +
    +
    .icon-salescenter +
    +
  • + +
  • + +
    + 物流订单 +
    +
    .icon-wuliudingdan +
    +
  • + +
  • + +
    + seleted +
    +
    .icon-seleted +
    +
  • + +
  • + +
    + 中间人 +
    +
    .icon-zhongjianren +
    +
  • + +
  • + +
    + search cart +
    +
    .icon-searchcart +
    +
  • + +
  • + +
    + 信息bar_账户 +
    +
    .icon-xinxibar_zhanghu +
    +
  • + +
  • + +
    + raw +
    +
    .icon-raw +
    +
  • + +
  • + +
    + 一达通 +
    +
    .icon-yidatong +
    +
  • + +
  • + +
    + service +
    +
    .icon-service +
    +
  • + +
  • + +
    + 专业权威 +
    +
    .icon-zhuanyequanwei +
    +
  • + +
  • + +
    + share +
    +
    .icon-share +
    +
  • + +
  • + +
    + 账户操作 +
    +
    .icon-zhanghucaozuo +
    +
  • + +
  • + +
    + signboard +
    +
    .icon-signboard +
    +
  • + +
  • + +
    + 旋转90度 +
    +
    .icon-xuanzhuandu +
    +
  • + +
  • + +
    + shuffling-banner +
    +
    .icon-shuffling-banner +
    +
  • + +
  • + +
    + 退税融资 +
    +
    .icon-tuishuirongzi +
    +
  • + +
  • + +
    + Right button +
    +
    .icon-Rightbutton +
    +
  • + +
  • + +
    + Add Products +
    +
    .icon-AddProducts +
    +
  • + +
  • + +
    + sorting +
    +
    .icon-sorting +
    +
  • + +
  • + +
    + 自营业务 +
    +
    .icon-ziyingyewu +
    +
  • + +
  • + +
    + sound-Mute +
    +
    .icon-sound-Mute +
    +
  • + +
  • + +
    + addcell +
    +
    .icon-addcell +
    +
  • + +
  • + +
    + category products +
    +
    .icon-Similarproducts +
    +
  • + +
  • + +
    + background-color +
    +
    .icon-background-color +
    +
  • + +
  • + +
    + sound-filling +
    +
    .icon-sound-filling +
    +
  • + +
  • + +
    + cascades +
    +
    .icon-cascades +
    +
  • + +
  • + +
    + suggest +
    +
    .icon-suggest +
    +
  • + +
  • + +
    + beijing +
    +
    .icon-beijing +
    +
  • + +
  • + +
    + stop +
    +
    .icon-stop +
    +
  • + +
  • + +
    + bold +
    +
    .icon-bold +
    +
  • + +
  • + +
    + success +
    +
    .icon-success +
    +
  • + +
  • + +
    + 资金 +
    +
    .icon-zijin +
    +
  • + +
  • + +
    + supplier-features +
    +
    .icon-supplier-features +
    +
  • + +
  • + +
    + eraser +
    +
    .icon-eraser +
    +
  • + +
  • + +
    + switch +
    +
    .icon-switch +
    +
  • + +
  • + +
    + centeralignment +
    +
    .icon-centeralignment +
    +
  • + +
  • + +
    + survey +
    +
    .icon-survey +
    +
  • + +
  • + +
    + click +
    +
    .icon-click +
    +
  • + +
  • + +
    + template +
    +
    .icon-template +
    +
  • + +
  • + +
    + asp结算 +
    +
    .icon-aspjiesuan +
    +
  • + +
  • + +
    + text +
    +
    .icon-text +
    +
  • + +
  • + +
    + flag +
    +
    .icon-flag +
    +
  • + +
  • + +
    + suspended +
    +
    .icon-suspended +
    +
  • + +
  • + +
    + falg-fill +
    +
    .icon-falg-fill +
    +
  • + +
  • + +
    + task-management +
    +
    .icon-task-management +
    +
  • + +
  • + +
    + Fee +
    +
    .icon-Fee +
    +
  • + +
  • + +
    + tool +
    +
    .icon-tool +
    +
  • + +
  • + +
    + filling +
    +
    .icon-filling +
    +
  • + +
  • + +
    + top +
    +
    .icon-Top +
    +
  • + +
  • + +
    + Foreign currency +
    +
    .icon-Foreigncurrency +
    +
  • + +
  • + +
    + smile +
    +
    .icon-smile +
    +
  • + +
  • + +
    + guanliyuan +
    +
    .icon-guanliyuan +
    +
  • + +
  • + +
    + textile-products +
    +
    .icon-textile-products +
    +
  • + +
  • + +
    + language +
    +
    .icon-language +
    +
  • + +
  • + +
    + trade alert +
    +
    .icon-tradealert +
    +
  • + +
  • + +
    + leftalignment +
    +
    .icon-leftalignment +
    +
  • + +
  • + +
    + top sales +
    +
    .icon-topsales +
    +
  • + +
  • + +
    + extra-inquiries +
    +
    .icon-extra-inquiries +
    +
  • + +
  • + +
    + trading volume +
    +
    .icon-tradingvolume +
    +
  • + +
  • + +
    + Italic +
    +
    .icon-Italic +
    +
  • + +
  • + +
    + training +
    +
    .icon-training +
    +
  • + +
  • + +
    + pcm +
    +
    .icon-pcm +
    +
  • + +
  • + +
    + upload +
    +
    .icon-upload +
    +
  • + +
  • + +
    + reducecell +
    +
    .icon-reducecell +
    +
  • + +
  • + +
    + RFQ-word +
    +
    .icon-RFQ-word +
    +
  • + +
  • + +
    + rightalignment +
    +
    .icon-rightalignment +
    +
  • + +
  • + +
    + view larger +
    +
    .icon-viewlarger +
    +
  • + +
  • + +
    + pointerleft +
    +
    .icon-pointerleft +
    +
  • + +
  • + +
    + viewgallery +
    +
    .icon-viewgallery +
    +
  • + +
  • + +
    + subscript +
    +
    .icon-subscript +
    +
  • + +
  • + +
    + vehivles +
    +
    .icon-vehivles +
    +
  • + +
  • + +
    + square +
    +
    .icon-square +
    +
  • + +
  • + +
    + trust +
    +
    .icon-trust +
    +
  • + +
  • + +
    + superscript +
    +
    .icon-superscript +
    +
  • + +
  • + +
    + warning +
    +
    .icon-warning +
    +
  • + +
  • + +
    + tag-subscript +
    +
    .icon-tag-subscript +
    +
  • + +
  • + +
    + warehouse +
    +
    .icon-warehouse +
    +
  • + +
  • + +
    + 单据转换 +
    +
    .icon-danjuzhuanhuan +
    +
  • + +
  • + +
    + shoes +
    +
    .icon-shoes +
    +
  • + +
  • + +
    + Transfer money +
    +
    .icon-Transfermoney +
    +
  • + +
  • + +
    + video +
    +
    .icon-video +
    +
  • + +
  • + +
    + under-line +
    +
    .icon-under-line +
    +
  • + +
  • + +
    + viewlist +
    +
    .icon-viewlist +
    +
  • + +
  • + +
    + xiakuangxian +
    +
    .icon-xiakuangxian +
    +
  • + +
  • + +
    + set +
    +
    .icon-set +
    +
  • + +
  • + +
    + 收起 +
    +
    .icon-shouqi +
    +
  • + +
  • + +
    + store +
    +
    .icon-store +
    +
  • + +
  • + +
    + 展开 +
    +
    .icon-zhankai +
    +
  • + +
  • + +
    + tool-hardware +
    +
    .icon-tool-hardware +
    +
  • + +
  • + +
    + 通讯录 +
    +
    .icon-tongxunlu +
    +
  • + +
  • + +
    + vs +
    +
    .icon-vs +
    +
  • + +
  • + +
    + 已关注供应商 +
    +
    .icon-yiguanzhugongyingshang +
    +
  • + +
  • + +
    + toy +
    +
    .icon-toy +
    +
  • + +
  • + +
    + 购买偏好 +
    +
    .icon-goumaipianhao +
    +
  • + +
  • + +
    + sport +
    +
    .icon-sport +
    +
  • + +
  • + +
    + Subscribe +
    +
    .icon-Subscribe +
    +
  • + +
  • + +
    + credit card +
    +
    .icon-creditcard +
    +
  • + +
  • + +
    + become a gold supplier +
    +
    .icon-becomeagoldsupplier +
    +
  • + +
  • + +
    + contacts +
    +
    .icon-contacts +
    +
  • + +
  • + +
    + new +
    +
    .icon-new +
    +
  • + +
  • + +
    + checkstand +
    +
    .icon-checkstand +
    +
  • + +
  • + +
    + free +
    +
    .icon-free +
    +
  • + +
  • + +
    + aviation +
    +
    .icon-aviation +
    +
  • + +
  • + +
    + cad-fill +
    +
    .icon-cad-fill +
    +
  • + +
  • + +
    + Daytime mode +
    +
    .icon-Daytimemode +
    +
  • + +
  • + +
    + robot +
    +
    .icon-robot +
    +
  • + +
  • + +
    + infant & mom +
    +
    .icon-infantmom +
    +
  • + +
  • + +
    + inspection +
    +
    .icon-inspection1 +
    +
  • + +
  • + +
    + discounts +
    +
    .icon-discounts +
    +
  • + +
  • + +
    + block +
    +
    .icon-block +
    +
  • + +
  • + +
    + invoice +
    +
    .icon-invoice +
    +
  • + +
  • + +
    + 收货icon +
    +
    .icon-shouhuoicon +
    +
  • + +
  • + +
    + insurance +
    +
    .icon-insurance +
    +
  • + +
  • + +
    + night mode +
    +
    .icon-nightmode +
    +
  • + +
  • + +
    + user center +
    +
    .icon-usercenter +
    +
  • + +
  • + +
    + unlock +
    +
    .icon-unlock +
    +
  • + +
  • + +
    + vip +
    +
    .icon-vip +
    +
  • + +
  • + +
    + wallet +
    +
    .icon-wallet +
    +
  • + +
  • + +
    + land transportation +
    +
    .icon-landtransportation +
    +
  • + +
  • + +
    + voice +
    +
    .icon-voice +
    +
  • + +
  • + +
    + exchange rate +
    +
    .icon-exchangerate +
    +
  • + +
  • + +
    + contacts-fill +
    +
    .icon-contacts-fill +
    +
  • + +
  • + +
    + add-account +
    +
    .icon-add-account1 +
    +
  • + +
  • + +
    + 2years-fill +
    +
    .icon-years-fill +
    +
  • + +
  • + +
    + add-cart-fill +
    +
    .icon-add-cart-fill +
    +
  • + +
  • + +
    + add-fill +
    +
    .icon-add-fill +
    +
  • + +
  • + +
    + all-fill +
    +
    .icon-all-fill1 +
    +
  • + +
  • + +
    + ashbin-fill +
    +
    .icon-ashbin-fill +
    +
  • + +
  • + +
    + calendar-fill +
    +
    .icon-calendar-fill +
    +
  • + +
  • + +
    + bad-fill +
    +
    .icon-bad-fill +
    +
  • + +
  • + +
    + bussiness-man-fill +
    +
    .icon-bussiness-man-fill +
    +
  • + +
  • + +
    + atm-fill +
    +
    .icon-atm-fill +
    +
  • + +
  • + +
    + cart- full-fill +
    +
    .icon-cart-full-fill +
    +
  • + +
  • + +
    + cart-Empty-fill +
    +
    .icon-cart-Empty-fill +
    +
  • + +
  • + +
    + camera switching-fill +
    +
    .icon-cameraswitching-fill +
    +
  • + +
  • + +
    + atm-away-fill +
    +
    .icon-atm-away-fill +
    +
  • + +
  • + +
    + certified-supplier-fill +
    +
    .icon-certified-supplier-fill +
    +
  • + +
  • + +
    + calculator-fill +
    +
    .icon-calculator-fill +
    +
  • + +
  • + +
    + clock-fill +
    +
    .icon-clock-fill +
    +
  • + +
  • + +
    + ali-clould-fill +
    +
    .icon-ali-clould-fill +
    +
  • + +
  • + +
    + color-fill +
    +
    .icon-color-fill +
    +
  • + +
  • + +
    + coupons-fill +
    +
    .icon-coupons-fill +
    +
  • + +
  • + +
    + cecurity-protection-fill +
    +
    .icon-cecurity-protection-fill +
    +
  • + +
  • + +
    + credit-level-fill +
    +
    .icon-credit-level-fill +
    +
  • + +
  • + +
    + auto +
    +
    .icon-auto +
    +
  • + +
  • + +
    + default-template-fill +
    +
    .icon-default-template-fill +
    +
  • + +
  • + +
    + all +
    +
    .icon-all +
    +
  • + +
  • + +
    + Currency Converter-fill +
    +
    .icon-CurrencyConverter-fill +
    +
  • + +
  • + +
    + bussiness-man +
    +
    .icon-bussiness-man +
    +
  • + +
  • + +
    + Customer management-fill +
    +
    .icon-Customermanagement-fill +
    +
  • + +
  • + +
    + component +
    +
    .icon-component +
    +
  • + +
  • + +
    + discounts-fill +
    +
    .icon-discounts-fill +
    +
  • + +
  • + +
    + code +
    +
    .icon-code +
    +
  • + +
  • + +
    + Daytime mode-fill +
    +
    .icon-Daytimemode-fill +
    +
  • + +
  • + +
    + copy +
    +
    .icon-copy +
    +
  • + +
  • + +
    + exl-fill +
    +
    .icon-exl-fill +
    +
  • + +
  • + +
    + dollar +
    +
    .icon-dollar +
    +
  • + +
  • + +
    + cry-fill +
    +
    .icon-cry-fill +
    +
  • + +
  • + +
    + history +
    +
    .icon-history +
    +
  • + +
  • + +
    + email-fill +
    +
    .icon-email-fill +
    +
  • + +
  • + +
    + editor +
    +
    .icon-editor +
    +
  • + +
  • + +
    + filter-fill +
    +
    .icon-filter-fill +
    +
  • + +
  • + +
    + data +
    +
    .icon-data +
    +
  • + +
  • + +
    + folder-fill +
    +
    .icon-folder-fill +
    +
  • + +
  • + +
    + gift +
    +
    .icon-gift +
    +
  • + +
  • + +
    + feeds-fill +
    +
    .icon-feeds-fill +
    +
  • + +
  • + +
    + integral +
    +
    .icon-integral +
    +
  • + +
  • + +
    + gold-supplie-fill +
    +
    .icon-gold-supplie-fill +
    +
  • + +
  • + +
    + nav-list +
    +
    .icon-nav-list +
    +
  • + +
  • + +
    + form-fill +
    +
    .icon-form-fill +
    +
  • + +
  • + +
    + pic +
    +
    .icon-pic +
    +
  • + +
  • + +
    + camera-fill +
    +
    .icon-camera-fill +
    +
  • + +
  • + +
    + Not visible +
    +
    .icon-Notvisible +
    +
  • + +
  • + +
    + good-fill +
    +
    .icon-good-fill +
    +
  • + +
  • + +
    + play +
    +
    .icon-play +
    +
  • + +
  • + +
    + image-text-fill +
    +
    .icon-image-text-fill +
    +
  • + +
  • + +
    + rising +
    +
    .icon-rising +
    +
  • + +
  • + +
    + inspection-fill +
    +
    .icon-inspection-fill +
    +
  • + +
  • + +
    + QRcode +
    +
    .icon-QRcode +
    +
  • + +
  • + +
    + hot-fill +
    +
    .icon-hot-fill +
    +
  • + +
  • + +
    + rmb +
    +
    .icon-rmb +
    +
  • + +
  • + +
    + company-fill +
    +
    .icon-company-fill +
    +
  • + +
  • + +
    + similar-product +
    +
    .icon-similar-product +
    +
  • + +
  • + +
    + discount-fill +
    +
    .icon-discount-fill +
    +
  • + +
  • + +
    + export services +
    +
    .icon-Exportservices +
    +
  • + +
  • + +
    + insurance-fill +
    +
    .icon-insurance-fill +
    +
  • + +
  • + +
    + send inquiry +
    +
    .icon-sendinquiry +
    +
  • + +
  • + +
    + inquiry-template-fill +
    +
    .icon-inquiry-template-fill +
    +
  • + +
  • + +
    + all-fill +
    +
    .icon-all-fill +
    +
  • + +
  • + +
    + left button-fill +
    +
    .icon-leftbutton-fill +
    +
  • + +
  • + +
    + favorites-fill +
    +
    .icon-favorites-fill +
    +
  • + +
  • + +
    + integral-fill +
    +
    .icon-integral-fill1 +
    +
  • + +
  • + +
    + integral-fill +
    +
    .icon-integral-fill +
    +
  • + +
  • + +
    + help +
    +
    .icon-help1 +
    +
  • + +
  • + +
    + namecard-fill +
    +
    .icon-namecard-fill +
    +
  • + +
  • + +
    + listing-content-fill +
    +
    .icon-listing-content-fill +
    +
  • + +
  • + +
    + pic-fill +
    +
    .icon-pic-fill +
    +
  • + +
  • + +
    + logistic-logo-fill +
    +
    .icon-logistic-logo-fill +
    +
  • + +
  • + +
    + play-fill +
    +
    .icon-play-fill +
    +
  • + +
  • + +
    + Money management-fill +
    +
    .icon-Moneymanagement-fill +
    +
  • + +
  • + +
    + prompt-fill +
    +
    .icon-prompt-fill +
    +
  • + +
  • + +
    + manage-order-fill +
    +
    .icon-manage-order-fill +
    +
  • + +
  • + +
    + stop-fill +
    +
    .icon-stop-fill +
    +
  • + +
  • + +
    + multi-language-fill +
    +
    .icon-multi-language-fill +
    +
  • + +
  • + +
    + 3column +
    +
    .icon-column +
    +
  • + +
  • + +
    + logistics-icon-fill +
    +
    .icon-logistics-icon-fill +
    +
  • + +
  • + +
    + add-account +
    +
    .icon-add-account +
    +
  • + +
  • + +
    + New user zone-fill +
    +
    .icon-Newuserzone-fill +
    +
  • + +
  • + +
    + 4column +
    +
    .icon-column1 +
    +
  • + +
  • + +
    + night mode-fill +
    +
    .icon-nightmode-fill +
    +
  • + +
  • + +
    + add +
    +
    .icon-add +
    +
  • + +
  • + +
    + office-supplies-fill +
    +
    .icon-office-supplies-fill +
    +
  • + +
  • + +
    + agriculture +
    +
    .icon-agriculture +
    +
  • + +
  • + +
    + notice-fill +
    +
    .icon-notice-fill +
    +
  • + +
  • + +
    + 2years +
    +
    .icon-years +
    +
  • + +
  • + +
    + mute +
    +
    .icon-mute +
    +
  • + +
  • + +
    + add-cart +
    +
    .icon-add-cart +
    +
  • + +
  • + +
    + order-fill +
    +
    .icon-order-fill +
    +
  • + +
  • + +
    + arrow-right +
    +
    .icon-arrow-right +
    +
  • + +
  • + +
    + password +
    +
    .icon-password1 +
    +
  • + +
  • + +
    + arrow-left +
    +
    .icon-arrow-left +
    +
  • + +
  • + +
    + map +
    +
    .icon-map1 +
    +
  • + +
  • + +
    + apparel +
    +
    .icon-apparel +
    +
  • + +
  • + +
    + paylater-fill +
    +
    .icon-paylater-fill +
    +
  • + +
  • + +
    + all +
    +
    .icon-all1 +
    +
  • + +
  • + +
    + phone-fill +
    +
    .icon-phone-fill +
    +
  • + +
  • + +
    + arrow-up +
    +
    .icon-arrow-up +
    +
  • + +
  • + +
    + online-tracking-fill +
    +
    .icon-online-tracking-fill +
    +
  • + +
  • + +
    + ascending +
    +
    .icon-ascending +
    +
  • + +
  • + +
    + play-fill +
    +
    .icon-play-fill1 +
    +
  • + +
  • + +
    + ashbin +
    +
    .icon-ashbin +
    +
  • + +
  • + +
    + pdf-fill +
    +
    .icon-pdf-fill +
    +
  • + +
  • + +
    + atm +
    +
    .icon-atm +
    +
  • + +
  • + +
    + phone +
    +
    .icon-phone1 +
    +
  • + +
  • + +
    + bad +
    +
    .icon-bad +
    +
  • + +
  • + +
    + pin-fill +
    +
    .icon-pin-fill +
    +
  • + +
  • + +
    + attachent +
    +
    .icon-attachent +
    +
  • + +
  • + +
    + product-fill +
    +
    .icon-product-fill +
    +
  • + +
  • + +
    + browse +
    +
    .icon-browse +
    +
  • + +
  • + +
    + ranking list-fill +
    +
    .icon-rankinglist-fill +
    +
  • + +
  • + +
    + beauty +
    +
    .icon-beauty +
    +
  • + +
  • + +
    + reduce-fill +
    +
    .icon-reduce-fill +
    +
  • + +
  • + +
    + atm-away +
    +
    .icon-atm-away +
    +
  • + +
  • + +
    + reeor-fill +
    +
    .icon-reeor-fill +
    +
  • + +
  • + +
    + assessed-badge +
    +
    .icon-assessed-badge +
    +
  • + +
  • + +
    + pic-fill +
    +
    .icon-pic-fill1 +
    +
  • + +
  • + +
    + auto +
    +
    .icon-auto1 +
    +
  • + +
  • + +
    + ranking list +
    +
    .icon-rankinglist +
    +
  • + +
  • + +
    + bags +
    +
    .icon-bags +
    +
  • + +
  • + +
    + product +
    +
    .icon-product1 +
    +
  • + +
  • + +
    + calendar +
    +
    .icon-calendar +
    +
  • + +
  • + +
    + prompt-fill +
    +
    .icon-prompt-fill1 +
    +
  • + +
  • + +
    + cart- full +
    +
    .icon-cart-full +
    +
  • + +
  • + +
    + resonse rate-fill +
    +
    .icon-resonserate-fill +
    +
  • + +
  • + +
    + calculator +
    +
    .icon-calculator +
    +
  • + +
  • + +
    + remind-fill +
    +
    .icon-remind-fill +
    +
  • + +
  • + +
    + camera switching +
    +
    .icon-cameraswitching +
    +
  • + +
  • + +
    + Right button-fill +
    +
    .icon-Rightbutton-fill +
    +
  • + +
  • + +
    + cecurity-protection +
    +
    .icon-cecurity-protection +
    +
  • + +
  • + +
    + RFQ-logo-fill +
    +
    .icon-RFQ-logo-fill +
    +
  • + +
  • + +
    + category +
    +
    .icon-category +
    +
  • + +
  • + +
    + RFQ-word-fill +
    +
    .icon-RFQ-word-fill +
    +
  • + +
  • + +
    + close +
    +
    .icon-close +
    +
  • + +
  • + +
    + search cart-fill +
    +
    .icon-searchcart-fill +
    +
  • + +
  • + +
    + certified-supplier +
    +
    .icon-certified-supplier +
    +
  • + +
  • + +
    + sales center-fill +
    +
    .icon-salescenter-fill +
    +
  • + +
  • + +
    + cart-Empty +
    +
    .icon-cart-Empty +
    +
  • + +
  • + +
    + save-fill +
    +
    .icon-save-fill +
    +
  • + +
  • + +
    + code +
    +
    .icon-code1 +
    +
  • + +
  • + +
    + security-fill +
    +
    .icon-security-fill +
    +
  • + +
  • + +
    + color +
    +
    .icon-color +
    +
  • + +
  • + +
    + category products-fill +
    +
    .icon-Similarproducts-fill +
    +
  • + +
  • + +
    + conditions +
    +
    .icon-conditions +
    +
  • + +
  • + +
    + signboard-fill +
    +
    .icon-signboard-fill +
    +
  • + +
  • + +
    + confirm +
    +
    .icon-confirm +
    +
  • + +
  • + +
    + service-fill +
    +
    .icon-service-fill +
    +
  • + +
  • + +
    + company +
    +
    .icon-company +
    +
  • + +
  • + +
    + shuffling-banner-fill +
    +
    .icon-shuffling-banner-fill +
    +
  • + +
  • + +
    + ali-clould +
    +
    .icon-ali-clould +
    +
  • + +
  • + +
    + supplier-features-fill +
    +
    .icon-supplier-features-fill +
    +
  • + +
  • + +
    + copy +
    +
    .icon-copy1 +
    +
  • + +
  • + +
    + store-fill +
    +
    .icon-store-fill +
    +
  • + +
  • + +
    + credit-level +
    +
    .icon-credit-level +
    +
  • + +
  • + +
    + smile-fill +
    +
    .icon-smile-fill +
    +
  • + +
  • + +
    + coupons +
    +
    .icon-coupons +
    +
  • + +
  • + +
    + success-fill +
    +
    .icon-success-fill +
    +
  • + +
  • + +
    + connections +
    +
    .icon-connections +
    +
  • + +
  • + +
    + sound-filling-fill +
    +
    .icon-sound-filling-fill +
    +
  • + +
  • + +
    + cry +
    +
    .icon-cry +
    +
  • + +
  • + +
    + sound-Mute +
    +
    .icon-sound-Mute1 +
    +
  • + +
  • + +
    + costoms-alearance +
    +
    .icon-costoms-alearance +
    +
  • + +
  • + +
    + suspended-fill +
    +
    .icon-suspended-fill +
    +
  • + +
  • + +
    + clock +
    +
    .icon-clock +
    +
  • + +
  • + +
    + tool-fill +
    +
    .icon-tool-fill +
    +
  • + +
  • + +
    + Currency Converter +
    +
    .icon-CurrencyConverter +
    +
  • + +
  • + +
    + task-management-fill +
    +
    .icon-task-management-fill +
    +
  • + +
  • + +
    + cut +
    +
    .icon-cut +
    +
  • + +
  • + +
    + unlock-fill +
    +
    .icon-unlock-fill +
    +
  • + +
  • + +
    + data +
    +
    .icon-data1 +
    +
  • + +
  • + +
    + trust-fill +
    +
    .icon-trust-fill +
    +
  • + +
  • + +
    + Customer management +
    +
    .icon-Customermanagement +
    +
  • + +
  • + +
    + vip-fill +
    +
    .icon-vip-fill +
    +
  • + +
  • + +
    + descending +
    +
    .icon-descending +
    +
  • + +
  • + +
    + set +
    +
    .icon-set1 +
    +
  • + +
  • + +
    + double-arro- right +
    +
    .icon-double-arro-right +
    +
  • + +
  • + +
    + top-fill +
    +
    .icon-Top-fill +
    +
  • + +
  • + +
    + customization +
    +
    .icon-customization +
    +
  • + +
  • + +
    + view larger +
    +
    .icon-viewlarger1 +
    +
  • + +
  • + +
    + double-arrow-left +
    +
    .icon-double-arrow-left +
    +
  • + +
  • + +
    + voice-fill +
    +
    .icon-voice-fill +
    +
  • + +
  • + +
    + discount +
    +
    .icon-discount +
    +
  • + +
  • + +
    + warning-fill +
    +
    .icon-warning-fill +
    +
  • + +
  • + +
    + download +
    +
    .icon-download +
    +
  • + +
  • + +
    + warehouse-fill +
    +
    .icon-warehouse-fill +
    +
  • + +
  • + +
    + dollar +
    +
    .icon-dollar1 +
    +
  • + +
  • + +
    + zip-fill +
    +
    .icon-zip-fill +
    +
  • + +
  • + +
    + default-template +
    +
    .icon-default-template +
    +
  • + +
  • + +
    + trade-assurance-fill +
    +
    .icon-trade-assurance-fill +
    +
  • + +
  • + +
    + editor +
    +
    .icon-editor1 +
    +
  • + +
  • + +
    + vs-fill +
    +
    .icon-vs-fill +
    +
  • + +
  • + +
    + eletrical +
    +
    .icon-eletrical +
    +
  • + +
  • + +
    + video +
    +
    .icon-video1 +
    +
  • + +
  • + +
    + electronics +
    +
    .icon-electronics +
    +
  • + +
  • + +
    + template-fill +
    +
    .icon-template-fill +
    +
  • + +
  • + +
    + etrical-equipm +
    +
    .icon-etrical-equipm +
    +
  • + +
  • + +
    + wallet +
    +
    .icon-wallet1 +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    ellipsis
    +
    #icon-ellipsis
    +
  • + +
  • + +
    training
    +
    #icon-training1
    +
  • + +
  • + +
    email
    +
    #icon-email
    +
  • + +
  • + +
    packing-labeling-fill
    +
    #icon-packing-labeling-fill
    +
  • + +
  • + +
    falling
    +
    #icon-falling
    +
  • + +
  • + +
    export services-fill
    +
    #icon-Exportservices-fill
    +
  • + +
  • + +
    earth
    +
    #icon-earth
    +
  • + +
  • + +
    brand-fill
    +
    #icon-brand-fill
    +
  • + +
  • + +
    filter
    +
    #icon-filter
    +
  • + +
  • + +
    collection
    +
    #icon-collection
    +
  • + +
  • + +
    furniture
    +
    #icon-furniture
    +
  • + +
  • + +
    consumption-fill
    +
    #icon-consumption-fill
    +
  • + +
  • + +
    folder
    +
    #icon-folder
    +
  • + +
  • + +
    collection-fill
    +
    #icon-collection-fill
    +
  • + +
  • + +
    feeds
    +
    #icon-feeds
    +
  • + +
  • + +
    brand
    +
    #icon-brand
    +
  • + +
  • + +
    history
    +
    #icon-history1
    +
  • + +
  • + +
    rejected-order-fill
    +
    #icon-rejected-order-fill
    +
  • + +
  • + +
    hardware
    +
    #icon-hardware
    +
  • + +
  • + +
    homepage-ads-fill
    +
    #icon-homepage-ads-fill
    +
  • + +
  • + +
    help
    +
    #icon-help
    +
  • + +
  • + +
    homepage-ads
    +
    #icon-homepage-ads
    +
  • + +
  • + +
    good
    +
    #icon-good
    +
  • + +
  • + +
    scenes-fill
    +
    #icon-scenes-fill
    +
  • + +
  • + +
    Household appliances
    +
    #icon-Householdappliances
    +
  • + +
  • + +
    scenes
    +
    #icon-scenes
    +
  • + +
  • + +
    gift
    +
    #icon-gift1
    +
  • + +
  • + +
    similar-product-fill
    +
    #icon-similar-product-fill
    +
  • + +
  • + +
    form
    +
    #icon-form
    +
  • + +
  • + +
    topraning-fill
    +
    #icon-topraning-fill
    +
  • + +
  • + +
    image-text
    +
    #icon-image-text
    +
  • + +
  • + +
    consumption
    +
    #icon-consumption
    +
  • + +
  • + +
    hot
    +
    #icon-hot
    +
  • + +
  • + +
    topraning
    +
    #icon-topraning
    +
  • + +
  • + +
    inspection
    +
    #icon-inspection
    +
  • + +
  • + +
    gold-supplier
    +
    #icon-gold-supplier
    +
  • + +
  • + +
    left button
    +
    #icon-leftbutton
    +
  • + +
  • + +
    message center-fill
    +
    #icon-messagecenter-fill
    +
  • + +
  • + +
    jewelry
    +
    #icon-jewelry
    +
  • + +
  • + +
    quick
    +
    #icon-quick
    +
  • + +
  • + +
    ipad
    +
    #icon-ipad
    +
  • + +
  • + +
    writing
    +
    #icon-writing
    +
  • + +
  • + +
    left arrow
    +
    #icon-leftarrow
    +
  • + +
  • + +
    doc-fill
    +
    #icon-docjpge-fill
    +
  • + +
  • + +
    integral
    +
    #icon-integral1
    +
  • + +
  • + +
    jpge-fill
    +
    #icon-jpge-fill
    +
  • + +
  • + +
    kitchen
    +
    #icon-kitchen
    +
  • + +
  • + +
    gif-fill
    +
    #icon-gifjpge-fill
    +
  • + +
  • + +
    inquiry-template
    +
    #icon-inquiry-template
    +
  • + +
  • + +
    bmp-fill
    +
    #icon-bmpjpge-fill
    +
  • + +
  • + +
    link
    +
    #icon-link
    +
  • + +
  • + +
    tif-fill
    +
    #icon-tifjpge-fill
    +
  • + +
  • + +
    libra
    +
    #icon-libra
    +
  • + +
  • + +
    png-fill
    +
    #icon-pngjpge-fill
    +
  • + +
  • + +
    loading
    +
    #icon-loading
    +
  • + +
  • + +
    home
    +
    #icon-Hometextile
    +
  • + +
  • + +
    listing-content
    +
    #icon-listing-content
    +
  • + +
  • + +
    home
    +
    #icon-home
    +
  • + +
  • + +
    lights
    +
    #icon-lights
    +
  • + +
  • + +
    send inquiry-fill
    +
    #icon-sendinquiry-fill
    +
  • + +
  • + +
    logistics-icon
    +
    #icon-logistics-icon
    +
  • + +
  • + +
    comments-fill
    +
    #icon-comments-fill
    +
  • + +
  • + +
    message center
    +
    #icon-messagecenter
    +
  • + +
  • + +
    account-fill
    +
    #icon-account-fill
    +
  • + +
  • + +
    mobile-phone
    +
    #icon-mobile-phone
    +
  • + +
  • + +
    feed-logo-fill
    +
    #icon-feed-logo-fill
    +
  • + +
  • + +
    manage-order
    +
    #icon-manage-order
    +
  • + +
  • + +
    feed-logo
    +
    #icon-feed-logo
    +
  • + +
  • + +
    move
    +
    #icon-move
    +
  • + +
  • + +
    home-fill
    +
    #icon-home-fill
    +
  • + +
  • + +
    Money management
    +
    #icon-Moneymanagement
    +
  • + +
  • + +
    add-select
    +
    #icon-add-select
    +
  • + +
  • + +
    namecard
    +
    #icon-namecard
    +
  • + +
  • + +
    sami-select
    +
    #icon-sami-select
    +
  • + +
  • + +
    map
    +
    #icon-map
    +
  • + +
  • + +
    camera
    +
    #icon-camera
    +
  • + +
  • + +
    New user zone
    +
    #icon-Newuserzone
    +
  • + +
  • + +
    arrow-down
    +
    #icon-arrow-down
    +
  • + +
  • + +
    multi-language
    +
    #icon-multi-language
    +
  • + +
  • + +
    account
    +
    #icon-account
    +
  • + +
  • + +
    office
    +
    #icon-office
    +
  • + +
  • + +
    comments
    +
    #icon-comments
    +
  • + +
  • + +
    notice
    +
    #icon-notice
    +
  • + +
  • + +
    cart-Empty
    +
    #icon-cart-Empty1
    +
  • + +
  • + +
    on time shipment
    +
    #icon-ontimeshipment
    +
  • + +
  • + +
    favorites
    +
    #icon-favorites
    +
  • + +
  • + +
    office-supplies
    +
    #icon-office-supplies
    +
  • + +
  • + +
    order
    +
    #icon-order
    +
  • + +
  • + +
    password
    +
    #icon-password
    +
  • + +
  • + +
    search
    +
    #icon-search
    +
  • + +
  • + +
    Not visible
    +
    #icon-Notvisible1
    +
  • + +
  • + +
    trade-assurance
    +
    #icon-trade-assurance
    +
  • + +
  • + +
    operation
    +
    #icon-operation
    +
  • + +
  • + +
    user center
    +
    #icon-usercenter1
    +
  • + +
  • + +
    packaging
    +
    #icon-packaging
    +
  • + +
  • + +
    trading data
    +
    #icon-tradingdata
    +
  • + +
  • + +
    online-tracking
    +
    #icon-online-tracking
    +
  • + +
  • + +
    microphone
    +
    #icon-microphone
    +
  • + +
  • + +
    packing-labeling
    +
    #icon-packing-labeling
    +
  • + +
  • + +
    txt
    +
    #icon-txt
    +
  • + +
  • + +
    phone
    +
    #icon-phone
    +
  • + +
  • + +
    xlsx
    +
    #icon-xlsx
    +
  • + +
  • + +
    pic
    +
    #icon-pic1
    +
  • + +
  • + +
    办证服务
    +
    #icon-banzhengfuwu
    +
  • + +
  • + +
    pin
    +
    #icon-pin
    +
  • + +
  • + +
    仓库
    +
    #icon-cangku
    +
  • + +
  • + +
    play
    +
    #icon-play1
    +
  • + +
  • + +
    代办财税
    +
    #icon-daibancaishui
    +
  • + +
  • + +
    logistic-logo
    +
    #icon-logistic-logo
    +
  • + +
  • + +
    集装箱
    +
    #icon-jizhuangxiang
    +
  • + +
  • + +
    print
    +
    #icon-print
    +
  • + +
  • + +
    角标
    +
    #icon-jiaobiao
    +
  • + +
  • + +
    product
    +
    #icon-product
    +
  • + +
  • + +
    客户盘点
    +
    #icon-kehupandian
    +
  • + +
  • + +
    machinery
    +
    #icon-machinery
    +
  • + +
  • + +
    动态
    +
    #icon-dongtai
    +
  • + +
  • + +
    process
    +
    #icon-process
    +
  • + +
  • + +
    贷款
    +
    #icon-daikuan
    +
  • + +
  • + +
    prompt
    +
    #icon-prompt
    +
  • + +
  • + +
    生意经
    +
    #icon-shengyijing
    +
  • + +
  • + +
    QRcode
    +
    #icon-QRcode1
    +
  • + +
  • + +
    结汇
    +
    #icon-jiehui
    +
  • + +
  • + +
    reeor
    +
    #icon-reeor
    +
  • + +
  • + +
    分层配置
    +
    #icon-fencengpeizhi
    +
  • + +
  • + +
    reduce
    +
    #icon-reduce
    +
  • + +
  • + +
    申请记录
    +
    #icon-shenqingjilu
    +
  • + +
  • + +
    Non-staple food
    +
    #icon-Non-staplefood
    +
  • + +
  • + +
    上传备案单证
    +
    #icon-shangchuanbeiandanzheng
    +
  • + +
  • + +
    rejected-order
    +
    #icon-rejected-order
    +
  • + +
  • + +
    上传
    +
    #icon-shangchuan
    +
  • + +
  • + +
    resonse rate
    +
    #icon-resonserate
    +
  • + +
  • + +
    客户权益
    +
    #icon-kehuquanyi
    +
  • + +
  • + +
    remind
    +
    #icon-remind
    +
  • + +
  • + +
    缩小
    +
    #icon-suoxiao
    +
  • + +
  • + +
    response time
    +
    #icon-responsetime
    +
  • + +
  • + +
    权益配置
    +
    #icon-quanyipeizhi
    +
  • + +
  • + +
    return
    +
    #icon-return
    +
  • + +
  • + +
    双审
    +
    #icon-shuangshen
    +
  • + +
  • + +
    paylater
    +
    #icon-paylater
    +
  • + +
  • + +
    通关
    +
    #icon-tongguan
    +
  • + +
  • + +
    rising
    +
    #icon-rising1
    +
  • + +
  • + +
    退税
    +
    #icon-tuishui
    +
  • + +
  • + +
    Right arrow
    +
    #icon-Rightarrow
    +
  • + +
  • + +
    通关数据
    +
    #icon-tongguanshuju
    +
  • + +
  • + +
    rmb
    +
    #icon-rmb1
    +
  • + +
  • + +
    快递物流
    +
    #icon-kuaidiwuliu
    +
  • + +
  • + +
    RFQ-logo
    +
    #icon-RFQ-logo
    +
  • + +
  • + +
    物流产品
    +
    #icon-wuliuchanpin
    +
  • + +
  • + +
    save
    +
    #icon-save
    +
  • + +
  • + +
    外汇数据
    +
    #icon-waihuishuju
    +
  • + +
  • + +
    scanning
    +
    #icon-scanning
    +
  • + +
  • + +
    信息bar_手机
    +
    #icon-xinxibar_shouji
    +
  • + +
  • + +
    security
    +
    #icon-security
    +
  • + +
  • + +
    新外综业务
    +
    #icon-xinwaizongyewu
    +
  • + +
  • + +
    sales center
    +
    #icon-salescenter
    +
  • + +
  • + +
    物流订单
    +
    #icon-wuliudingdan
    +
  • + +
  • + +
    seleted
    +
    #icon-seleted
    +
  • + +
  • + +
    中间人
    +
    #icon-zhongjianren
    +
  • + +
  • + +
    search cart
    +
    #icon-searchcart
    +
  • + +
  • + +
    信息bar_账户
    +
    #icon-xinxibar_zhanghu
    +
  • + +
  • + +
    raw
    +
    #icon-raw
    +
  • + +
  • + +
    一达通
    +
    #icon-yidatong
    +
  • + +
  • + +
    service
    +
    #icon-service
    +
  • + +
  • + +
    专业权威
    +
    #icon-zhuanyequanwei
    +
  • + +
  • + +
    share
    +
    #icon-share
    +
  • + +
  • + +
    账户操作
    +
    #icon-zhanghucaozuo
    +
  • + +
  • + +
    signboard
    +
    #icon-signboard
    +
  • + +
  • + +
    旋转90度
    +
    #icon-xuanzhuandu
    +
  • + +
  • + +
    shuffling-banner
    +
    #icon-shuffling-banner
    +
  • + +
  • + +
    退税融资
    +
    #icon-tuishuirongzi
    +
  • + +
  • + +
    Right button
    +
    #icon-Rightbutton
    +
  • + +
  • + +
    Add Products
    +
    #icon-AddProducts
    +
  • + +
  • + +
    sorting
    +
    #icon-sorting
    +
  • + +
  • + +
    自营业务
    +
    #icon-ziyingyewu
    +
  • + +
  • + +
    sound-Mute
    +
    #icon-sound-Mute
    +
  • + +
  • + +
    addcell
    +
    #icon-addcell
    +
  • + +
  • + +
    category products
    +
    #icon-Similarproducts
    +
  • + +
  • + +
    background-color
    +
    #icon-background-color
    +
  • + +
  • + +
    sound-filling
    +
    #icon-sound-filling
    +
  • + +
  • + +
    cascades
    +
    #icon-cascades
    +
  • + +
  • + +
    suggest
    +
    #icon-suggest
    +
  • + +
  • + +
    beijing
    +
    #icon-beijing
    +
  • + +
  • + +
    stop
    +
    #icon-stop
    +
  • + +
  • + +
    bold
    +
    #icon-bold
    +
  • + +
  • + +
    success
    +
    #icon-success
    +
  • + +
  • + +
    资金
    +
    #icon-zijin
    +
  • + +
  • + +
    supplier-features
    +
    #icon-supplier-features
    +
  • + +
  • + +
    eraser
    +
    #icon-eraser
    +
  • + +
  • + +
    switch
    +
    #icon-switch
    +
  • + +
  • + +
    centeralignment
    +
    #icon-centeralignment
    +
  • + +
  • + +
    survey
    +
    #icon-survey
    +
  • + +
  • + +
    click
    +
    #icon-click
    +
  • + +
  • + +
    template
    +
    #icon-template
    +
  • + +
  • + +
    asp结算
    +
    #icon-aspjiesuan
    +
  • + +
  • + +
    text
    +
    #icon-text
    +
  • + +
  • + +
    flag
    +
    #icon-flag
    +
  • + +
  • + +
    suspended
    +
    #icon-suspended
    +
  • + +
  • + +
    falg-fill
    +
    #icon-falg-fill
    +
  • + +
  • + +
    task-management
    +
    #icon-task-management
    +
  • + +
  • + +
    Fee
    +
    #icon-Fee
    +
  • + +
  • + +
    tool
    +
    #icon-tool
    +
  • + +
  • + +
    filling
    +
    #icon-filling
    +
  • + +
  • + +
    top
    +
    #icon-Top
    +
  • + +
  • + +
    Foreign currency
    +
    #icon-Foreigncurrency
    +
  • + +
  • + +
    smile
    +
    #icon-smile
    +
  • + +
  • + +
    guanliyuan
    +
    #icon-guanliyuan
    +
  • + +
  • + +
    textile-products
    +
    #icon-textile-products
    +
  • + +
  • + +
    language
    +
    #icon-language
    +
  • + +
  • + +
    trade alert
    +
    #icon-tradealert
    +
  • + +
  • + +
    leftalignment
    +
    #icon-leftalignment
    +
  • + +
  • + +
    top sales
    +
    #icon-topsales
    +
  • + +
  • + +
    extra-inquiries
    +
    #icon-extra-inquiries
    +
  • + +
  • + +
    trading volume
    +
    #icon-tradingvolume
    +
  • + +
  • + +
    Italic
    +
    #icon-Italic
    +
  • + +
  • + +
    training
    +
    #icon-training
    +
  • + +
  • + +
    pcm
    +
    #icon-pcm
    +
  • + +
  • + +
    upload
    +
    #icon-upload
    +
  • + +
  • + +
    reducecell
    +
    #icon-reducecell
    +
  • + +
  • + +
    RFQ-word
    +
    #icon-RFQ-word
    +
  • + +
  • + +
    rightalignment
    +
    #icon-rightalignment
    +
  • + +
  • + +
    view larger
    +
    #icon-viewlarger
    +
  • + +
  • + +
    pointerleft
    +
    #icon-pointerleft
    +
  • + +
  • + +
    viewgallery
    +
    #icon-viewgallery
    +
  • + +
  • + +
    subscript
    +
    #icon-subscript
    +
  • + +
  • + +
    vehivles
    +
    #icon-vehivles
    +
  • + +
  • + +
    square
    +
    #icon-square
    +
  • + +
  • + +
    trust
    +
    #icon-trust
    +
  • + +
  • + +
    superscript
    +
    #icon-superscript
    +
  • + +
  • + +
    warning
    +
    #icon-warning
    +
  • + +
  • + +
    tag-subscript
    +
    #icon-tag-subscript
    +
  • + +
  • + +
    warehouse
    +
    #icon-warehouse
    +
  • + +
  • + +
    单据转换
    +
    #icon-danjuzhuanhuan
    +
  • + +
  • + +
    shoes
    +
    #icon-shoes
    +
  • + +
  • + +
    Transfer money
    +
    #icon-Transfermoney
    +
  • + +
  • + +
    video
    +
    #icon-video
    +
  • + +
  • + +
    under-line
    +
    #icon-under-line
    +
  • + +
  • + +
    viewlist
    +
    #icon-viewlist
    +
  • + +
  • + +
    xiakuangxian
    +
    #icon-xiakuangxian
    +
  • + +
  • + +
    set
    +
    #icon-set
    +
  • + +
  • + +
    收起
    +
    #icon-shouqi
    +
  • + +
  • + +
    store
    +
    #icon-store
    +
  • + +
  • + +
    展开
    +
    #icon-zhankai
    +
  • + +
  • + +
    tool-hardware
    +
    #icon-tool-hardware
    +
  • + +
  • + +
    通讯录
    +
    #icon-tongxunlu
    +
  • + +
  • + +
    vs
    +
    #icon-vs
    +
  • + +
  • + +
    已关注供应商
    +
    #icon-yiguanzhugongyingshang
    +
  • + +
  • + +
    toy
    +
    #icon-toy
    +
  • + +
  • + +
    购买偏好
    +
    #icon-goumaipianhao
    +
  • + +
  • + +
    sport
    +
    #icon-sport
    +
  • + +
  • + +
    Subscribe
    +
    #icon-Subscribe
    +
  • + +
  • + +
    credit card
    +
    #icon-creditcard
    +
  • + +
  • + +
    become a gold supplier
    +
    #icon-becomeagoldsupplier
    +
  • + +
  • + +
    contacts
    +
    #icon-contacts
    +
  • + +
  • + +
    new
    +
    #icon-new
    +
  • + +
  • + +
    checkstand
    +
    #icon-checkstand
    +
  • + +
  • + +
    free
    +
    #icon-free
    +
  • + +
  • + +
    aviation
    +
    #icon-aviation
    +
  • + +
  • + +
    cad-fill
    +
    #icon-cad-fill
    +
  • + +
  • + +
    Daytime mode
    +
    #icon-Daytimemode
    +
  • + +
  • + +
    robot
    +
    #icon-robot
    +
  • + +
  • + +
    infant & mom
    +
    #icon-infantmom
    +
  • + +
  • + +
    inspection
    +
    #icon-inspection1
    +
  • + +
  • + +
    discounts
    +
    #icon-discounts
    +
  • + +
  • + +
    block
    +
    #icon-block
    +
  • + +
  • + +
    invoice
    +
    #icon-invoice
    +
  • + +
  • + +
    收货icon
    +
    #icon-shouhuoicon
    +
  • + +
  • + +
    insurance
    +
    #icon-insurance
    +
  • + +
  • + +
    night mode
    +
    #icon-nightmode
    +
  • + +
  • + +
    user center
    +
    #icon-usercenter
    +
  • + +
  • + +
    unlock
    +
    #icon-unlock
    +
  • + +
  • + +
    vip
    +
    #icon-vip
    +
  • + +
  • + +
    wallet
    +
    #icon-wallet
    +
  • + +
  • + +
    land transportation
    +
    #icon-landtransportation
    +
  • + +
  • + +
    voice
    +
    #icon-voice
    +
  • + +
  • + +
    exchange rate
    +
    #icon-exchangerate
    +
  • + +
  • + +
    contacts-fill
    +
    #icon-contacts-fill
    +
  • + +
  • + +
    add-account
    +
    #icon-add-account1
    +
  • + +
  • + +
    2years-fill
    +
    #icon-years-fill
    +
  • + +
  • + +
    add-cart-fill
    +
    #icon-add-cart-fill
    +
  • + +
  • + +
    add-fill
    +
    #icon-add-fill
    +
  • + +
  • + +
    all-fill
    +
    #icon-all-fill1
    +
  • + +
  • + +
    ashbin-fill
    +
    #icon-ashbin-fill
    +
  • + +
  • + +
    calendar-fill
    +
    #icon-calendar-fill
    +
  • + +
  • + +
    bad-fill
    +
    #icon-bad-fill
    +
  • + +
  • + +
    bussiness-man-fill
    +
    #icon-bussiness-man-fill
    +
  • + +
  • + +
    atm-fill
    +
    #icon-atm-fill
    +
  • + +
  • + +
    cart- full-fill
    +
    #icon-cart-full-fill
    +
  • + +
  • + +
    cart-Empty-fill
    +
    #icon-cart-Empty-fill
    +
  • + +
  • + +
    camera switching-fill
    +
    #icon-cameraswitching-fill
    +
  • + +
  • + +
    atm-away-fill
    +
    #icon-atm-away-fill
    +
  • + +
  • + +
    certified-supplier-fill
    +
    #icon-certified-supplier-fill
    +
  • + +
  • + +
    calculator-fill
    +
    #icon-calculator-fill
    +
  • + +
  • + +
    clock-fill
    +
    #icon-clock-fill
    +
  • + +
  • + +
    ali-clould-fill
    +
    #icon-ali-clould-fill
    +
  • + +
  • + +
    color-fill
    +
    #icon-color-fill
    +
  • + +
  • + +
    coupons-fill
    +
    #icon-coupons-fill
    +
  • + +
  • + +
    cecurity-protection-fill
    +
    #icon-cecurity-protection-fill
    +
  • + +
  • + +
    credit-level-fill
    +
    #icon-credit-level-fill
    +
  • + +
  • + +
    auto
    +
    #icon-auto
    +
  • + +
  • + +
    default-template-fill
    +
    #icon-default-template-fill
    +
  • + +
  • + +
    all
    +
    #icon-all
    +
  • + +
  • + +
    Currency Converter-fill
    +
    #icon-CurrencyConverter-fill
    +
  • + +
  • + +
    bussiness-man
    +
    #icon-bussiness-man
    +
  • + +
  • + +
    Customer management-fill
    +
    #icon-Customermanagement-fill
    +
  • + +
  • + +
    component
    +
    #icon-component
    +
  • + +
  • + +
    discounts-fill
    +
    #icon-discounts-fill
    +
  • + +
  • + +
    code
    +
    #icon-code
    +
  • + +
  • + +
    Daytime mode-fill
    +
    #icon-Daytimemode-fill
    +
  • + +
  • + +
    copy
    +
    #icon-copy
    +
  • + +
  • + +
    exl-fill
    +
    #icon-exl-fill
    +
  • + +
  • + +
    dollar
    +
    #icon-dollar
    +
  • + +
  • + +
    cry-fill
    +
    #icon-cry-fill
    +
  • + +
  • + +
    history
    +
    #icon-history
    +
  • + +
  • + +
    email-fill
    +
    #icon-email-fill
    +
  • + +
  • + +
    editor
    +
    #icon-editor
    +
  • + +
  • + +
    filter-fill
    +
    #icon-filter-fill
    +
  • + +
  • + +
    data
    +
    #icon-data
    +
  • + +
  • + +
    folder-fill
    +
    #icon-folder-fill
    +
  • + +
  • + +
    gift
    +
    #icon-gift
    +
  • + +
  • + +
    feeds-fill
    +
    #icon-feeds-fill
    +
  • + +
  • + +
    integral
    +
    #icon-integral
    +
  • + +
  • + +
    gold-supplie-fill
    +
    #icon-gold-supplie-fill
    +
  • + +
  • + +
    nav-list
    +
    #icon-nav-list
    +
  • + +
  • + +
    form-fill
    +
    #icon-form-fill
    +
  • + +
  • + +
    pic
    +
    #icon-pic
    +
  • + +
  • + +
    camera-fill
    +
    #icon-camera-fill
    +
  • + +
  • + +
    Not visible
    +
    #icon-Notvisible
    +
  • + +
  • + +
    good-fill
    +
    #icon-good-fill
    +
  • + +
  • + +
    play
    +
    #icon-play
    +
  • + +
  • + +
    image-text-fill
    +
    #icon-image-text-fill
    +
  • + +
  • + +
    rising
    +
    #icon-rising
    +
  • + +
  • + +
    inspection-fill
    +
    #icon-inspection-fill
    +
  • + +
  • + +
    QRcode
    +
    #icon-QRcode
    +
  • + +
  • + +
    hot-fill
    +
    #icon-hot-fill
    +
  • + +
  • + +
    rmb
    +
    #icon-rmb
    +
  • + +
  • + +
    company-fill
    +
    #icon-company-fill
    +
  • + +
  • + +
    similar-product
    +
    #icon-similar-product
    +
  • + +
  • + +
    discount-fill
    +
    #icon-discount-fill
    +
  • + +
  • + +
    export services
    +
    #icon-Exportservices
    +
  • + +
  • + +
    insurance-fill
    +
    #icon-insurance-fill
    +
  • + +
  • + +
    send inquiry
    +
    #icon-sendinquiry
    +
  • + +
  • + +
    inquiry-template-fill
    +
    #icon-inquiry-template-fill
    +
  • + +
  • + +
    all-fill
    +
    #icon-all-fill
    +
  • + +
  • + +
    left button-fill
    +
    #icon-leftbutton-fill
    +
  • + +
  • + +
    favorites-fill
    +
    #icon-favorites-fill
    +
  • + +
  • + +
    integral-fill
    +
    #icon-integral-fill1
    +
  • + +
  • + +
    integral-fill
    +
    #icon-integral-fill
    +
  • + +
  • + +
    help
    +
    #icon-help1
    +
  • + +
  • + +
    namecard-fill
    +
    #icon-namecard-fill
    +
  • + +
  • + +
    listing-content-fill
    +
    #icon-listing-content-fill
    +
  • + +
  • + +
    pic-fill
    +
    #icon-pic-fill
    +
  • + +
  • + +
    logistic-logo-fill
    +
    #icon-logistic-logo-fill
    +
  • + +
  • + +
    play-fill
    +
    #icon-play-fill
    +
  • + +
  • + +
    Money management-fill
    +
    #icon-Moneymanagement-fill
    +
  • + +
  • + +
    prompt-fill
    +
    #icon-prompt-fill
    +
  • + +
  • + +
    manage-order-fill
    +
    #icon-manage-order-fill
    +
  • + +
  • + +
    stop-fill
    +
    #icon-stop-fill
    +
  • + +
  • + +
    multi-language-fill
    +
    #icon-multi-language-fill
    +
  • + +
  • + +
    3column
    +
    #icon-column
    +
  • + +
  • + +
    logistics-icon-fill
    +
    #icon-logistics-icon-fill
    +
  • + +
  • + +
    add-account
    +
    #icon-add-account
    +
  • + +
  • + +
    New user zone-fill
    +
    #icon-Newuserzone-fill
    +
  • + +
  • + +
    4column
    +
    #icon-column1
    +
  • + +
  • + +
    night mode-fill
    +
    #icon-nightmode-fill
    +
  • + +
  • + +
    add
    +
    #icon-add
    +
  • + +
  • + +
    office-supplies-fill
    +
    #icon-office-supplies-fill
    +
  • + +
  • + +
    agriculture
    +
    #icon-agriculture
    +
  • + +
  • + +
    notice-fill
    +
    #icon-notice-fill
    +
  • + +
  • + +
    2years
    +
    #icon-years
    +
  • + +
  • + +
    mute
    +
    #icon-mute
    +
  • + +
  • + +
    add-cart
    +
    #icon-add-cart
    +
  • + +
  • + +
    order-fill
    +
    #icon-order-fill
    +
  • + +
  • + +
    arrow-right
    +
    #icon-arrow-right
    +
  • + +
  • + +
    password
    +
    #icon-password1
    +
  • + +
  • + +
    arrow-left
    +
    #icon-arrow-left
    +
  • + +
  • + +
    map
    +
    #icon-map1
    +
  • + +
  • + +
    apparel
    +
    #icon-apparel
    +
  • + +
  • + +
    paylater-fill
    +
    #icon-paylater-fill
    +
  • + +
  • + +
    all
    +
    #icon-all1
    +
  • + +
  • + +
    phone-fill
    +
    #icon-phone-fill
    +
  • + +
  • + +
    arrow-up
    +
    #icon-arrow-up
    +
  • + +
  • + +
    online-tracking-fill
    +
    #icon-online-tracking-fill
    +
  • + +
  • + +
    ascending
    +
    #icon-ascending
    +
  • + +
  • + +
    play-fill
    +
    #icon-play-fill1
    +
  • + +
  • + +
    ashbin
    +
    #icon-ashbin
    +
  • + +
  • + +
    pdf-fill
    +
    #icon-pdf-fill
    +
  • + +
  • + +
    atm
    +
    #icon-atm
    +
  • + +
  • + +
    phone
    +
    #icon-phone1
    +
  • + +
  • + +
    bad
    +
    #icon-bad
    +
  • + +
  • + +
    pin-fill
    +
    #icon-pin-fill
    +
  • + +
  • + +
    attachent
    +
    #icon-attachent
    +
  • + +
  • + +
    product-fill
    +
    #icon-product-fill
    +
  • + +
  • + +
    browse
    +
    #icon-browse
    +
  • + +
  • + +
    ranking list-fill
    +
    #icon-rankinglist-fill
    +
  • + +
  • + +
    beauty
    +
    #icon-beauty
    +
  • + +
  • + +
    reduce-fill
    +
    #icon-reduce-fill
    +
  • + +
  • + +
    atm-away
    +
    #icon-atm-away
    +
  • + +
  • + +
    reeor-fill
    +
    #icon-reeor-fill
    +
  • + +
  • + +
    assessed-badge
    +
    #icon-assessed-badge
    +
  • + +
  • + +
    pic-fill
    +
    #icon-pic-fill1
    +
  • + +
  • + +
    auto
    +
    #icon-auto1
    +
  • + +
  • + +
    ranking list
    +
    #icon-rankinglist
    +
  • + +
  • + +
    bags
    +
    #icon-bags
    +
  • + +
  • + +
    product
    +
    #icon-product1
    +
  • + +
  • + +
    calendar
    +
    #icon-calendar
    +
  • + +
  • + +
    prompt-fill
    +
    #icon-prompt-fill1
    +
  • + +
  • + +
    cart- full
    +
    #icon-cart-full
    +
  • + +
  • + +
    resonse rate-fill
    +
    #icon-resonserate-fill
    +
  • + +
  • + +
    calculator
    +
    #icon-calculator
    +
  • + +
  • + +
    remind-fill
    +
    #icon-remind-fill
    +
  • + +
  • + +
    camera switching
    +
    #icon-cameraswitching
    +
  • + +
  • + +
    Right button-fill
    +
    #icon-Rightbutton-fill
    +
  • + +
  • + +
    cecurity-protection
    +
    #icon-cecurity-protection
    +
  • + +
  • + +
    RFQ-logo-fill
    +
    #icon-RFQ-logo-fill
    +
  • + +
  • + +
    category
    +
    #icon-category
    +
  • + +
  • + +
    RFQ-word-fill
    +
    #icon-RFQ-word-fill
    +
  • + +
  • + +
    close
    +
    #icon-close
    +
  • + +
  • + +
    search cart-fill
    +
    #icon-searchcart-fill
    +
  • + +
  • + +
    certified-supplier
    +
    #icon-certified-supplier
    +
  • + +
  • + +
    sales center-fill
    +
    #icon-salescenter-fill
    +
  • + +
  • + +
    cart-Empty
    +
    #icon-cart-Empty
    +
  • + +
  • + +
    save-fill
    +
    #icon-save-fill
    +
  • + +
  • + +
    code
    +
    #icon-code1
    +
  • + +
  • + +
    security-fill
    +
    #icon-security-fill
    +
  • + +
  • + +
    color
    +
    #icon-color
    +
  • + +
  • + +
    category products-fill
    +
    #icon-Similarproducts-fill
    +
  • + +
  • + +
    conditions
    +
    #icon-conditions
    +
  • + +
  • + +
    signboard-fill
    +
    #icon-signboard-fill
    +
  • + +
  • + +
    confirm
    +
    #icon-confirm
    +
  • + +
  • + +
    service-fill
    +
    #icon-service-fill
    +
  • + +
  • + +
    company
    +
    #icon-company
    +
  • + +
  • + +
    shuffling-banner-fill
    +
    #icon-shuffling-banner-fill
    +
  • + +
  • + +
    ali-clould
    +
    #icon-ali-clould
    +
  • + +
  • + +
    supplier-features-fill
    +
    #icon-supplier-features-fill
    +
  • + +
  • + +
    copy
    +
    #icon-copy1
    +
  • + +
  • + +
    store-fill
    +
    #icon-store-fill
    +
  • + +
  • + +
    credit-level
    +
    #icon-credit-level
    +
  • + +
  • + +
    smile-fill
    +
    #icon-smile-fill
    +
  • + +
  • + +
    coupons
    +
    #icon-coupons
    +
  • + +
  • + +
    success-fill
    +
    #icon-success-fill
    +
  • + +
  • + +
    connections
    +
    #icon-connections
    +
  • + +
  • + +
    sound-filling-fill
    +
    #icon-sound-filling-fill
    +
  • + +
  • + +
    cry
    +
    #icon-cry
    +
  • + +
  • + +
    sound-Mute
    +
    #icon-sound-Mute1
    +
  • + +
  • + +
    costoms-alearance
    +
    #icon-costoms-alearance
    +
  • + +
  • + +
    suspended-fill
    +
    #icon-suspended-fill
    +
  • + +
  • + +
    clock
    +
    #icon-clock
    +
  • + +
  • + +
    tool-fill
    +
    #icon-tool-fill
    +
  • + +
  • + +
    Currency Converter
    +
    #icon-CurrencyConverter
    +
  • + +
  • + +
    task-management-fill
    +
    #icon-task-management-fill
    +
  • + +
  • + +
    cut
    +
    #icon-cut
    +
  • + +
  • + +
    unlock-fill
    +
    #icon-unlock-fill
    +
  • + +
  • + +
    data
    +
    #icon-data1
    +
  • + +
  • + +
    trust-fill
    +
    #icon-trust-fill
    +
  • + +
  • + +
    Customer management
    +
    #icon-Customermanagement
    +
  • + +
  • + +
    vip-fill
    +
    #icon-vip-fill
    +
  • + +
  • + +
    descending
    +
    #icon-descending
    +
  • + +
  • + +
    set
    +
    #icon-set1
    +
  • + +
  • + +
    double-arro- right
    +
    #icon-double-arro-right
    +
  • + +
  • + +
    top-fill
    +
    #icon-Top-fill
    +
  • + +
  • + +
    customization
    +
    #icon-customization
    +
  • + +
  • + +
    view larger
    +
    #icon-viewlarger1
    +
  • + +
  • + +
    double-arrow-left
    +
    #icon-double-arrow-left
    +
  • + +
  • + +
    voice-fill
    +
    #icon-voice-fill
    +
  • + +
  • + +
    discount
    +
    #icon-discount
    +
  • + +
  • + +
    warning-fill
    +
    #icon-warning-fill
    +
  • + +
  • + +
    download
    +
    #icon-download
    +
  • + +
  • + +
    warehouse-fill
    +
    #icon-warehouse-fill
    +
  • + +
  • + +
    dollar
    +
    #icon-dollar1
    +
  • + +
  • + +
    zip-fill
    +
    #icon-zip-fill
    +
  • + +
  • + +
    default-template
    +
    #icon-default-template
    +
  • + +
  • + +
    trade-assurance-fill
    +
    #icon-trade-assurance-fill
    +
  • + +
  • + +
    editor
    +
    #icon-editor1
    +
  • + +
  • + +
    vs-fill
    +
    #icon-vs-fill
    +
  • + +
  • + +
    eletrical
    +
    #icon-eletrical
    +
  • + +
  • + +
    video
    +
    #icon-video1
    +
  • + +
  • + +
    electronics
    +
    #icon-electronics
    +
  • + +
  • + +
    template-fill
    +
    #icon-template-fill
    +
  • + +
  • + +
    etrical-equipm
    +
    #icon-etrical-equipm
    +
  • + +
  • + +
    wallet
    +
    #icon-wallet1
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/kgBuilder-ui/public/static/icon/iconfont.css b/kgBuilder-ui/public/static/icon/iconfont.css new file mode 100644 index 0000000..44f140b --- /dev/null +++ b/kgBuilder-ui/public/static/icon/iconfont.css @@ -0,0 +1,1935 @@ +@font-face { + font-family: "iconfont"; /* Project id 3401951 */ + src: url('iconfont.woff2?t=1652585249336') format('woff2'), + url('iconfont.woff?t=1652585249336') format('woff'), + url('iconfont.ttf?t=1652585249336') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-ellipsis:before { + content: "\e77e"; +} + +.icon-training1:before { + content: "\e87e"; +} + +.icon-email:before { + content: "\e77f"; +} + +.icon-packing-labeling-fill:before { + content: "\e87f"; +} + +.icon-falling:before { + content: "\e780"; +} + +.icon-Exportservices-fill:before { + content: "\e880"; +} + +.icon-earth:before { + content: "\e781"; +} + +.icon-brand-fill:before { + content: "\e881"; +} + +.icon-filter:before { + content: "\e782"; +} + +.icon-collection:before { + content: "\e882"; +} + +.icon-furniture:before { + content: "\e783"; +} + +.icon-consumption-fill:before { + content: "\e883"; +} + +.icon-folder:before { + content: "\e784"; +} + +.icon-collection-fill:before { + content: "\e884"; +} + +.icon-feeds:before { + content: "\e785"; +} + +.icon-brand:before { + content: "\e885"; +} + +.icon-history1:before { + content: "\e786"; +} + +.icon-rejected-order-fill:before { + content: "\e886"; +} + +.icon-hardware:before { + content: "\e787"; +} + +.icon-homepage-ads-fill:before { + content: "\e887"; +} + +.icon-help:before { + content: "\e788"; +} + +.icon-homepage-ads:before { + content: "\e888"; +} + +.icon-good:before { + content: "\e789"; +} + +.icon-scenes-fill:before { + content: "\e889"; +} + +.icon-Householdappliances:before { + content: "\e78a"; +} + +.icon-scenes:before { + content: "\e88a"; +} + +.icon-gift1:before { + content: "\e78b"; +} + +.icon-similar-product-fill:before { + content: "\e88b"; +} + +.icon-form:before { + content: "\e78c"; +} + +.icon-topraning-fill:before { + content: "\e88c"; +} + +.icon-image-text:before { + content: "\e78d"; +} + +.icon-consumption:before { + content: "\e88d"; +} + +.icon-hot:before { + content: "\e78e"; +} + +.icon-topraning:before { + content: "\e88e"; +} + +.icon-inspection:before { + content: "\e78f"; +} + +.icon-gold-supplier:before { + content: "\e88f"; +} + +.icon-leftbutton:before { + content: "\e790"; +} + +.icon-messagecenter-fill:before { + content: "\e890"; +} + +.icon-jewelry:before { + content: "\e791"; +} + +.icon-quick:before { + content: "\e891"; +} + +.icon-ipad:before { + content: "\e792"; +} + +.icon-writing:before { + content: "\e892"; +} + +.icon-leftarrow:before { + content: "\e793"; +} + +.icon-docjpge-fill:before { + content: "\e893"; +} + +.icon-integral1:before { + content: "\e794"; +} + +.icon-jpge-fill:before { + content: "\e894"; +} + +.icon-kitchen:before { + content: "\e795"; +} + +.icon-gifjpge-fill:before { + content: "\e895"; +} + +.icon-inquiry-template:before { + content: "\e796"; +} + +.icon-bmpjpge-fill:before { + content: "\e896"; +} + +.icon-link:before { + content: "\e797"; +} + +.icon-tifjpge-fill:before { + content: "\e897"; +} + +.icon-libra:before { + content: "\e798"; +} + +.icon-pngjpge-fill:before { + content: "\e898"; +} + +.icon-loading:before { + content: "\e799"; +} + +.icon-Hometextile:before { + content: "\e899"; +} + +.icon-listing-content:before { + content: "\e79a"; +} + +.icon-home:before { + content: "\e89a"; +} + +.icon-lights:before { + content: "\e79b"; +} + +.icon-sendinquiry-fill:before { + content: "\e89b"; +} + +.icon-logistics-icon:before { + content: "\e79c"; +} + +.icon-comments-fill:before { + content: "\e89c"; +} + +.icon-messagecenter:before { + content: "\e79d"; +} + +.icon-account-fill:before { + content: "\e89d"; +} + +.icon-mobile-phone:before { + content: "\e79e"; +} + +.icon-feed-logo-fill:before { + content: "\e89e"; +} + +.icon-manage-order:before { + content: "\e79f"; +} + +.icon-feed-logo:before { + content: "\e89f"; +} + +.icon-move:before { + content: "\e7a0"; +} + +.icon-home-fill:before { + content: "\e8a0"; +} + +.icon-Moneymanagement:before { + content: "\e7a1"; +} + +.icon-add-select:before { + content: "\e8a1"; +} + +.icon-namecard:before { + content: "\e7a2"; +} + +.icon-sami-select:before { + content: "\e8a2"; +} + +.icon-map:before { + content: "\e7a3"; +} + +.icon-camera:before { + content: "\e8a3"; +} + +.icon-Newuserzone:before { + content: "\e7a4"; +} + +.icon-arrow-down:before { + content: "\e8a4"; +} + +.icon-multi-language:before { + content: "\e7a5"; +} + +.icon-account:before { + content: "\e8a5"; +} + +.icon-office:before { + content: "\e7a6"; +} + +.icon-comments:before { + content: "\e8a6"; +} + +.icon-notice:before { + content: "\e7a7"; +} + +.icon-cart-Empty1:before { + content: "\e8a7"; +} + +.icon-ontimeshipment:before { + content: "\e7a8"; +} + +.icon-favorites:before { + content: "\e8a8"; +} + +.icon-office-supplies:before { + content: "\e7a9"; +} + +.icon-order:before { + content: "\e8a9"; +} + +.icon-password:before { + content: "\e7aa"; +} + +.icon-search:before { + content: "\e8aa"; +} + +.icon-Notvisible1:before { + content: "\e7ab"; +} + +.icon-trade-assurance:before { + content: "\e8ab"; +} + +.icon-operation:before { + content: "\e7ac"; +} + +.icon-usercenter1:before { + content: "\e8ac"; +} + +.icon-packaging:before { + content: "\e7ad"; +} + +.icon-tradingdata:before { + content: "\e8ad"; +} + +.icon-online-tracking:before { + content: "\e7ae"; +} + +.icon-microphone:before { + content: "\e8ae"; +} + +.icon-packing-labeling:before { + content: "\e7af"; +} + +.icon-txt:before { + content: "\e8af"; +} + +.icon-phone:before { + content: "\e7b0"; +} + +.icon-xlsx:before { + content: "\e8b0"; +} + +.icon-pic1:before { + content: "\e7b1"; +} + +.icon-banzhengfuwu:before { + content: "\e8b1"; +} + +.icon-pin:before { + content: "\e7b2"; +} + +.icon-cangku:before { + content: "\e8b2"; +} + +.icon-play1:before { + content: "\e7b3"; +} + +.icon-daibancaishui:before { + content: "\e8b3"; +} + +.icon-logistic-logo:before { + content: "\e7b4"; +} + +.icon-jizhuangxiang:before { + content: "\e8b4"; +} + +.icon-print:before { + content: "\e7b5"; +} + +.icon-jiaobiao:before { + content: "\e8b5"; +} + +.icon-product:before { + content: "\e7b6"; +} + +.icon-kehupandian:before { + content: "\e8b6"; +} + +.icon-machinery:before { + content: "\e7b7"; +} + +.icon-dongtai:before { + content: "\e8b7"; +} + +.icon-process:before { + content: "\e7b8"; +} + +.icon-daikuan:before { + content: "\e8b8"; +} + +.icon-prompt:before { + content: "\e7b9"; +} + +.icon-shengyijing:before { + content: "\e8b9"; +} + +.icon-QRcode1:before { + content: "\e7ba"; +} + +.icon-jiehui:before { + content: "\e8ba"; +} + +.icon-reeor:before { + content: "\e7bb"; +} + +.icon-fencengpeizhi:before { + content: "\e8bb"; +} + +.icon-reduce:before { + content: "\e7bc"; +} + +.icon-shenqingjilu:before { + content: "\e8bc"; +} + +.icon-Non-staplefood:before { + content: "\e7bd"; +} + +.icon-shangchuanbeiandanzheng:before { + content: "\e8bd"; +} + +.icon-rejected-order:before { + content: "\e7be"; +} + +.icon-shangchuan:before { + content: "\e8be"; +} + +.icon-resonserate:before { + content: "\e7bf"; +} + +.icon-kehuquanyi:before { + content: "\e8bf"; +} + +.icon-remind:before { + content: "\e7c0"; +} + +.icon-suoxiao:before { + content: "\e8c0"; +} + +.icon-responsetime:before { + content: "\e7c1"; +} + +.icon-quanyipeizhi:before { + content: "\e8c1"; +} + +.icon-return:before { + content: "\e7c2"; +} + +.icon-shuangshen:before { + content: "\e8c2"; +} + +.icon-paylater:before { + content: "\e7c3"; +} + +.icon-tongguan:before { + content: "\e8c3"; +} + +.icon-rising1:before { + content: "\e7c4"; +} + +.icon-tuishui:before { + content: "\e8c4"; +} + +.icon-Rightarrow:before { + content: "\e7c5"; +} + +.icon-tongguanshuju:before { + content: "\e8c5"; +} + +.icon-rmb1:before { + content: "\e7c6"; +} + +.icon-kuaidiwuliu:before { + content: "\e8c6"; +} + +.icon-RFQ-logo:before { + content: "\e7c7"; +} + +.icon-wuliuchanpin:before { + content: "\e8c7"; +} + +.icon-save:before { + content: "\e7c8"; +} + +.icon-waihuishuju:before { + content: "\e8c8"; +} + +.icon-scanning:before { + content: "\e7c9"; +} + +.icon-xinxibar_shouji:before { + content: "\e8c9"; +} + +.icon-security:before { + content: "\e7ca"; +} + +.icon-xinwaizongyewu:before { + content: "\e8ca"; +} + +.icon-salescenter:before { + content: "\e7cb"; +} + +.icon-wuliudingdan:before { + content: "\e8cb"; +} + +.icon-seleted:before { + content: "\e7cc"; +} + +.icon-zhongjianren:before { + content: "\e8cc"; +} + +.icon-searchcart:before { + content: "\e7cd"; +} + +.icon-xinxibar_zhanghu:before { + content: "\e8cd"; +} + +.icon-raw:before { + content: "\e7ce"; +} + +.icon-yidatong:before { + content: "\e8ce"; +} + +.icon-service:before { + content: "\e7cf"; +} + +.icon-zhuanyequanwei:before { + content: "\e8cf"; +} + +.icon-share:before { + content: "\e7d0"; +} + +.icon-zhanghucaozuo:before { + content: "\e8d0"; +} + +.icon-signboard:before { + content: "\e7d1"; +} + +.icon-xuanzhuandu:before { + content: "\e8d1"; +} + +.icon-shuffling-banner:before { + content: "\e7d2"; +} + +.icon-tuishuirongzi:before { + content: "\e8d2"; +} + +.icon-Rightbutton:before { + content: "\e7d3"; +} + +.icon-AddProducts:before { + content: "\e8d3"; +} + +.icon-sorting:before { + content: "\e7d4"; +} + +.icon-ziyingyewu:before { + content: "\e8d4"; +} + +.icon-sound-Mute:before { + content: "\e7d5"; +} + +.icon-addcell:before { + content: "\e8d5"; +} + +.icon-Similarproducts:before { + content: "\e7d6"; +} + +.icon-background-color:before { + content: "\e8d6"; +} + +.icon-sound-filling:before { + content: "\e7d7"; +} + +.icon-cascades:before { + content: "\e8d7"; +} + +.icon-suggest:before { + content: "\e7d8"; +} + +.icon-beijing:before { + content: "\e8d8"; +} + +.icon-stop:before { + content: "\e7d9"; +} + +.icon-bold:before { + content: "\e8d9"; +} + +.icon-success:before { + content: "\e7da"; +} + +.icon-zijin:before { + content: "\e8da"; +} + +.icon-supplier-features:before { + content: "\e7db"; +} + +.icon-eraser:before { + content: "\e8db"; +} + +.icon-switch:before { + content: "\e7dc"; +} + +.icon-centeralignment:before { + content: "\e8dc"; +} + +.icon-survey:before { + content: "\e7dd"; +} + +.icon-click:before { + content: "\e8dd"; +} + +.icon-template:before { + content: "\e7de"; +} + +.icon-aspjiesuan:before { + content: "\e8de"; +} + +.icon-text:before { + content: "\e7df"; +} + +.icon-flag:before { + content: "\e8df"; +} + +.icon-suspended:before { + content: "\e7e0"; +} + +.icon-falg-fill:before { + content: "\e8e0"; +} + +.icon-task-management:before { + content: "\e7e1"; +} + +.icon-Fee:before { + content: "\e8e1"; +} + +.icon-tool:before { + content: "\e7e2"; +} + +.icon-filling:before { + content: "\e8e2"; +} + +.icon-Top:before { + content: "\e7e3"; +} + +.icon-Foreigncurrency:before { + content: "\e8e3"; +} + +.icon-smile:before { + content: "\e7e4"; +} + +.icon-guanliyuan:before { + content: "\e8e4"; +} + +.icon-textile-products:before { + content: "\e7e5"; +} + +.icon-language:before { + content: "\e8e5"; +} + +.icon-tradealert:before { + content: "\e7e6"; +} + +.icon-leftalignment:before { + content: "\e8e6"; +} + +.icon-topsales:before { + content: "\e7e7"; +} + +.icon-extra-inquiries:before { + content: "\e8e7"; +} + +.icon-tradingvolume:before { + content: "\e7e8"; +} + +.icon-Italic:before { + content: "\e8e8"; +} + +.icon-training:before { + content: "\e7e9"; +} + +.icon-pcm:before { + content: "\e8e9"; +} + +.icon-upload:before { + content: "\e7ea"; +} + +.icon-reducecell:before { + content: "\e8ea"; +} + +.icon-RFQ-word:before { + content: "\e7eb"; +} + +.icon-rightalignment:before { + content: "\e8eb"; +} + +.icon-viewlarger:before { + content: "\e7ec"; +} + +.icon-pointerleft:before { + content: "\e8ec"; +} + +.icon-viewgallery:before { + content: "\e7ed"; +} + +.icon-subscript:before { + content: "\e8ed"; +} + +.icon-vehivles:before { + content: "\e7ee"; +} + +.icon-square:before { + content: "\e8ee"; +} + +.icon-trust:before { + content: "\e7ef"; +} + +.icon-superscript:before { + content: "\e8ef"; +} + +.icon-warning:before { + content: "\e7f0"; +} + +.icon-tag-subscript:before { + content: "\e8f0"; +} + +.icon-warehouse:before { + content: "\e7f1"; +} + +.icon-danjuzhuanhuan:before { + content: "\e8f1"; +} + +.icon-shoes:before { + content: "\e7f2"; +} + +.icon-Transfermoney:before { + content: "\e8f2"; +} + +.icon-video:before { + content: "\e7f3"; +} + +.icon-under-line:before { + content: "\e8f3"; +} + +.icon-viewlist:before { + content: "\e7f4"; +} + +.icon-xiakuangxian:before { + content: "\e8f4"; +} + +.icon-set:before { + content: "\e7f5"; +} + +.icon-shouqi:before { + content: "\e8f5"; +} + +.icon-store:before { + content: "\e7f6"; +} + +.icon-zhankai:before { + content: "\e8f6"; +} + +.icon-tool-hardware:before { + content: "\e7f7"; +} + +.icon-tongxunlu:before { + content: "\e8f7"; +} + +.icon-vs:before { + content: "\e7f8"; +} + +.icon-yiguanzhugongyingshang:before { + content: "\e8f8"; +} + +.icon-toy:before { + content: "\e7f9"; +} + +.icon-goumaipianhao:before { + content: "\e8f9"; +} + +.icon-sport:before { + content: "\e7fa"; +} + +.icon-Subscribe:before { + content: "\e8fa"; +} + +.icon-creditcard:before { + content: "\e7fb"; +} + +.icon-becomeagoldsupplier:before { + content: "\e8fb"; +} + +.icon-contacts:before { + content: "\e7fc"; +} + +.icon-new:before { + content: "\e8fc"; +} + +.icon-checkstand:before { + content: "\e7fd"; +} + +.icon-free:before { + content: "\e8fd"; +} + +.icon-aviation:before { + content: "\e7fe"; +} + +.icon-cad-fill:before { + content: "\e8fe"; +} + +.icon-Daytimemode:before { + content: "\e7ff"; +} + +.icon-robot:before { + content: "\e8ff"; +} + +.icon-infantmom:before { + content: "\e800"; +} + +.icon-inspection1:before { + content: "\e900"; +} + +.icon-discounts:before { + content: "\e801"; +} + +.icon-block:before { + content: "\e901"; +} + +.icon-invoice:before { + content: "\e802"; +} + +.icon-shouhuoicon:before { + content: "\e902"; +} + +.icon-insurance:before { + content: "\e803"; +} + +.icon-nightmode:before { + content: "\e804"; +} + +.icon-usercenter:before { + content: "\e805"; +} + +.icon-unlock:before { + content: "\e806"; +} + +.icon-vip:before { + content: "\e807"; +} + +.icon-wallet:before { + content: "\e808"; +} + +.icon-landtransportation:before { + content: "\e809"; +} + +.icon-voice:before { + content: "\e80a"; +} + +.icon-exchangerate:before { + content: "\e80b"; +} + +.icon-contacts-fill:before { + content: "\e80c"; +} + +.icon-add-account1:before { + content: "\e80d"; +} + +.icon-years-fill:before { + content: "\e80e"; +} + +.icon-add-cart-fill:before { + content: "\e80f"; +} + +.icon-add-fill:before { + content: "\e810"; +} + +.icon-all-fill1:before { + content: "\e811"; +} + +.icon-ashbin-fill:before { + content: "\e812"; +} + +.icon-calendar-fill:before { + content: "\e813"; +} + +.icon-bad-fill:before { + content: "\e814"; +} + +.icon-bussiness-man-fill:before { + content: "\e815"; +} + +.icon-atm-fill:before { + content: "\e816"; +} + +.icon-cart-full-fill:before { + content: "\e817"; +} + +.icon-cart-Empty-fill:before { + content: "\e818"; +} + +.icon-cameraswitching-fill:before { + content: "\e819"; +} + +.icon-atm-away-fill:before { + content: "\e81a"; +} + +.icon-certified-supplier-fill:before { + content: "\e81b"; +} + +.icon-calculator-fill:before { + content: "\e81c"; +} + +.icon-clock-fill:before { + content: "\e81d"; +} + +.icon-ali-clould-fill:before { + content: "\e81e"; +} + +.icon-color-fill:before { + content: "\e81f"; +} + +.icon-coupons-fill:before { + content: "\e820"; +} + +.icon-cecurity-protection-fill:before { + content: "\e821"; +} + +.icon-credit-level-fill:before { + content: "\e822"; +} + +.icon-auto:before { + content: "\e6eb"; +} + +.icon-default-template-fill:before { + content: "\e823"; +} + +.icon-all:before { + content: "\e6ef"; +} + +.icon-CurrencyConverter-fill:before { + content: "\e824"; +} + +.icon-bussiness-man:before { + content: "\e6f0"; +} + +.icon-Customermanagement-fill:before { + content: "\e825"; +} + +.icon-component:before { + content: "\e6f2"; +} + +.icon-discounts-fill:before { + content: "\e826"; +} + +.icon-code:before { + content: "\e6f3"; +} + +.icon-Daytimemode-fill:before { + content: "\e827"; +} + +.icon-copy:before { + content: "\e6f4"; +} + +.icon-exl-fill:before { + content: "\e828"; +} + +.icon-dollar:before { + content: "\e6f5"; +} + +.icon-cry-fill:before { + content: "\e829"; +} + +.icon-history:before { + content: "\e6f8"; +} + +.icon-email-fill:before { + content: "\e82a"; +} + +.icon-editor:before { + content: "\e6f6"; +} + +.icon-filter-fill:before { + content: "\e82b"; +} + +.icon-data:before { + content: "\e6f9"; +} + +.icon-folder-fill:before { + content: "\e82c"; +} + +.icon-gift:before { + content: "\e6fa"; +} + +.icon-feeds-fill:before { + content: "\e82d"; +} + +.icon-integral:before { + content: "\e6fb"; +} + +.icon-gold-supplie-fill:before { + content: "\e82e"; +} + +.icon-nav-list:before { + content: "\e6fd"; +} + +.icon-form-fill:before { + content: "\e82f"; +} + +.icon-pic:before { + content: "\e6ff"; +} + +.icon-camera-fill:before { + content: "\e830"; +} + +.icon-Notvisible:before { + content: "\e6fe"; +} + +.icon-good-fill:before { + content: "\e831"; +} + +.icon-play:before { + content: "\e701"; +} + +.icon-image-text-fill:before { + content: "\e832"; +} + +.icon-rising:before { + content: "\e703"; +} + +.icon-inspection-fill:before { + content: "\e833"; +} + +.icon-QRcode:before { + content: "\e704"; +} + +.icon-hot-fill:before { + content: "\e834"; +} + +.icon-rmb:before { + content: "\e705"; +} + +.icon-company-fill:before { + content: "\e835"; +} + +.icon-similar-product:before { + content: "\e707"; +} + +.icon-discount-fill:before { + content: "\e836"; +} + +.icon-Exportservices:before { + content: "\e702"; +} + +.icon-insurance-fill:before { + content: "\e837"; +} + +.icon-sendinquiry:before { + content: "\e70d"; +} + +.icon-inquiry-template-fill:before { + content: "\e838"; +} + +.icon-all-fill:before { + content: "\e718"; +} + +.icon-leftbutton-fill:before { + content: "\e839"; +} + +.icon-favorites-fill:before { + content: "\e721"; +} + +.icon-integral-fill1:before { + content: "\e83a"; +} + +.icon-integral-fill:before { + content: "\e726"; +} + +.icon-help1:before { + content: "\e83b"; +} + +.icon-namecard-fill:before { + content: "\e72a"; +} + +.icon-listing-content-fill:before { + content: "\e83c"; +} + +.icon-pic-fill:before { + content: "\e72e"; +} + +.icon-logistic-logo-fill:before { + content: "\e83d"; +} + +.icon-play-fill:before { + content: "\e72f"; +} + +.icon-Moneymanagement-fill:before { + content: "\e83e"; +} + +.icon-prompt-fill:before { + content: "\e730"; +} + +.icon-manage-order-fill:before { + content: "\e83f"; +} + +.icon-stop-fill:before { + content: "\e738"; +} + +.icon-multi-language-fill:before { + content: "\e840"; +} + +.icon-column:before { + content: "\e741"; +} + +.icon-logistics-icon-fill:before { + content: "\e841"; +} + +.icon-add-account:before { + content: "\e742"; +} + +.icon-Newuserzone-fill:before { + content: "\e842"; +} + +.icon-column1:before { + content: "\e743"; +} + +.icon-nightmode-fill:before { + content: "\e843"; +} + +.icon-add:before { + content: "\e744"; +} + +.icon-office-supplies-fill:before { + content: "\e844"; +} + +.icon-agriculture:before { + content: "\e745"; +} + +.icon-notice-fill:before { + content: "\e845"; +} + +.icon-years:before { + content: "\e746"; +} + +.icon-mute:before { + content: "\e846"; +} + +.icon-add-cart:before { + content: "\e747"; +} + +.icon-order-fill:before { + content: "\e847"; +} + +.icon-arrow-right:before { + content: "\e748"; +} + +.icon-password1:before { + content: "\e848"; +} + +.icon-arrow-left:before { + content: "\e749"; +} + +.icon-map1:before { + content: "\e849"; +} + +.icon-apparel:before { + content: "\e74a"; +} + +.icon-paylater-fill:before { + content: "\e84a"; +} + +.icon-all1:before { + content: "\e74b"; +} + +.icon-phone-fill:before { + content: "\e84b"; +} + +.icon-arrow-up:before { + content: "\e74c"; +} + +.icon-online-tracking-fill:before { + content: "\e84c"; +} + +.icon-ascending:before { + content: "\e74d"; +} + +.icon-play-fill1:before { + content: "\e84d"; +} + +.icon-ashbin:before { + content: "\e74e"; +} + +.icon-pdf-fill:before { + content: "\e84e"; +} + +.icon-atm:before { + content: "\e74f"; +} + +.icon-phone1:before { + content: "\e84f"; +} + +.icon-bad:before { + content: "\e750"; +} + +.icon-pin-fill:before { + content: "\e850"; +} + +.icon-attachent:before { + content: "\e751"; +} + +.icon-product-fill:before { + content: "\e851"; +} + +.icon-browse:before { + content: "\e752"; +} + +.icon-rankinglist-fill:before { + content: "\e852"; +} + +.icon-beauty:before { + content: "\e753"; +} + +.icon-reduce-fill:before { + content: "\e853"; +} + +.icon-atm-away:before { + content: "\e754"; +} + +.icon-reeor-fill:before { + content: "\e854"; +} + +.icon-assessed-badge:before { + content: "\e755"; +} + +.icon-pic-fill1:before { + content: "\e855"; +} + +.icon-auto1:before { + content: "\e756"; +} + +.icon-rankinglist:before { + content: "\e856"; +} + +.icon-bags:before { + content: "\e757"; +} + +.icon-product1:before { + content: "\e857"; +} + +.icon-calendar:before { + content: "\e758"; +} + +.icon-prompt-fill1:before { + content: "\e858"; +} + +.icon-cart-full:before { + content: "\e759"; +} + +.icon-resonserate-fill:before { + content: "\e859"; +} + +.icon-calculator:before { + content: "\e75a"; +} + +.icon-remind-fill:before { + content: "\e85a"; +} + +.icon-cameraswitching:before { + content: "\e75b"; +} + +.icon-Rightbutton-fill:before { + content: "\e85b"; +} + +.icon-cecurity-protection:before { + content: "\e75c"; +} + +.icon-RFQ-logo-fill:before { + content: "\e85c"; +} + +.icon-category:before { + content: "\e75d"; +} + +.icon-RFQ-word-fill:before { + content: "\e85d"; +} + +.icon-close:before { + content: "\e75e"; +} + +.icon-searchcart-fill:before { + content: "\e85e"; +} + +.icon-certified-supplier:before { + content: "\e75f"; +} + +.icon-salescenter-fill:before { + content: "\e85f"; +} + +.icon-cart-Empty:before { + content: "\e760"; +} + +.icon-save-fill:before { + content: "\e860"; +} + +.icon-code1:before { + content: "\e761"; +} + +.icon-security-fill:before { + content: "\e861"; +} + +.icon-color:before { + content: "\e762"; +} + +.icon-Similarproducts-fill:before { + content: "\e862"; +} + +.icon-conditions:before { + content: "\e763"; +} + +.icon-signboard-fill:before { + content: "\e863"; +} + +.icon-confirm:before { + content: "\e764"; +} + +.icon-service-fill:before { + content: "\e864"; +} + +.icon-company:before { + content: "\e765"; +} + +.icon-shuffling-banner-fill:before { + content: "\e865"; +} + +.icon-ali-clould:before { + content: "\e766"; +} + +.icon-supplier-features-fill:before { + content: "\e866"; +} + +.icon-copy1:before { + content: "\e767"; +} + +.icon-store-fill:before { + content: "\e867"; +} + +.icon-credit-level:before { + content: "\e768"; +} + +.icon-smile-fill:before { + content: "\e868"; +} + +.icon-coupons:before { + content: "\e769"; +} + +.icon-success-fill:before { + content: "\e869"; +} + +.icon-connections:before { + content: "\e76a"; +} + +.icon-sound-filling-fill:before { + content: "\e86a"; +} + +.icon-cry:before { + content: "\e76b"; +} + +.icon-sound-Mute1:before { + content: "\e86b"; +} + +.icon-costoms-alearance:before { + content: "\e76c"; +} + +.icon-suspended-fill:before { + content: "\e86c"; +} + +.icon-clock:before { + content: "\e76d"; +} + +.icon-tool-fill:before { + content: "\e86d"; +} + +.icon-CurrencyConverter:before { + content: "\e76e"; +} + +.icon-task-management-fill:before { + content: "\e86e"; +} + +.icon-cut:before { + content: "\e76f"; +} + +.icon-unlock-fill:before { + content: "\e86f"; +} + +.icon-data1:before { + content: "\e770"; +} + +.icon-trust-fill:before { + content: "\e870"; +} + +.icon-Customermanagement:before { + content: "\e771"; +} + +.icon-vip-fill:before { + content: "\e871"; +} + +.icon-descending:before { + content: "\e772"; +} + +.icon-set1:before { + content: "\e872"; +} + +.icon-double-arro-right:before { + content: "\e773"; +} + +.icon-Top-fill:before { + content: "\e873"; +} + +.icon-customization:before { + content: "\e774"; +} + +.icon-viewlarger1:before { + content: "\e874"; +} + +.icon-double-arrow-left:before { + content: "\e775"; +} + +.icon-voice-fill:before { + content: "\e875"; +} + +.icon-discount:before { + content: "\e776"; +} + +.icon-warning-fill:before { + content: "\e876"; +} + +.icon-download:before { + content: "\e777"; +} + +.icon-warehouse-fill:before { + content: "\e877"; +} + +.icon-dollar1:before { + content: "\e778"; +} + +.icon-zip-fill:before { + content: "\e878"; +} + +.icon-default-template:before { + content: "\e779"; +} + +.icon-trade-assurance-fill:before { + content: "\e879"; +} + +.icon-editor1:before { + content: "\e77a"; +} + +.icon-vs-fill:before { + content: "\e87a"; +} + +.icon-eletrical:before { + content: "\e77b"; +} + +.icon-video1:before { + content: "\e87b"; +} + +.icon-electronics:before { + content: "\e77c"; +} + +.icon-template-fill:before { + content: "\e87c"; +} + +.icon-etrical-equipm:before { + content: "\e77d"; +} + +.icon-wallet1:before { + content: "\e87d"; +} + diff --git a/kgBuilder-ui/public/static/icon/iconfont.js b/kgBuilder-ui/public/static/icon/iconfont.js new file mode 100644 index 0000000..80e29bd --- /dev/null +++ b/kgBuilder-ui/public/static/icon/iconfont.js @@ -0,0 +1 @@ +!function(a){var l,h,v,m,o,z='',c=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss"),i=function(a,l){l.parentNode.insertBefore(a,l)};if(c&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}function s(){o||(o=!0,v())}function t(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(t,50)}s()}l=function(){var a,l=document.createElement("div");l.innerHTML=z,z=null,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?i(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),l()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(v=l,m=a.document,o=!1,t(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,s())})}(window); \ No newline at end of file diff --git a/kgBuilder-ui/public/static/icon/iconfont.json b/kgBuilder-ui/public/static/icon/iconfont.json new file mode 100644 index 0000000..d0070ca --- /dev/null +++ b/kgBuilder-ui/public/static/icon/iconfont.json @@ -0,0 +1,3369 @@ +{ + "id": "3401951", + "name": "jk", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "11488037", + "name": "ellipsis", + "font_class": "ellipsis", + "unicode": "e77e", + "unicode_decimal": 59262 + }, + { + "icon_id": "11488542", + "name": "training", + "font_class": "training1", + "unicode": "e87e", + "unicode_decimal": 59518 + }, + { + "icon_id": "11488038", + "name": "email", + "font_class": "email", + "unicode": "e77f", + "unicode_decimal": 59263 + }, + { + "icon_id": "11488584", + "name": "packing-labeling-fill", + "font_class": "packing-labeling-fill", + "unicode": "e87f", + "unicode_decimal": 59519 + }, + { + "icon_id": "11488039", + "name": "falling", + "font_class": "falling", + "unicode": "e780", + "unicode_decimal": 59264 + }, + { + "icon_id": "11494362", + "name": "export services-fill", + "font_class": "Exportservices-fill", + "unicode": "e880", + "unicode_decimal": 59520 + }, + { + "icon_id": "11488040", + "name": "earth", + "font_class": "earth", + "unicode": "e781", + "unicode_decimal": 59265 + }, + { + "icon_id": "11494510", + "name": "brand-fill", + "font_class": "brand-fill", + "unicode": "e881", + "unicode_decimal": 59521 + }, + { + "icon_id": "11488041", + "name": "filter", + "font_class": "filter", + "unicode": "e782", + "unicode_decimal": 59266 + }, + { + "icon_id": "11494511", + "name": "collection", + "font_class": "collection", + "unicode": "e882", + "unicode_decimal": 59522 + }, + { + "icon_id": "11488042", + "name": "furniture", + "font_class": "furniture", + "unicode": "e783", + "unicode_decimal": 59267 + }, + { + "icon_id": "11494512", + "name": "consumption-fill", + "font_class": "consumption-fill", + "unicode": "e883", + "unicode_decimal": 59523 + }, + { + "icon_id": "11488043", + "name": "folder", + "font_class": "folder", + "unicode": "e784", + "unicode_decimal": 59268 + }, + { + "icon_id": "11494513", + "name": "collection-fill", + "font_class": "collection-fill", + "unicode": "e884", + "unicode_decimal": 59524 + }, + { + "icon_id": "11488044", + "name": "feeds", + "font_class": "feeds", + "unicode": "e785", + "unicode_decimal": 59269 + }, + { + "icon_id": "11494514", + "name": "brand", + "font_class": "brand", + "unicode": "e885", + "unicode_decimal": 59525 + }, + { + "icon_id": "11488047", + "name": "history", + "font_class": "history1", + "unicode": "e786", + "unicode_decimal": 59270 + }, + { + "icon_id": "11494515", + "name": "rejected-order-fill", + "font_class": "rejected-order-fill", + "unicode": "e886", + "unicode_decimal": 59526 + }, + { + "icon_id": "11488048", + "name": "hardware", + "font_class": "hardware", + "unicode": "e787", + "unicode_decimal": 59271 + }, + { + "icon_id": "11494516", + "name": "homepage-ads-fill", + "font_class": "homepage-ads-fill", + "unicode": "e887", + "unicode_decimal": 59527 + }, + { + "icon_id": "11488052", + "name": "help", + "font_class": "help", + "unicode": "e788", + "unicode_decimal": 59272 + }, + { + "icon_id": "11494517", + "name": "homepage-ads", + "font_class": "homepage-ads", + "unicode": "e888", + "unicode_decimal": 59528 + }, + { + "icon_id": "11488053", + "name": "good", + "font_class": "good", + "unicode": "e789", + "unicode_decimal": 59273 + }, + { + "icon_id": "11494518", + "name": "scenes-fill", + "font_class": "scenes-fill", + "unicode": "e889", + "unicode_decimal": 59529 + }, + { + "icon_id": "11488054", + "name": "Household appliances", + "font_class": "Householdappliances", + "unicode": "e78a", + "unicode_decimal": 59274 + }, + { + "icon_id": "11494519", + "name": "scenes", + "font_class": "scenes", + "unicode": "e88a", + "unicode_decimal": 59530 + }, + { + "icon_id": "11488055", + "name": "gift", + "font_class": "gift1", + "unicode": "e78b", + "unicode_decimal": 59275 + }, + { + "icon_id": "11494520", + "name": "similar-product-fill", + "font_class": "similar-product-fill", + "unicode": "e88b", + "unicode_decimal": 59531 + }, + { + "icon_id": "11488056", + "name": "form", + "font_class": "form", + "unicode": "e78c", + "unicode_decimal": 59276 + }, + { + "icon_id": "11494521", + "name": "topraning-fill", + "font_class": "topraning-fill", + "unicode": "e88c", + "unicode_decimal": 59532 + }, + { + "icon_id": "11488057", + "name": "image-text", + "font_class": "image-text", + "unicode": "e78d", + "unicode_decimal": 59277 + }, + { + "icon_id": "11494522", + "name": "consumption", + "font_class": "consumption", + "unicode": "e88d", + "unicode_decimal": 59533 + }, + { + "icon_id": "11488058", + "name": "hot", + "font_class": "hot", + "unicode": "e78e", + "unicode_decimal": 59278 + }, + { + "icon_id": "11494524", + "name": "topraning", + "font_class": "topraning", + "unicode": "e88e", + "unicode_decimal": 59534 + }, + { + "icon_id": "11488059", + "name": "inspection", + "font_class": "inspection", + "unicode": "e78f", + "unicode_decimal": 59279 + }, + { + "icon_id": "11494649", + "name": "gold-supplier", + "font_class": "gold-supplier", + "unicode": "e88f", + "unicode_decimal": 59535 + }, + { + "icon_id": "11488060", + "name": "left button", + "font_class": "leftbutton", + "unicode": "e790", + "unicode_decimal": 59280 + }, + { + "icon_id": "11494945", + "name": "message center-fill", + "font_class": "messagecenter-fill", + "unicode": "e890", + "unicode_decimal": 59536 + }, + { + "icon_id": "11488061", + "name": "jewelry", + "font_class": "jewelry", + "unicode": "e791", + "unicode_decimal": 59281 + }, + { + "icon_id": "11504134", + "name": "quick", + "font_class": "quick", + "unicode": "e891", + "unicode_decimal": 59537 + }, + { + "icon_id": "11488062", + "name": "ipad", + "font_class": "ipad", + "unicode": "e792", + "unicode_decimal": 59282 + }, + { + "icon_id": "11504135", + "name": "writing", + "font_class": "writing", + "unicode": "e892", + "unicode_decimal": 59538 + }, + { + "icon_id": "11488063", + "name": "left arrow", + "font_class": "leftarrow", + "unicode": "e793", + "unicode_decimal": 59283 + }, + { + "icon_id": "11504165", + "name": "doc-fill", + "font_class": "docjpge-fill", + "unicode": "e893", + "unicode_decimal": 59539 + }, + { + "icon_id": "11488064", + "name": "integral", + "font_class": "integral1", + "unicode": "e794", + "unicode_decimal": 59284 + }, + { + "icon_id": "11504166", + "name": "jpge-fill", + "font_class": "jpge-fill", + "unicode": "e894", + "unicode_decimal": 59540 + }, + { + "icon_id": "11488065", + "name": "kitchen", + "font_class": "kitchen", + "unicode": "e795", + "unicode_decimal": 59285 + }, + { + "icon_id": "11504167", + "name": "gif-fill", + "font_class": "gifjpge-fill", + "unicode": "e895", + "unicode_decimal": 59541 + }, + { + "icon_id": "11488066", + "name": "inquiry-template", + "font_class": "inquiry-template", + "unicode": "e796", + "unicode_decimal": 59286 + }, + { + "icon_id": "11504169", + "name": "bmp-fill", + "font_class": "bmpjpge-fill", + "unicode": "e896", + "unicode_decimal": 59542 + }, + { + "icon_id": "11488067", + "name": "link", + "font_class": "link", + "unicode": "e797", + "unicode_decimal": 59287 + }, + { + "icon_id": "11504172", + "name": "tif-fill", + "font_class": "tifjpge-fill", + "unicode": "e897", + "unicode_decimal": 59543 + }, + { + "icon_id": "11488068", + "name": "libra", + "font_class": "libra", + "unicode": "e798", + "unicode_decimal": 59288 + }, + { + "icon_id": "11504174", + "name": "png-fill", + "font_class": "pngjpge-fill", + "unicode": "e898", + "unicode_decimal": 59544 + }, + { + "icon_id": "11488069", + "name": "loading", + "font_class": "loading", + "unicode": "e799", + "unicode_decimal": 59289 + }, + { + "icon_id": "11674001", + "name": "home", + "font_class": "Hometextile", + "unicode": "e899", + "unicode_decimal": 59545 + }, + { + "icon_id": "11488070", + "name": "listing-content", + "font_class": "listing-content", + "unicode": "e79a", + "unicode_decimal": 59290 + }, + { + "icon_id": "11674090", + "name": "home", + "font_class": "home", + "unicode": "e89a", + "unicode_decimal": 59546 + }, + { + "icon_id": "11488071", + "name": "lights", + "font_class": "lights", + "unicode": "e79b", + "unicode_decimal": 59291 + }, + { + "icon_id": "11674114", + "name": "send inquiry-fill", + "font_class": "sendinquiry-fill", + "unicode": "e89b", + "unicode_decimal": 59547 + }, + { + "icon_id": "11488072", + "name": "logistics-icon", + "font_class": "logistics-icon", + "unicode": "e79c", + "unicode_decimal": 59292 + }, + { + "icon_id": "11674252", + "name": "comments-fill", + "font_class": "comments-fill", + "unicode": "e89c", + "unicode_decimal": 59548 + }, + { + "icon_id": "11488073", + "name": "message center", + "font_class": "messagecenter", + "unicode": "e79d", + "unicode_decimal": 59293 + }, + { + "icon_id": "11674755", + "name": "account-fill", + "font_class": "account-fill", + "unicode": "e89d", + "unicode_decimal": 59549 + }, + { + "icon_id": "11488074", + "name": "mobile-phone", + "font_class": "mobile-phone", + "unicode": "e79e", + "unicode_decimal": 59294 + }, + { + "icon_id": "11674772", + "name": "feed-logo-fill", + "font_class": "feed-logo-fill", + "unicode": "e89e", + "unicode_decimal": 59550 + }, + { + "icon_id": "11488075", + "name": "manage-order", + "font_class": "manage-order", + "unicode": "e79f", + "unicode_decimal": 59295 + }, + { + "icon_id": "11674773", + "name": "feed-logo", + "font_class": "feed-logo", + "unicode": "e89f", + "unicode_decimal": 59551 + }, + { + "icon_id": "11488077", + "name": "move", + "font_class": "move", + "unicode": "e7a0", + "unicode_decimal": 59296 + }, + { + "icon_id": "11674925", + "name": "home-fill", + "font_class": "home-fill", + "unicode": "e8a0", + "unicode_decimal": 59552 + }, + { + "icon_id": "11488078", + "name": "Money management", + "font_class": "Moneymanagement", + "unicode": "e7a1", + "unicode_decimal": 59297 + }, + { + "icon_id": "12011574", + "name": "add-select", + "font_class": "add-select", + "unicode": "e8a1", + "unicode_decimal": 59553 + }, + { + "icon_id": "11488079", + "name": "namecard", + "font_class": "namecard", + "unicode": "e7a2", + "unicode_decimal": 59298 + }, + { + "icon_id": "12011622", + "name": "sami-select", + "font_class": "sami-select", + "unicode": "e8a2", + "unicode_decimal": 59554 + }, + { + "icon_id": "11488080", + "name": "map", + "font_class": "map", + "unicode": "e7a3", + "unicode_decimal": 59299 + }, + { + "icon_id": "12011690", + "name": "camera", + "font_class": "camera", + "unicode": "e8a3", + "unicode_decimal": 59555 + }, + { + "icon_id": "11488081", + "name": "New user zone", + "font_class": "Newuserzone", + "unicode": "e7a4", + "unicode_decimal": 59300 + }, + { + "icon_id": "12011691", + "name": "arrow-down", + "font_class": "arrow-down", + "unicode": "e8a4", + "unicode_decimal": 59556 + }, + { + "icon_id": "11488082", + "name": "multi-language", + "font_class": "multi-language", + "unicode": "e7a5", + "unicode_decimal": 59301 + }, + { + "icon_id": "12011692", + "name": "account", + "font_class": "account", + "unicode": "e8a5", + "unicode_decimal": 59557 + }, + { + "icon_id": "11488083", + "name": "office", + "font_class": "office", + "unicode": "e7a6", + "unicode_decimal": 59302 + }, + { + "icon_id": "12011693", + "name": "comments", + "font_class": "comments", + "unicode": "e8a6", + "unicode_decimal": 59558 + }, + { + "icon_id": "11488084", + "name": "notice", + "font_class": "notice", + "unicode": "e7a7", + "unicode_decimal": 59303 + }, + { + "icon_id": "12011694", + "name": "cart-Empty", + "font_class": "cart-Empty1", + "unicode": "e8a7", + "unicode_decimal": 59559 + }, + { + "icon_id": "11488085", + "name": "on time shipment", + "font_class": "ontimeshipment", + "unicode": "e7a8", + "unicode_decimal": 59304 + }, + { + "icon_id": "12011695", + "name": "favorites", + "font_class": "favorites", + "unicode": "e8a8", + "unicode_decimal": 59560 + }, + { + "icon_id": "11488086", + "name": "office-supplies", + "font_class": "office-supplies", + "unicode": "e7a9", + "unicode_decimal": 59305 + }, + { + "icon_id": "12011696", + "name": "order", + "font_class": "order", + "unicode": "e8a9", + "unicode_decimal": 59561 + }, + { + "icon_id": "11488087", + "name": "password", + "font_class": "password", + "unicode": "e7aa", + "unicode_decimal": 59306 + }, + { + "icon_id": "12011697", + "name": "search", + "font_class": "search", + "unicode": "e8aa", + "unicode_decimal": 59562 + }, + { + "icon_id": "11488088", + "name": "Not visible", + "font_class": "Notvisible1", + "unicode": "e7ab", + "unicode_decimal": 59307 + }, + { + "icon_id": "12011698", + "name": "trade-assurance", + "font_class": "trade-assurance", + "unicode": "e8ab", + "unicode_decimal": 59563 + }, + { + "icon_id": "11488090", + "name": "operation", + "font_class": "operation", + "unicode": "e7ac", + "unicode_decimal": 59308 + }, + { + "icon_id": "12012147", + "name": "user center", + "font_class": "usercenter1", + "unicode": "e8ac", + "unicode_decimal": 59564 + }, + { + "icon_id": "11488091", + "name": "packaging", + "font_class": "packaging", + "unicode": "e7ad", + "unicode_decimal": 59309 + }, + { + "icon_id": "12012167", + "name": "trading data", + "font_class": "tradingdata", + "unicode": "e8ad", + "unicode_decimal": 59565 + }, + { + "icon_id": "11488092", + "name": "online-tracking", + "font_class": "online-tracking", + "unicode": "e7ae", + "unicode_decimal": 59310 + }, + { + "icon_id": "12707408", + "name": "microphone", + "font_class": "microphone", + "unicode": "e8ae", + "unicode_decimal": 59566 + }, + { + "icon_id": "11488093", + "name": "packing-labeling", + "font_class": "packing-labeling", + "unicode": "e7af", + "unicode_decimal": 59311 + }, + { + "icon_id": "12707837", + "name": "txt", + "font_class": "txt", + "unicode": "e8af", + "unicode_decimal": 59567 + }, + { + "icon_id": "11488094", + "name": "phone", + "font_class": "phone", + "unicode": "e7b0", + "unicode_decimal": 59312 + }, + { + "icon_id": "12707838", + "name": "xlsx", + "font_class": "xlsx", + "unicode": "e8b0", + "unicode_decimal": 59568 + }, + { + "icon_id": "11488095", + "name": "pic", + "font_class": "pic1", + "unicode": "e7b1", + "unicode_decimal": 59313 + }, + { + "icon_id": "13087821", + "name": "办证服务", + "font_class": "banzhengfuwu", + "unicode": "e8b1", + "unicode_decimal": 59569 + }, + { + "icon_id": "11488096", + "name": "pin", + "font_class": "pin", + "unicode": "e7b2", + "unicode_decimal": 59314 + }, + { + "icon_id": "13087822", + "name": "仓库", + "font_class": "cangku", + "unicode": "e8b2", + "unicode_decimal": 59570 + }, + { + "icon_id": "11488097", + "name": "play", + "font_class": "play1", + "unicode": "e7b3", + "unicode_decimal": 59315 + }, + { + "icon_id": "13087823", + "name": "代办财税", + "font_class": "daibancaishui", + "unicode": "e8b3", + "unicode_decimal": 59571 + }, + { + "icon_id": "11488098", + "name": "logistic-logo", + "font_class": "logistic-logo", + "unicode": "e7b4", + "unicode_decimal": 59316 + }, + { + "icon_id": "13087824", + "name": "集装箱", + "font_class": "jizhuangxiang", + "unicode": "e8b4", + "unicode_decimal": 59572 + }, + { + "icon_id": "11488099", + "name": "print", + "font_class": "print", + "unicode": "e7b5", + "unicode_decimal": 59317 + }, + { + "icon_id": "13087825", + "name": "角标", + "font_class": "jiaobiao", + "unicode": "e8b5", + "unicode_decimal": 59573 + }, + { + "icon_id": "11488100", + "name": "product", + "font_class": "product", + "unicode": "e7b6", + "unicode_decimal": 59318 + }, + { + "icon_id": "13087826", + "name": "客户盘点", + "font_class": "kehupandian", + "unicode": "e8b6", + "unicode_decimal": 59574 + }, + { + "icon_id": "11488101", + "name": "machinery", + "font_class": "machinery", + "unicode": "e7b7", + "unicode_decimal": 59319 + }, + { + "icon_id": "13087827", + "name": "动态", + "font_class": "dongtai", + "unicode": "e8b7", + "unicode_decimal": 59575 + }, + { + "icon_id": "11488102", + "name": "process", + "font_class": "process", + "unicode": "e7b8", + "unicode_decimal": 59320 + }, + { + "icon_id": "13087828", + "name": "贷款", + "font_class": "daikuan", + "unicode": "e8b8", + "unicode_decimal": 59576 + }, + { + "icon_id": "11488103", + "name": "prompt", + "font_class": "prompt", + "unicode": "e7b9", + "unicode_decimal": 59321 + }, + { + "icon_id": "13087829", + "name": "生意经", + "font_class": "shengyijing", + "unicode": "e8b9", + "unicode_decimal": 59577 + }, + { + "icon_id": "11488104", + "name": "QRcode", + "font_class": "QRcode1", + "unicode": "e7ba", + "unicode_decimal": 59322 + }, + { + "icon_id": "13087830", + "name": "结汇", + "font_class": "jiehui", + "unicode": "e8ba", + "unicode_decimal": 59578 + }, + { + "icon_id": "11488105", + "name": "reeor", + "font_class": "reeor", + "unicode": "e7bb", + "unicode_decimal": 59323 + }, + { + "icon_id": "13087831", + "name": "分层配置", + "font_class": "fencengpeizhi", + "unicode": "e8bb", + "unicode_decimal": 59579 + }, + { + "icon_id": "11488106", + "name": "reduce", + "font_class": "reduce", + "unicode": "e7bc", + "unicode_decimal": 59324 + }, + { + "icon_id": "13087832", + "name": "申请记录", + "font_class": "shenqingjilu", + "unicode": "e8bc", + "unicode_decimal": 59580 + }, + { + "icon_id": "11488107", + "name": "Non-staple food", + "font_class": "Non-staplefood", + "unicode": "e7bd", + "unicode_decimal": 59325 + }, + { + "icon_id": "13087833", + "name": "上传备案单证", + "font_class": "shangchuanbeiandanzheng", + "unicode": "e8bd", + "unicode_decimal": 59581 + }, + { + "icon_id": "11488108", + "name": "rejected-order", + "font_class": "rejected-order", + "unicode": "e7be", + "unicode_decimal": 59326 + }, + { + "icon_id": "13087834", + "name": "上传", + "font_class": "shangchuan", + "unicode": "e8be", + "unicode_decimal": 59582 + }, + { + "icon_id": "11488109", + "name": "resonse rate", + "font_class": "resonserate", + "unicode": "e7bf", + "unicode_decimal": 59327 + }, + { + "icon_id": "13087835", + "name": "客户权益", + "font_class": "kehuquanyi", + "unicode": "e8bf", + "unicode_decimal": 59583 + }, + { + "icon_id": "11488110", + "name": "remind", + "font_class": "remind", + "unicode": "e7c0", + "unicode_decimal": 59328 + }, + { + "icon_id": "13087836", + "name": "缩小", + "font_class": "suoxiao", + "unicode": "e8c0", + "unicode_decimal": 59584 + }, + { + "icon_id": "11488111", + "name": "response time", + "font_class": "responsetime", + "unicode": "e7c1", + "unicode_decimal": 59329 + }, + { + "icon_id": "13087837", + "name": "权益配置", + "font_class": "quanyipeizhi", + "unicode": "e8c1", + "unicode_decimal": 59585 + }, + { + "icon_id": "11488112", + "name": "return", + "font_class": "return", + "unicode": "e7c2", + "unicode_decimal": 59330 + }, + { + "icon_id": "13087838", + "name": "双审", + "font_class": "shuangshen", + "unicode": "e8c2", + "unicode_decimal": 59586 + }, + { + "icon_id": "11488113", + "name": "paylater", + "font_class": "paylater", + "unicode": "e7c3", + "unicode_decimal": 59331 + }, + { + "icon_id": "13087839", + "name": "通关", + "font_class": "tongguan", + "unicode": "e8c3", + "unicode_decimal": 59587 + }, + { + "icon_id": "11488114", + "name": "rising", + "font_class": "rising1", + "unicode": "e7c4", + "unicode_decimal": 59332 + }, + { + "icon_id": "13087840", + "name": "退税", + "font_class": "tuishui", + "unicode": "e8c4", + "unicode_decimal": 59588 + }, + { + "icon_id": "11488115", + "name": "Right arrow", + "font_class": "Rightarrow", + "unicode": "e7c5", + "unicode_decimal": 59333 + }, + { + "icon_id": "13087841", + "name": "通关数据", + "font_class": "tongguanshuju", + "unicode": "e8c5", + "unicode_decimal": 59589 + }, + { + "icon_id": "11488116", + "name": "rmb", + "font_class": "rmb1", + "unicode": "e7c6", + "unicode_decimal": 59334 + }, + { + "icon_id": "13087842", + "name": "快递物流", + "font_class": "kuaidiwuliu", + "unicode": "e8c6", + "unicode_decimal": 59590 + }, + { + "icon_id": "11488117", + "name": "RFQ-logo", + "font_class": "RFQ-logo", + "unicode": "e7c7", + "unicode_decimal": 59335 + }, + { + "icon_id": "13087843", + "name": "物流产品", + "font_class": "wuliuchanpin", + "unicode": "e8c7", + "unicode_decimal": 59591 + }, + { + "icon_id": "11488118", + "name": "save", + "font_class": "save", + "unicode": "e7c8", + "unicode_decimal": 59336 + }, + { + "icon_id": "13087844", + "name": "外汇数据", + "font_class": "waihuishuju", + "unicode": "e8c8", + "unicode_decimal": 59592 + }, + { + "icon_id": "11488120", + "name": "scanning", + "font_class": "scanning", + "unicode": "e7c9", + "unicode_decimal": 59337 + }, + { + "icon_id": "13087845", + "name": "信息bar_手机", + "font_class": "xinxibar_shouji", + "unicode": "e8c9", + "unicode_decimal": 59593 + }, + { + "icon_id": "11488121", + "name": "security", + "font_class": "security", + "unicode": "e7ca", + "unicode_decimal": 59338 + }, + { + "icon_id": "13087846", + "name": "新外综业务", + "font_class": "xinwaizongyewu", + "unicode": "e8ca", + "unicode_decimal": 59594 + }, + { + "icon_id": "11488122", + "name": "sales center", + "font_class": "salescenter", + "unicode": "e7cb", + "unicode_decimal": 59339 + }, + { + "icon_id": "13087847", + "name": "物流订单", + "font_class": "wuliudingdan", + "unicode": "e8cb", + "unicode_decimal": 59595 + }, + { + "icon_id": "11488125", + "name": "seleted", + "font_class": "seleted", + "unicode": "e7cc", + "unicode_decimal": 59340 + }, + { + "icon_id": "13087848", + "name": "中间人", + "font_class": "zhongjianren", + "unicode": "e8cc", + "unicode_decimal": 59596 + }, + { + "icon_id": "11488126", + "name": "search cart", + "font_class": "searchcart", + "unicode": "e7cd", + "unicode_decimal": 59341 + }, + { + "icon_id": "13087849", + "name": "信息bar_账户", + "font_class": "xinxibar_zhanghu", + "unicode": "e8cd", + "unicode_decimal": 59597 + }, + { + "icon_id": "11488127", + "name": "raw", + "font_class": "raw", + "unicode": "e7ce", + "unicode_decimal": 59342 + }, + { + "icon_id": "13087850", + "name": "一达通", + "font_class": "yidatong", + "unicode": "e8ce", + "unicode_decimal": 59598 + }, + { + "icon_id": "11488128", + "name": "service", + "font_class": "service", + "unicode": "e7cf", + "unicode_decimal": 59343 + }, + { + "icon_id": "13087851", + "name": "专业权威", + "font_class": "zhuanyequanwei", + "unicode": "e8cf", + "unicode_decimal": 59599 + }, + { + "icon_id": "11488129", + "name": "share", + "font_class": "share", + "unicode": "e7d0", + "unicode_decimal": 59344 + }, + { + "icon_id": "13087852", + "name": "账户操作", + "font_class": "zhanghucaozuo", + "unicode": "e8d0", + "unicode_decimal": 59600 + }, + { + "icon_id": "11488130", + "name": "signboard", + "font_class": "signboard", + "unicode": "e7d1", + "unicode_decimal": 59345 + }, + { + "icon_id": "13087853", + "name": "旋转90度", + "font_class": "xuanzhuandu", + "unicode": "e8d1", + "unicode_decimal": 59601 + }, + { + "icon_id": "11488131", + "name": "shuffling-banner", + "font_class": "shuffling-banner", + "unicode": "e7d2", + "unicode_decimal": 59346 + }, + { + "icon_id": "13087854", + "name": "退税融资", + "font_class": "tuishuirongzi", + "unicode": "e8d2", + "unicode_decimal": 59602 + }, + { + "icon_id": "11488132", + "name": "Right button", + "font_class": "Rightbutton", + "unicode": "e7d3", + "unicode_decimal": 59347 + }, + { + "icon_id": "13087855", + "name": "Add Products", + "font_class": "AddProducts", + "unicode": "e8d3", + "unicode_decimal": 59603 + }, + { + "icon_id": "11488134", + "name": "sorting", + "font_class": "sorting", + "unicode": "e7d4", + "unicode_decimal": 59348 + }, + { + "icon_id": "13087856", + "name": "自营业务", + "font_class": "ziyingyewu", + "unicode": "e8d4", + "unicode_decimal": 59604 + }, + { + "icon_id": "11488135", + "name": "sound-Mute", + "font_class": "sound-Mute", + "unicode": "e7d5", + "unicode_decimal": 59349 + }, + { + "icon_id": "13087857", + "name": "addcell", + "font_class": "addcell", + "unicode": "e8d5", + "unicode_decimal": 59605 + }, + { + "icon_id": "11488136", + "name": "category products", + "font_class": "Similarproducts", + "unicode": "e7d6", + "unicode_decimal": 59350 + }, + { + "icon_id": "13087858", + "name": "background-color", + "font_class": "background-color", + "unicode": "e8d6", + "unicode_decimal": 59606 + }, + { + "icon_id": "11488137", + "name": "sound-filling", + "font_class": "sound-filling", + "unicode": "e7d7", + "unicode_decimal": 59351 + }, + { + "icon_id": "13087859", + "name": "cascades", + "font_class": "cascades", + "unicode": "e8d7", + "unicode_decimal": 59607 + }, + { + "icon_id": "11488138", + "name": "suggest", + "font_class": "suggest", + "unicode": "e7d8", + "unicode_decimal": 59352 + }, + { + "icon_id": "13087860", + "name": "beijing", + "font_class": "beijing", + "unicode": "e8d8", + "unicode_decimal": 59608 + }, + { + "icon_id": "11488139", + "name": "stop", + "font_class": "stop", + "unicode": "e7d9", + "unicode_decimal": 59353 + }, + { + "icon_id": "13087861", + "name": "bold", + "font_class": "bold", + "unicode": "e8d9", + "unicode_decimal": 59609 + }, + { + "icon_id": "11488140", + "name": "success", + "font_class": "success", + "unicode": "e7da", + "unicode_decimal": 59354 + }, + { + "icon_id": "13087862", + "name": "资金", + "font_class": "zijin", + "unicode": "e8da", + "unicode_decimal": 59610 + }, + { + "icon_id": "11488141", + "name": "supplier-features", + "font_class": "supplier-features", + "unicode": "e7db", + "unicode_decimal": 59355 + }, + { + "icon_id": "13087863", + "name": "eraser", + "font_class": "eraser", + "unicode": "e8db", + "unicode_decimal": 59611 + }, + { + "icon_id": "11488142", + "name": "switch", + "font_class": "switch", + "unicode": "e7dc", + "unicode_decimal": 59356 + }, + { + "icon_id": "13087864", + "name": "centeralignment", + "font_class": "centeralignment", + "unicode": "e8dc", + "unicode_decimal": 59612 + }, + { + "icon_id": "11488143", + "name": "survey", + "font_class": "survey", + "unicode": "e7dd", + "unicode_decimal": 59357 + }, + { + "icon_id": "13087865", + "name": "click", + "font_class": "click", + "unicode": "e8dd", + "unicode_decimal": 59613 + }, + { + "icon_id": "11488144", + "name": "template", + "font_class": "template", + "unicode": "e7de", + "unicode_decimal": 59358 + }, + { + "icon_id": "13087866", + "name": "asp结算", + "font_class": "aspjiesuan", + "unicode": "e8de", + "unicode_decimal": 59614 + }, + { + "icon_id": "11488145", + "name": "text", + "font_class": "text", + "unicode": "e7df", + "unicode_decimal": 59359 + }, + { + "icon_id": "13087867", + "name": "flag", + "font_class": "flag", + "unicode": "e8df", + "unicode_decimal": 59615 + }, + { + "icon_id": "11488146", + "name": "suspended", + "font_class": "suspended", + "unicode": "e7e0", + "unicode_decimal": 59360 + }, + { + "icon_id": "13087868", + "name": "falg-fill", + "font_class": "falg-fill", + "unicode": "e8e0", + "unicode_decimal": 59616 + }, + { + "icon_id": "11488147", + "name": "task-management", + "font_class": "task-management", + "unicode": "e7e1", + "unicode_decimal": 59361 + }, + { + "icon_id": "13087869", + "name": "Fee", + "font_class": "Fee", + "unicode": "e8e1", + "unicode_decimal": 59617 + }, + { + "icon_id": "11488148", + "name": "tool", + "font_class": "tool", + "unicode": "e7e2", + "unicode_decimal": 59362 + }, + { + "icon_id": "13087870", + "name": "filling", + "font_class": "filling", + "unicode": "e8e2", + "unicode_decimal": 59618 + }, + { + "icon_id": "11488149", + "name": "top", + "font_class": "Top", + "unicode": "e7e3", + "unicode_decimal": 59363 + }, + { + "icon_id": "13087871", + "name": "Foreign currency", + "font_class": "Foreigncurrency", + "unicode": "e8e3", + "unicode_decimal": 59619 + }, + { + "icon_id": "11488150", + "name": "smile", + "font_class": "smile", + "unicode": "e7e4", + "unicode_decimal": 59364 + }, + { + "icon_id": "13087872", + "name": "guanliyuan", + "font_class": "guanliyuan", + "unicode": "e8e4", + "unicode_decimal": 59620 + }, + { + "icon_id": "11488151", + "name": "textile-products", + "font_class": "textile-products", + "unicode": "e7e5", + "unicode_decimal": 59365 + }, + { + "icon_id": "13087873", + "name": "language", + "font_class": "language", + "unicode": "e8e5", + "unicode_decimal": 59621 + }, + { + "icon_id": "11488152", + "name": "trade alert", + "font_class": "tradealert", + "unicode": "e7e6", + "unicode_decimal": 59366 + }, + { + "icon_id": "13087874", + "name": "leftalignment", + "font_class": "leftalignment", + "unicode": "e8e6", + "unicode_decimal": 59622 + }, + { + "icon_id": "11488153", + "name": "top sales", + "font_class": "topsales", + "unicode": "e7e7", + "unicode_decimal": 59367 + }, + { + "icon_id": "13087875", + "name": "extra-inquiries", + "font_class": "extra-inquiries", + "unicode": "e8e7", + "unicode_decimal": 59623 + }, + { + "icon_id": "11488154", + "name": "trading volume", + "font_class": "tradingvolume", + "unicode": "e7e8", + "unicode_decimal": 59368 + }, + { + "icon_id": "13087876", + "name": "Italic", + "font_class": "Italic", + "unicode": "e8e8", + "unicode_decimal": 59624 + }, + { + "icon_id": "11488155", + "name": "training", + "font_class": "training", + "unicode": "e7e9", + "unicode_decimal": 59369 + }, + { + "icon_id": "13087877", + "name": "pcm", + "font_class": "pcm", + "unicode": "e8e9", + "unicode_decimal": 59625 + }, + { + "icon_id": "11488156", + "name": "upload", + "font_class": "upload", + "unicode": "e7ea", + "unicode_decimal": 59370 + }, + { + "icon_id": "13087879", + "name": "reducecell", + "font_class": "reducecell", + "unicode": "e8ea", + "unicode_decimal": 59626 + }, + { + "icon_id": "11488157", + "name": "RFQ-word", + "font_class": "RFQ-word", + "unicode": "e7eb", + "unicode_decimal": 59371 + }, + { + "icon_id": "13087880", + "name": "rightalignment", + "font_class": "rightalignment", + "unicode": "e8eb", + "unicode_decimal": 59627 + }, + { + "icon_id": "11488158", + "name": "view larger", + "font_class": "viewlarger", + "unicode": "e7ec", + "unicode_decimal": 59372 + }, + { + "icon_id": "13087881", + "name": "pointerleft", + "font_class": "pointerleft", + "unicode": "e8ec", + "unicode_decimal": 59628 + }, + { + "icon_id": "11488159", + "name": "viewgallery", + "font_class": "viewgallery", + "unicode": "e7ed", + "unicode_decimal": 59373 + }, + { + "icon_id": "13087882", + "name": "subscript", + "font_class": "subscript", + "unicode": "e8ed", + "unicode_decimal": 59629 + }, + { + "icon_id": "11488161", + "name": "vehivles", + "font_class": "vehivles", + "unicode": "e7ee", + "unicode_decimal": 59374 + }, + { + "icon_id": "13087883", + "name": "square", + "font_class": "square", + "unicode": "e8ee", + "unicode_decimal": 59630 + }, + { + "icon_id": "11488162", + "name": "trust", + "font_class": "trust", + "unicode": "e7ef", + "unicode_decimal": 59375 + }, + { + "icon_id": "13087884", + "name": "superscript", + "font_class": "superscript", + "unicode": "e8ef", + "unicode_decimal": 59631 + }, + { + "icon_id": "11488163", + "name": "warning", + "font_class": "warning", + "unicode": "e7f0", + "unicode_decimal": 59376 + }, + { + "icon_id": "13087885", + "name": "tag-subscript", + "font_class": "tag-subscript", + "unicode": "e8f0", + "unicode_decimal": 59632 + }, + { + "icon_id": "11488164", + "name": "warehouse", + "font_class": "warehouse", + "unicode": "e7f1", + "unicode_decimal": 59377 + }, + { + "icon_id": "13087886", + "name": "单据转换", + "font_class": "danjuzhuanhuan", + "unicode": "e8f1", + "unicode_decimal": 59633 + }, + { + "icon_id": "11488165", + "name": "shoes", + "font_class": "shoes", + "unicode": "e7f2", + "unicode_decimal": 59378 + }, + { + "icon_id": "13087887", + "name": "Transfer money", + "font_class": "Transfermoney", + "unicode": "e8f2", + "unicode_decimal": 59634 + }, + { + "icon_id": "11488166", + "name": "video", + "font_class": "video", + "unicode": "e7f3", + "unicode_decimal": 59379 + }, + { + "icon_id": "13087888", + "name": "under-line", + "font_class": "under-line", + "unicode": "e8f3", + "unicode_decimal": 59635 + }, + { + "icon_id": "11488167", + "name": "viewlist", + "font_class": "viewlist", + "unicode": "e7f4", + "unicode_decimal": 59380 + }, + { + "icon_id": "13087889", + "name": "xiakuangxian", + "font_class": "xiakuangxian", + "unicode": "e8f4", + "unicode_decimal": 59636 + }, + { + "icon_id": "11488168", + "name": "set", + "font_class": "set", + "unicode": "e7f5", + "unicode_decimal": 59381 + }, + { + "icon_id": "13119205", + "name": "收起", + "font_class": "shouqi", + "unicode": "e8f5", + "unicode_decimal": 59637 + }, + { + "icon_id": "11488170", + "name": "store", + "font_class": "store", + "unicode": "e7f6", + "unicode_decimal": 59382 + }, + { + "icon_id": "13119206", + "name": "展开", + "font_class": "zhankai", + "unicode": "e8f6", + "unicode_decimal": 59638 + }, + { + "icon_id": "11488171", + "name": "tool-hardware", + "font_class": "tool-hardware", + "unicode": "e7f7", + "unicode_decimal": 59383 + }, + { + "icon_id": "13119207", + "name": "通讯录", + "font_class": "tongxunlu", + "unicode": "e8f7", + "unicode_decimal": 59639 + }, + { + "icon_id": "11488173", + "name": "vs", + "font_class": "vs", + "unicode": "e7f8", + "unicode_decimal": 59384 + }, + { + "icon_id": "13119208", + "name": "已关注供应商", + "font_class": "yiguanzhugongyingshang", + "unicode": "e8f8", + "unicode_decimal": 59640 + }, + { + "icon_id": "11488174", + "name": "toy", + "font_class": "toy", + "unicode": "e7f9", + "unicode_decimal": 59385 + }, + { + "icon_id": "13119209", + "name": "购买偏好", + "font_class": "goumaipianhao", + "unicode": "e8f9", + "unicode_decimal": 59641 + }, + { + "icon_id": "11488175", + "name": "sport", + "font_class": "sport", + "unicode": "e7fa", + "unicode_decimal": 59386 + }, + { + "icon_id": "13119211", + "name": "Subscribe", + "font_class": "Subscribe", + "unicode": "e8fa", + "unicode_decimal": 59642 + }, + { + "icon_id": "11488195", + "name": "credit card", + "font_class": "creditcard", + "unicode": "e7fb", + "unicode_decimal": 59387 + }, + { + "icon_id": "13119212", + "name": "become a gold supplier", + "font_class": "becomeagoldsupplier", + "unicode": "e8fb", + "unicode_decimal": 59643 + }, + { + "icon_id": "11488196", + "name": "contacts", + "font_class": "contacts", + "unicode": "e7fc", + "unicode_decimal": 59388 + }, + { + "icon_id": "13119213", + "name": "new", + "font_class": "new", + "unicode": "e8fc", + "unicode_decimal": 59644 + }, + { + "icon_id": "11488197", + "name": "checkstand", + "font_class": "checkstand", + "unicode": "e7fd", + "unicode_decimal": 59389 + }, + { + "icon_id": "13119376", + "name": "free", + "font_class": "free", + "unicode": "e8fd", + "unicode_decimal": 59645 + }, + { + "icon_id": "11488198", + "name": "aviation", + "font_class": "aviation", + "unicode": "e7fe", + "unicode_decimal": 59390 + }, + { + "icon_id": "13254178", + "name": "cad-fill", + "font_class": "cad-fill", + "unicode": "e8fe", + "unicode_decimal": 59646 + }, + { + "icon_id": "11488199", + "name": "Daytime mode", + "font_class": "Daytimemode", + "unicode": "e7ff", + "unicode_decimal": 59391 + }, + { + "icon_id": "13442410", + "name": "robot", + "font_class": "robot", + "unicode": "e8ff", + "unicode_decimal": 59647 + }, + { + "icon_id": "11488200", + "name": "infant & mom", + "font_class": "infantmom", + "unicode": "e800", + "unicode_decimal": 59392 + }, + { + "icon_id": "13814197", + "name": "inspection", + "font_class": "inspection1", + "unicode": "e900", + "unicode_decimal": 59648 + }, + { + "icon_id": "11488201", + "name": "discounts", + "font_class": "discounts", + "unicode": "e801", + "unicode_decimal": 59393 + }, + { + "icon_id": "14041617", + "name": "block", + "font_class": "block", + "unicode": "e901", + "unicode_decimal": 59649 + }, + { + "icon_id": "11488203", + "name": "invoice", + "font_class": "invoice", + "unicode": "e802", + "unicode_decimal": 59394 + }, + { + "icon_id": "18696589", + "name": "收货icon", + "font_class": "shouhuoicon", + "unicode": "e902", + "unicode_decimal": 59650 + }, + { + "icon_id": "11488204", + "name": "insurance", + "font_class": "insurance", + "unicode": "e803", + "unicode_decimal": 59395 + }, + { + "icon_id": "11488205", + "name": "night mode", + "font_class": "nightmode", + "unicode": "e804", + "unicode_decimal": 59396 + }, + { + "icon_id": "11488206", + "name": "user center", + "font_class": "usercenter", + "unicode": "e805", + "unicode_decimal": 59397 + }, + { + "icon_id": "11488207", + "name": "unlock", + "font_class": "unlock", + "unicode": "e806", + "unicode_decimal": 59398 + }, + { + "icon_id": "11488209", + "name": "vip", + "font_class": "vip", + "unicode": "e807", + "unicode_decimal": 59399 + }, + { + "icon_id": "11488210", + "name": "wallet", + "font_class": "wallet", + "unicode": "e808", + "unicode_decimal": 59400 + }, + { + "icon_id": "11488211", + "name": "land transportation", + "font_class": "landtransportation", + "unicode": "e809", + "unicode_decimal": 59401 + }, + { + "icon_id": "11488212", + "name": "voice", + "font_class": "voice", + "unicode": "e80a", + "unicode_decimal": 59402 + }, + { + "icon_id": "11488213", + "name": "exchange rate", + "font_class": "exchangerate", + "unicode": "e80b", + "unicode_decimal": 59403 + }, + { + "icon_id": "11488221", + "name": "contacts-fill", + "font_class": "contacts-fill", + "unicode": "e80c", + "unicode_decimal": 59404 + }, + { + "icon_id": "11488222", + "name": "add-account", + "font_class": "add-account1", + "unicode": "e80d", + "unicode_decimal": 59405 + }, + { + "icon_id": "11488223", + "name": "2years-fill", + "font_class": "years-fill", + "unicode": "e80e", + "unicode_decimal": 59406 + }, + { + "icon_id": "11488224", + "name": "add-cart-fill", + "font_class": "add-cart-fill", + "unicode": "e80f", + "unicode_decimal": 59407 + }, + { + "icon_id": "11488225", + "name": "add-fill", + "font_class": "add-fill", + "unicode": "e810", + "unicode_decimal": 59408 + }, + { + "icon_id": "11488226", + "name": "all-fill", + "font_class": "all-fill1", + "unicode": "e811", + "unicode_decimal": 59409 + }, + { + "icon_id": "11488227", + "name": "ashbin-fill", + "font_class": "ashbin-fill", + "unicode": "e812", + "unicode_decimal": 59410 + }, + { + "icon_id": "11488228", + "name": "calendar-fill", + "font_class": "calendar-fill", + "unicode": "e813", + "unicode_decimal": 59411 + }, + { + "icon_id": "11488229", + "name": "bad-fill", + "font_class": "bad-fill", + "unicode": "e814", + "unicode_decimal": 59412 + }, + { + "icon_id": "11488230", + "name": "bussiness-man-fill", + "font_class": "bussiness-man-fill", + "unicode": "e815", + "unicode_decimal": 59413 + }, + { + "icon_id": "11488231", + "name": "atm-fill", + "font_class": "atm-fill", + "unicode": "e816", + "unicode_decimal": 59414 + }, + { + "icon_id": "11488232", + "name": "cart- full-fill", + "font_class": "cart-full-fill", + "unicode": "e817", + "unicode_decimal": 59415 + }, + { + "icon_id": "11488233", + "name": "cart-Empty-fill", + "font_class": "cart-Empty-fill", + "unicode": "e818", + "unicode_decimal": 59416 + }, + { + "icon_id": "11488234", + "name": "camera switching-fill", + "font_class": "cameraswitching-fill", + "unicode": "e819", + "unicode_decimal": 59417 + }, + { + "icon_id": "11488235", + "name": "atm-away-fill", + "font_class": "atm-away-fill", + "unicode": "e81a", + "unicode_decimal": 59418 + }, + { + "icon_id": "11488236", + "name": "certified-supplier-fill", + "font_class": "certified-supplier-fill", + "unicode": "e81b", + "unicode_decimal": 59419 + }, + { + "icon_id": "11488237", + "name": "calculator-fill", + "font_class": "calculator-fill", + "unicode": "e81c", + "unicode_decimal": 59420 + }, + { + "icon_id": "11488238", + "name": "clock-fill", + "font_class": "clock-fill", + "unicode": "e81d", + "unicode_decimal": 59421 + }, + { + "icon_id": "11488239", + "name": "ali-clould-fill", + "font_class": "ali-clould-fill", + "unicode": "e81e", + "unicode_decimal": 59422 + }, + { + "icon_id": "11488240", + "name": "color-fill", + "font_class": "color-fill", + "unicode": "e81f", + "unicode_decimal": 59423 + }, + { + "icon_id": "11488241", + "name": "coupons-fill", + "font_class": "coupons-fill", + "unicode": "e820", + "unicode_decimal": 59424 + }, + { + "icon_id": "11488243", + "name": "cecurity-protection-fill", + "font_class": "cecurity-protection-fill", + "unicode": "e821", + "unicode_decimal": 59425 + }, + { + "icon_id": "11488245", + "name": "credit-level-fill", + "font_class": "credit-level-fill", + "unicode": "e822", + "unicode_decimal": 59426 + }, + { + "icon_id": "11474203", + "name": "auto", + "font_class": "auto", + "unicode": "e6eb", + "unicode_decimal": 59115 + }, + { + "icon_id": "11488246", + "name": "default-template-fill", + "font_class": "default-template-fill", + "unicode": "e823", + "unicode_decimal": 59427 + }, + { + "icon_id": "11474219", + "name": "all", + "font_class": "all", + "unicode": "e6ef", + "unicode_decimal": 59119 + }, + { + "icon_id": "11488247", + "name": "Currency Converter-fill", + "font_class": "CurrencyConverter-fill", + "unicode": "e824", + "unicode_decimal": 59428 + }, + { + "icon_id": "11474220", + "name": "bussiness-man", + "font_class": "bussiness-man", + "unicode": "e6f0", + "unicode_decimal": 59120 + }, + { + "icon_id": "11488248", + "name": "Customer management-fill", + "font_class": "Customermanagement-fill", + "unicode": "e825", + "unicode_decimal": 59429 + }, + { + "icon_id": "11474234", + "name": "component", + "font_class": "component", + "unicode": "e6f2", + "unicode_decimal": 59122 + }, + { + "icon_id": "11488249", + "name": "discounts-fill", + "font_class": "discounts-fill", + "unicode": "e826", + "unicode_decimal": 59430 + }, + { + "icon_id": "11474242", + "name": "code", + "font_class": "code", + "unicode": "e6f3", + "unicode_decimal": 59123 + }, + { + "icon_id": "11488250", + "name": "Daytime mode-fill", + "font_class": "Daytimemode-fill", + "unicode": "e827", + "unicode_decimal": 59431 + }, + { + "icon_id": "11474243", + "name": "copy", + "font_class": "copy", + "unicode": "e6f4", + "unicode_decimal": 59124 + }, + { + "icon_id": "11488251", + "name": "exl-fill", + "font_class": "exl-fill", + "unicode": "e828", + "unicode_decimal": 59432 + }, + { + "icon_id": "11474255", + "name": "dollar", + "font_class": "dollar", + "unicode": "e6f5", + "unicode_decimal": 59125 + }, + { + "icon_id": "11488252", + "name": "cry-fill", + "font_class": "cry-fill", + "unicode": "e829", + "unicode_decimal": 59433 + }, + { + "icon_id": "11474270", + "name": "history", + "font_class": "history", + "unicode": "e6f8", + "unicode_decimal": 59128 + }, + { + "icon_id": "11488253", + "name": "email-fill", + "font_class": "email-fill", + "unicode": "e82a", + "unicode_decimal": 59434 + }, + { + "icon_id": "11474272", + "name": "editor", + "font_class": "editor", + "unicode": "e6f6", + "unicode_decimal": 59126 + }, + { + "icon_id": "11488254", + "name": "filter-fill", + "font_class": "filter-fill", + "unicode": "e82b", + "unicode_decimal": 59435 + }, + { + "icon_id": "11474277", + "name": "data", + "font_class": "data", + "unicode": "e6f9", + "unicode_decimal": 59129 + }, + { + "icon_id": "11488256", + "name": "folder-fill", + "font_class": "folder-fill", + "unicode": "e82c", + "unicode_decimal": 59436 + }, + { + "icon_id": "11474278", + "name": "gift", + "font_class": "gift", + "unicode": "e6fa", + "unicode_decimal": 59130 + }, + { + "icon_id": "11488257", + "name": "feeds-fill", + "font_class": "feeds-fill", + "unicode": "e82d", + "unicode_decimal": 59437 + }, + { + "icon_id": "11474291", + "name": "integral", + "font_class": "integral", + "unicode": "e6fb", + "unicode_decimal": 59131 + }, + { + "icon_id": "11488258", + "name": "gold-supplie-fill", + "font_class": "gold-supplie-fill", + "unicode": "e82e", + "unicode_decimal": 59438 + }, + { + "icon_id": "11474302", + "name": "nav-list", + "font_class": "nav-list", + "unicode": "e6fd", + "unicode_decimal": 59133 + }, + { + "icon_id": "11488259", + "name": "form-fill", + "font_class": "form-fill", + "unicode": "e82f", + "unicode_decimal": 59439 + }, + { + "icon_id": "11474312", + "name": "pic", + "font_class": "pic", + "unicode": "e6ff", + "unicode_decimal": 59135 + }, + { + "icon_id": "11488261", + "name": "camera-fill", + "font_class": "camera-fill", + "unicode": "e830", + "unicode_decimal": 59440 + }, + { + "icon_id": "11474313", + "name": "Not visible", + "font_class": "Notvisible", + "unicode": "e6fe", + "unicode_decimal": 59134 + }, + { + "icon_id": "11488262", + "name": "good-fill", + "font_class": "good-fill", + "unicode": "e831", + "unicode_decimal": 59441 + }, + { + "icon_id": "11474324", + "name": "play", + "font_class": "play", + "unicode": "e701", + "unicode_decimal": 59137 + }, + { + "icon_id": "11488264", + "name": "image-text-fill", + "font_class": "image-text-fill", + "unicode": "e832", + "unicode_decimal": 59442 + }, + { + "icon_id": "11474331", + "name": "rising", + "font_class": "rising", + "unicode": "e703", + "unicode_decimal": 59139 + }, + { + "icon_id": "11488265", + "name": "inspection-fill", + "font_class": "inspection-fill", + "unicode": "e833", + "unicode_decimal": 59443 + }, + { + "icon_id": "11474335", + "name": "QRcode", + "font_class": "QRcode", + "unicode": "e704", + "unicode_decimal": 59140 + }, + { + "icon_id": "11488266", + "name": "hot-fill", + "font_class": "hot-fill", + "unicode": "e834", + "unicode_decimal": 59444 + }, + { + "icon_id": "11474340", + "name": "rmb", + "font_class": "rmb", + "unicode": "e705", + "unicode_decimal": 59141 + }, + { + "icon_id": "11488267", + "name": "company-fill", + "font_class": "company-fill", + "unicode": "e835", + "unicode_decimal": 59445 + }, + { + "icon_id": "11474353", + "name": "similar-product", + "font_class": "similar-product", + "unicode": "e707", + "unicode_decimal": 59143 + }, + { + "icon_id": "11488269", + "name": "discount-fill", + "font_class": "discount-fill", + "unicode": "e836", + "unicode_decimal": 59446 + }, + { + "icon_id": "11474371", + "name": "export services", + "font_class": "Exportservices", + "unicode": "e702", + "unicode_decimal": 59138 + }, + { + "icon_id": "11488270", + "name": "insurance-fill", + "font_class": "insurance-fill", + "unicode": "e837", + "unicode_decimal": 59447 + }, + { + "icon_id": "11474399", + "name": "send inquiry", + "font_class": "sendinquiry", + "unicode": "e70d", + "unicode_decimal": 59149 + }, + { + "icon_id": "11488271", + "name": "inquiry-template-fill", + "font_class": "inquiry-template-fill", + "unicode": "e838", + "unicode_decimal": 59448 + }, + { + "icon_id": "11481287", + "name": "all-fill", + "font_class": "all-fill", + "unicode": "e718", + "unicode_decimal": 59160 + }, + { + "icon_id": "11488272", + "name": "left button-fill", + "font_class": "leftbutton-fill", + "unicode": "e839", + "unicode_decimal": 59449 + }, + { + "icon_id": "11481317", + "name": "favorites-fill", + "font_class": "favorites-fill", + "unicode": "e721", + "unicode_decimal": 59169 + }, + { + "icon_id": "11488273", + "name": "integral-fill", + "font_class": "integral-fill1", + "unicode": "e83a", + "unicode_decimal": 59450 + }, + { + "icon_id": "11481334", + "name": "integral-fill", + "font_class": "integral-fill", + "unicode": "e726", + "unicode_decimal": 59174 + }, + { + "icon_id": "11488274", + "name": "help", + "font_class": "help1", + "unicode": "e83b", + "unicode_decimal": 59451 + }, + { + "icon_id": "11481342", + "name": "namecard-fill", + "font_class": "namecard-fill", + "unicode": "e72a", + "unicode_decimal": 59178 + }, + { + "icon_id": "11488275", + "name": "listing-content-fill", + "font_class": "listing-content-fill", + "unicode": "e83c", + "unicode_decimal": 59452 + }, + { + "icon_id": "11481356", + "name": "pic-fill", + "font_class": "pic-fill", + "unicode": "e72e", + "unicode_decimal": 59182 + }, + { + "icon_id": "11488276", + "name": "logistic-logo-fill", + "font_class": "logistic-logo-fill", + "unicode": "e83d", + "unicode_decimal": 59453 + }, + { + "icon_id": "11481357", + "name": "play-fill", + "font_class": "play-fill", + "unicode": "e72f", + "unicode_decimal": 59183 + }, + { + "icon_id": "11488278", + "name": "Money management-fill", + "font_class": "Moneymanagement-fill", + "unicode": "e83e", + "unicode_decimal": 59454 + }, + { + "icon_id": "11481359", + "name": "prompt-fill", + "font_class": "prompt-fill", + "unicode": "e730", + "unicode_decimal": 59184 + }, + { + "icon_id": "11488279", + "name": "manage-order-fill", + "font_class": "manage-order-fill", + "unicode": "e83f", + "unicode_decimal": 59455 + }, + { + "icon_id": "11481382", + "name": "stop-fill", + "font_class": "stop-fill", + "unicode": "e738", + "unicode_decimal": 59192 + }, + { + "icon_id": "11488280", + "name": "multi-language-fill", + "font_class": "multi-language-fill", + "unicode": "e840", + "unicode_decimal": 59456 + }, + { + "icon_id": "11487969", + "name": "3column", + "font_class": "column", + "unicode": "e741", + "unicode_decimal": 59201 + }, + { + "icon_id": "11488281", + "name": "logistics-icon-fill", + "font_class": "logistics-icon-fill", + "unicode": "e841", + "unicode_decimal": 59457 + }, + { + "icon_id": "11487970", + "name": "add-account", + "font_class": "add-account", + "unicode": "e742", + "unicode_decimal": 59202 + }, + { + "icon_id": "11488282", + "name": "New user zone-fill", + "font_class": "Newuserzone-fill", + "unicode": "e842", + "unicode_decimal": 59458 + }, + { + "icon_id": "11487971", + "name": "4column", + "font_class": "column1", + "unicode": "e743", + "unicode_decimal": 59203 + }, + { + "icon_id": "11488283", + "name": "night mode-fill", + "font_class": "nightmode-fill", + "unicode": "e843", + "unicode_decimal": 59459 + }, + { + "icon_id": "11487973", + "name": "add", + "font_class": "add", + "unicode": "e744", + "unicode_decimal": 59204 + }, + { + "icon_id": "11488284", + "name": "office-supplies-fill", + "font_class": "office-supplies-fill", + "unicode": "e844", + "unicode_decimal": 59460 + }, + { + "icon_id": "11487974", + "name": "agriculture", + "font_class": "agriculture", + "unicode": "e745", + "unicode_decimal": 59205 + }, + { + "icon_id": "11488285", + "name": "notice-fill", + "font_class": "notice-fill", + "unicode": "e845", + "unicode_decimal": 59461 + }, + { + "icon_id": "11487975", + "name": "2years", + "font_class": "years", + "unicode": "e746", + "unicode_decimal": 59206 + }, + { + "icon_id": "11488286", + "name": "mute", + "font_class": "mute", + "unicode": "e846", + "unicode_decimal": 59462 + }, + { + "icon_id": "11487976", + "name": "add-cart", + "font_class": "add-cart", + "unicode": "e747", + "unicode_decimal": 59207 + }, + { + "icon_id": "11488288", + "name": "order-fill", + "font_class": "order-fill", + "unicode": "e847", + "unicode_decimal": 59463 + }, + { + "icon_id": "11487977", + "name": "arrow-right", + "font_class": "arrow-right", + "unicode": "e748", + "unicode_decimal": 59208 + }, + { + "icon_id": "11488289", + "name": "password", + "font_class": "password1", + "unicode": "e848", + "unicode_decimal": 59464 + }, + { + "icon_id": "11487978", + "name": "arrow-left", + "font_class": "arrow-left", + "unicode": "e749", + "unicode_decimal": 59209 + }, + { + "icon_id": "11488290", + "name": "map", + "font_class": "map1", + "unicode": "e849", + "unicode_decimal": 59465 + }, + { + "icon_id": "11487980", + "name": "apparel", + "font_class": "apparel", + "unicode": "e74a", + "unicode_decimal": 59210 + }, + { + "icon_id": "11488291", + "name": "paylater-fill", + "font_class": "paylater-fill", + "unicode": "e84a", + "unicode_decimal": 59466 + }, + { + "icon_id": "11487981", + "name": "all", + "font_class": "all1", + "unicode": "e74b", + "unicode_decimal": 59211 + }, + { + "icon_id": "11488292", + "name": "phone-fill", + "font_class": "phone-fill", + "unicode": "e84b", + "unicode_decimal": 59467 + }, + { + "icon_id": "11487982", + "name": "arrow-up", + "font_class": "arrow-up", + "unicode": "e74c", + "unicode_decimal": 59212 + }, + { + "icon_id": "11488293", + "name": "online-tracking-fill", + "font_class": "online-tracking-fill", + "unicode": "e84c", + "unicode_decimal": 59468 + }, + { + "icon_id": "11487983", + "name": "ascending", + "font_class": "ascending", + "unicode": "e74d", + "unicode_decimal": 59213 + }, + { + "icon_id": "11488294", + "name": "play-fill", + "font_class": "play-fill1", + "unicode": "e84d", + "unicode_decimal": 59469 + }, + { + "icon_id": "11487984", + "name": "ashbin", + "font_class": "ashbin", + "unicode": "e74e", + "unicode_decimal": 59214 + }, + { + "icon_id": "11488295", + "name": "pdf-fill", + "font_class": "pdf-fill", + "unicode": "e84e", + "unicode_decimal": 59470 + }, + { + "icon_id": "11487985", + "name": "atm", + "font_class": "atm", + "unicode": "e74f", + "unicode_decimal": 59215 + }, + { + "icon_id": "11488297", + "name": "phone", + "font_class": "phone1", + "unicode": "e84f", + "unicode_decimal": 59471 + }, + { + "icon_id": "11487986", + "name": "bad", + "font_class": "bad", + "unicode": "e750", + "unicode_decimal": 59216 + }, + { + "icon_id": "11488298", + "name": "pin-fill", + "font_class": "pin-fill", + "unicode": "e850", + "unicode_decimal": 59472 + }, + { + "icon_id": "11487987", + "name": "attachent", + "font_class": "attachent", + "unicode": "e751", + "unicode_decimal": 59217 + }, + { + "icon_id": "11488299", + "name": "product-fill", + "font_class": "product-fill", + "unicode": "e851", + "unicode_decimal": 59473 + }, + { + "icon_id": "11487988", + "name": "browse", + "font_class": "browse", + "unicode": "e752", + "unicode_decimal": 59218 + }, + { + "icon_id": "11488300", + "name": "ranking list-fill", + "font_class": "rankinglist-fill", + "unicode": "e852", + "unicode_decimal": 59474 + }, + { + "icon_id": "11487989", + "name": "beauty", + "font_class": "beauty", + "unicode": "e753", + "unicode_decimal": 59219 + }, + { + "icon_id": "11488301", + "name": "reduce-fill", + "font_class": "reduce-fill", + "unicode": "e853", + "unicode_decimal": 59475 + }, + { + "icon_id": "11487990", + "name": "atm-away", + "font_class": "atm-away", + "unicode": "e754", + "unicode_decimal": 59220 + }, + { + "icon_id": "11488302", + "name": "reeor-fill", + "font_class": "reeor-fill", + "unicode": "e854", + "unicode_decimal": 59476 + }, + { + "icon_id": "11487991", + "name": "assessed-badge", + "font_class": "assessed-badge", + "unicode": "e755", + "unicode_decimal": 59221 + }, + { + "icon_id": "11488303", + "name": "pic-fill", + "font_class": "pic-fill1", + "unicode": "e855", + "unicode_decimal": 59477 + }, + { + "icon_id": "11487992", + "name": "auto", + "font_class": "auto1", + "unicode": "e756", + "unicode_decimal": 59222 + }, + { + "icon_id": "11488304", + "name": "ranking list", + "font_class": "rankinglist", + "unicode": "e856", + "unicode_decimal": 59478 + }, + { + "icon_id": "11487993", + "name": "bags", + "font_class": "bags", + "unicode": "e757", + "unicode_decimal": 59223 + }, + { + "icon_id": "11488305", + "name": "product", + "font_class": "product1", + "unicode": "e857", + "unicode_decimal": 59479 + }, + { + "icon_id": "11487994", + "name": "calendar", + "font_class": "calendar", + "unicode": "e758", + "unicode_decimal": 59224 + }, + { + "icon_id": "11488306", + "name": "prompt-fill", + "font_class": "prompt-fill1", + "unicode": "e858", + "unicode_decimal": 59480 + }, + { + "icon_id": "11487995", + "name": "cart- full", + "font_class": "cart-full", + "unicode": "e759", + "unicode_decimal": 59225 + }, + { + "icon_id": "11488307", + "name": "resonse rate-fill", + "font_class": "resonserate-fill", + "unicode": "e859", + "unicode_decimal": 59481 + }, + { + "icon_id": "11487997", + "name": "calculator", + "font_class": "calculator", + "unicode": "e75a", + "unicode_decimal": 59226 + }, + { + "icon_id": "11488308", + "name": "remind-fill", + "font_class": "remind-fill", + "unicode": "e85a", + "unicode_decimal": 59482 + }, + { + "icon_id": "11487998", + "name": "camera switching", + "font_class": "cameraswitching", + "unicode": "e75b", + "unicode_decimal": 59227 + }, + { + "icon_id": "11488309", + "name": "Right button-fill", + "font_class": "Rightbutton-fill", + "unicode": "e85b", + "unicode_decimal": 59483 + }, + { + "icon_id": "11487999", + "name": "cecurity-protection", + "font_class": "cecurity-protection", + "unicode": "e75c", + "unicode_decimal": 59228 + }, + { + "icon_id": "11488310", + "name": "RFQ-logo-fill", + "font_class": "RFQ-logo-fill", + "unicode": "e85c", + "unicode_decimal": 59484 + }, + { + "icon_id": "11488000", + "name": "category", + "font_class": "category", + "unicode": "e75d", + "unicode_decimal": 59229 + }, + { + "icon_id": "11488311", + "name": "RFQ-word-fill", + "font_class": "RFQ-word-fill", + "unicode": "e85d", + "unicode_decimal": 59485 + }, + { + "icon_id": "11488001", + "name": "close", + "font_class": "close", + "unicode": "e75e", + "unicode_decimal": 59230 + }, + { + "icon_id": "11488312", + "name": "search cart-fill", + "font_class": "searchcart-fill", + "unicode": "e85e", + "unicode_decimal": 59486 + }, + { + "icon_id": "11488002", + "name": "certified-supplier", + "font_class": "certified-supplier", + "unicode": "e75f", + "unicode_decimal": 59231 + }, + { + "icon_id": "11488313", + "name": "sales center-fill", + "font_class": "salescenter-fill", + "unicode": "e85f", + "unicode_decimal": 59487 + }, + { + "icon_id": "11488003", + "name": "cart-Empty", + "font_class": "cart-Empty", + "unicode": "e760", + "unicode_decimal": 59232 + }, + { + "icon_id": "11488314", + "name": "save-fill", + "font_class": "save-fill", + "unicode": "e860", + "unicode_decimal": 59488 + }, + { + "icon_id": "11488004", + "name": "code", + "font_class": "code1", + "unicode": "e761", + "unicode_decimal": 59233 + }, + { + "icon_id": "11488315", + "name": "security-fill", + "font_class": "security-fill", + "unicode": "e861", + "unicode_decimal": 59489 + }, + { + "icon_id": "11488005", + "name": "color", + "font_class": "color", + "unicode": "e762", + "unicode_decimal": 59234 + }, + { + "icon_id": "11488317", + "name": "category products-fill", + "font_class": "Similarproducts-fill", + "unicode": "e862", + "unicode_decimal": 59490 + }, + { + "icon_id": "11488009", + "name": "conditions", + "font_class": "conditions", + "unicode": "e763", + "unicode_decimal": 59235 + }, + { + "icon_id": "11488318", + "name": "signboard-fill", + "font_class": "signboard-fill", + "unicode": "e863", + "unicode_decimal": 59491 + }, + { + "icon_id": "11488010", + "name": "confirm", + "font_class": "confirm", + "unicode": "e764", + "unicode_decimal": 59236 + }, + { + "icon_id": "11488319", + "name": "service-fill", + "font_class": "service-fill", + "unicode": "e864", + "unicode_decimal": 59492 + }, + { + "icon_id": "11488011", + "name": "company", + "font_class": "company", + "unicode": "e765", + "unicode_decimal": 59237 + }, + { + "icon_id": "11488320", + "name": "shuffling-banner-fill", + "font_class": "shuffling-banner-fill", + "unicode": "e865", + "unicode_decimal": 59493 + }, + { + "icon_id": "11488012", + "name": "ali-clould", + "font_class": "ali-clould", + "unicode": "e766", + "unicode_decimal": 59238 + }, + { + "icon_id": "11488321", + "name": "supplier-features-fill", + "font_class": "supplier-features-fill", + "unicode": "e866", + "unicode_decimal": 59494 + }, + { + "icon_id": "11488013", + "name": "copy", + "font_class": "copy1", + "unicode": "e767", + "unicode_decimal": 59239 + }, + { + "icon_id": "11488324", + "name": "store-fill", + "font_class": "store-fill", + "unicode": "e867", + "unicode_decimal": 59495 + }, + { + "icon_id": "11488014", + "name": "credit-level", + "font_class": "credit-level", + "unicode": "e768", + "unicode_decimal": 59240 + }, + { + "icon_id": "11488325", + "name": "smile-fill", + "font_class": "smile-fill", + "unicode": "e868", + "unicode_decimal": 59496 + }, + { + "icon_id": "11488015", + "name": "coupons", + "font_class": "coupons", + "unicode": "e769", + "unicode_decimal": 59241 + }, + { + "icon_id": "11488326", + "name": "success-fill", + "font_class": "success-fill", + "unicode": "e869", + "unicode_decimal": 59497 + }, + { + "icon_id": "11488016", + "name": "connections", + "font_class": "connections", + "unicode": "e76a", + "unicode_decimal": 59242 + }, + { + "icon_id": "11488327", + "name": "sound-filling-fill", + "font_class": "sound-filling-fill", + "unicode": "e86a", + "unicode_decimal": 59498 + }, + { + "icon_id": "11488017", + "name": "cry", + "font_class": "cry", + "unicode": "e76b", + "unicode_decimal": 59243 + }, + { + "icon_id": "11488328", + "name": "sound-Mute", + "font_class": "sound-Mute1", + "unicode": "e86b", + "unicode_decimal": 59499 + }, + { + "icon_id": "11488018", + "name": "costoms-alearance", + "font_class": "costoms-alearance", + "unicode": "e76c", + "unicode_decimal": 59244 + }, + { + "icon_id": "11488329", + "name": "suspended-fill", + "font_class": "suspended-fill", + "unicode": "e86c", + "unicode_decimal": 59500 + }, + { + "icon_id": "11488020", + "name": "clock", + "font_class": "clock", + "unicode": "e76d", + "unicode_decimal": 59245 + }, + { + "icon_id": "11488330", + "name": "tool-fill", + "font_class": "tool-fill", + "unicode": "e86d", + "unicode_decimal": 59501 + }, + { + "icon_id": "11488021", + "name": "Currency Converter", + "font_class": "CurrencyConverter", + "unicode": "e76e", + "unicode_decimal": 59246 + }, + { + "icon_id": "11488331", + "name": "task-management-fill", + "font_class": "task-management-fill", + "unicode": "e86e", + "unicode_decimal": 59502 + }, + { + "icon_id": "11488022", + "name": "cut", + "font_class": "cut", + "unicode": "e76f", + "unicode_decimal": 59247 + }, + { + "icon_id": "11488333", + "name": "unlock-fill", + "font_class": "unlock-fill", + "unicode": "e86f", + "unicode_decimal": 59503 + }, + { + "icon_id": "11488023", + "name": "data", + "font_class": "data1", + "unicode": "e770", + "unicode_decimal": 59248 + }, + { + "icon_id": "11488334", + "name": "trust-fill", + "font_class": "trust-fill", + "unicode": "e870", + "unicode_decimal": 59504 + }, + { + "icon_id": "11488024", + "name": "Customer management", + "font_class": "Customermanagement", + "unicode": "e771", + "unicode_decimal": 59249 + }, + { + "icon_id": "11488335", + "name": "vip-fill", + "font_class": "vip-fill", + "unicode": "e871", + "unicode_decimal": 59505 + }, + { + "icon_id": "11488025", + "name": "descending", + "font_class": "descending", + "unicode": "e772", + "unicode_decimal": 59250 + }, + { + "icon_id": "11488336", + "name": "set", + "font_class": "set1", + "unicode": "e872", + "unicode_decimal": 59506 + }, + { + "icon_id": "11488026", + "name": "double-arro- right", + "font_class": "double-arro-right", + "unicode": "e773", + "unicode_decimal": 59251 + }, + { + "icon_id": "11488338", + "name": "top-fill", + "font_class": "Top-fill", + "unicode": "e873", + "unicode_decimal": 59507 + }, + { + "icon_id": "11488027", + "name": "customization", + "font_class": "customization", + "unicode": "e774", + "unicode_decimal": 59252 + }, + { + "icon_id": "11488339", + "name": "view larger", + "font_class": "viewlarger1", + "unicode": "e874", + "unicode_decimal": 59508 + }, + { + "icon_id": "11488028", + "name": "double-arrow-left", + "font_class": "double-arrow-left", + "unicode": "e775", + "unicode_decimal": 59253 + }, + { + "icon_id": "11488340", + "name": "voice-fill", + "font_class": "voice-fill", + "unicode": "e875", + "unicode_decimal": 59509 + }, + { + "icon_id": "11488029", + "name": "discount", + "font_class": "discount", + "unicode": "e776", + "unicode_decimal": 59254 + }, + { + "icon_id": "11488341", + "name": "warning-fill", + "font_class": "warning-fill", + "unicode": "e876", + "unicode_decimal": 59510 + }, + { + "icon_id": "11488030", + "name": "download", + "font_class": "download", + "unicode": "e777", + "unicode_decimal": 59255 + }, + { + "icon_id": "11488342", + "name": "warehouse-fill", + "font_class": "warehouse-fill", + "unicode": "e877", + "unicode_decimal": 59511 + }, + { + "icon_id": "11488031", + "name": "dollar", + "font_class": "dollar1", + "unicode": "e778", + "unicode_decimal": 59256 + }, + { + "icon_id": "11488343", + "name": "zip-fill", + "font_class": "zip-fill", + "unicode": "e878", + "unicode_decimal": 59512 + }, + { + "icon_id": "11488032", + "name": "default-template", + "font_class": "default-template", + "unicode": "e779", + "unicode_decimal": 59257 + }, + { + "icon_id": "11488344", + "name": "trade-assurance-fill", + "font_class": "trade-assurance-fill", + "unicode": "e879", + "unicode_decimal": 59513 + }, + { + "icon_id": "11488033", + "name": "editor", + "font_class": "editor1", + "unicode": "e77a", + "unicode_decimal": 59258 + }, + { + "icon_id": "11488345", + "name": "vs-fill", + "font_class": "vs-fill", + "unicode": "e87a", + "unicode_decimal": 59514 + }, + { + "icon_id": "11488034", + "name": "eletrical", + "font_class": "eletrical", + "unicode": "e77b", + "unicode_decimal": 59259 + }, + { + "icon_id": "11488346", + "name": "video", + "font_class": "video1", + "unicode": "e87b", + "unicode_decimal": 59515 + }, + { + "icon_id": "11488035", + "name": "electronics", + "font_class": "electronics", + "unicode": "e77c", + "unicode_decimal": 59260 + }, + { + "icon_id": "11488347", + "name": "template-fill", + "font_class": "template-fill", + "unicode": "e87c", + "unicode_decimal": 59516 + }, + { + "icon_id": "11488036", + "name": "etrical-equipm", + "font_class": "etrical-equipm", + "unicode": "e77d", + "unicode_decimal": 59261 + }, + { + "icon_id": "11488348", + "name": "wallet", + "font_class": "wallet1", + "unicode": "e87d", + "unicode_decimal": 59517 + } + ] +} diff --git a/kgBuilder-ui/public/static/icon/iconfont.ttf b/kgBuilder-ui/public/static/icon/iconfont.ttf new file mode 100644 index 0000000..e4e8c82 Binary files /dev/null and b/kgBuilder-ui/public/static/icon/iconfont.ttf differ diff --git a/kgBuilder-ui/public/static/icon/iconfont.woff b/kgBuilder-ui/public/static/icon/iconfont.woff new file mode 100644 index 0000000..db9ee48 Binary files /dev/null and b/kgBuilder-ui/public/static/icon/iconfont.woff differ diff --git a/kgBuilder-ui/public/static/icon/iconfont.woff2 b/kgBuilder-ui/public/static/icon/iconfont.woff2 new file mode 100644 index 0000000..185147a Binary files /dev/null and b/kgBuilder-ui/public/static/icon/iconfont.woff2 differ diff --git a/kgBuilder-ui/public/static/kgData.json b/kgBuilder-ui/public/static/kgData.json new file mode 100644 index 0000000..a8c8a36 --- /dev/null +++ b/kgBuilder-ui/public/static/kgData.json @@ -0,0 +1,168 @@ +{ + "node": [ + { + "flag": "1", + "code": "2730103", + "parentCode": "27301", + "grade": "2", + "name": "儒家", + "uuid": "26365002", + "imgsrc": "" + }, + { + "code": "273010308", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "王守仁", + "uuid": "46178689", + "imgsrc": "http://h.bytravel.cn/ren/0/head/2057.gif" + }, + { + "code": "273010307", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "陆九渊", + "uuid": "46178686", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/dcc451da81cb39dbde12202dd0160924aa1830fe?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010306", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "朱熹", + "uuid": "46178681", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/f31fbe096b63f624da9384678944ebf81b4ca38c?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010305", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "程颐", + "uuid": "46178676", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/060828381f30e92489594e3b4f086e061d95f73f?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010304", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "董仲舒", + "uuid": "46178671", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/b17eca8065380cd7bbccaaf5a344ad34588281d3?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010309", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "曾子", + "uuid": "46178665", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/838ba61ea8d3fd1fa226566e3f4e251f95ca5fb3?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010303", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "荀子", + "uuid": "46178660", + "imgsrc": "https://bkimg.cdn.bcebos.com/pic/37d3d539b6003af36cf611c53b2ac65c1138b6c3?x-bce-process=image/resize,m_lfit,w_268,limit_1/format,f_jpg" + }, + { + "code": "273010302", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "孟子", + "uuid": "46178654", + "imgsrc": "http://img.duoziwang.com/2018/19/07051620110108.jpg" + }, + { + "code": "273010301", + "flag": "0", + "parentCode": "2730103", + "grade": "4", + "name": "孔子", + "uuid": "46178648", + "imgsrc": "http://img.duoziwang.com/2018/17/05142055603532.jpg" + } + ], + "relationship": [ + { + "sourceId": "26365002", + "targetId": "46178689", + "name": "代表人物", + "targetcode": "273010308", + "uuid": "91804311", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178686", + "name": "代表人物", + "targetcode": "273010307", + "uuid": "91804310", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178681", + "name": "代表人物", + "targetcode": "273010306", + "uuid": "91804309", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178676", + "name": "代表人物", + "targetcode": "273010305", + "uuid": "91804308", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178671", + "name": "代表人物", + "targetcode": "273010304", + "uuid": "91804307", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178665", + "name": "代表人物", + "targetcode": "273010309", + "uuid": "91804306", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178660", + "name": "代表人物", + "targetcode": "273010303", + "uuid": "91804305", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178654", + "name": "代表人物", + "targetcode": "273010302", + "uuid": "91804295", + "sourcecode": "2730103" + }, + { + "sourceId": "26365002", + "targetId": "46178648", + "name": "代表人物", + "targetcode": "273010301", + "uuid": "91804294", + "sourcecode": "2730103" + } + ] +} diff --git a/kgBuilder-ui/src/App.vue b/kgBuilder-ui/src/App.vue new file mode 100644 index 0000000..70882ee --- /dev/null +++ b/kgBuilder-ui/src/App.vue @@ -0,0 +1,37 @@ + + + diff --git a/kgBuilder-ui/src/api/index.js b/kgBuilder-ui/src/api/index.js new file mode 100644 index 0000000..af46825 --- /dev/null +++ b/kgBuilder-ui/src/api/index.js @@ -0,0 +1,4 @@ +import kgBuilderApi from "./modules/kgBuilderApi"; +import datasourceApi from "./modules/datasourceApi"; + +export { kgBuilderApi, datasourceApi }; diff --git a/kgBuilder-ui/src/api/modules/datasourceApi.js b/kgBuilder-ui/src/api/modules/datasourceApi.js new file mode 100644 index 0000000..f065077 --- /dev/null +++ b/kgBuilder-ui/src/api/modules/datasourceApi.js @@ -0,0 +1,82 @@ +import request from "@/utils/request"; +import BaseAPI from '@/utils/BaseAPI' + +class datasourceApi extends BaseAPI{ + // 获取数据源 + getDatasource() { + return request({ + url: "/datasource/getDataSource", + method: "get" + }); + } + // 获取数据表 + getTableInfo(datasourceId) { + return request({ + url: "/datasource/getDataTable?datasourceId=" + datasourceId, + method: "get" + }); + } + // 获取数据列 + getTableColumn(tableId) { + return request({ + url: "/datasource/getDataColumn?dataTableId=" + tableId, + method: "get" + }); + } + //获取表及列 + getDataTableInfo(tableId) { + return request({ + url: "/datasource/getDataTableInfo?dataTableId=" + tableId, + method: "get" + }); + } + //获取预览数据 + getPreviewData(data) { + return this.post("/datasource/getTableRecords",data,{ + headers: { + 'Content-Type': 'application/json' + }}); + // return request({ + // url: "/datasource/getTableRecords", + // method: "post", + // data: data + // }); + } + //保存数据源 + saveDatasource(data) { + return this.post("/datasource/saveDataSource",data,{ + headers: { + 'Content-Type': 'application/json' + }}); + // return request({ + // url: "/datasource/saveDataSource", + // method: "post", + // data: data + // }); + } + //保存数据表 + saveDataTable(data) { + return this.post("/datasource/saveDataTable",data,{ + headers: { + 'Content-Type': 'application/json' + }}); + // return request({ + // url: "/datasource/saveDataTable", + // method: "post", + // data: data + // }); + } + //获取数据表记录 + getDataRecord(data) { + return this.post("/datasource/getTableRecords",data,{ + headers: { + 'Content-Type': 'application/json' + }}); + // return request({ + // url: "/datasource/getTableRecords", + // method: "post", + // data: data + // }); + } +} +export default new datasourceApi(); diff --git a/kgBuilder-ui/src/api/modules/kgBuilderApi.js b/kgBuilder-ui/src/api/modules/kgBuilderApi.js new file mode 100644 index 0000000..69a5061 --- /dev/null +++ b/kgBuilder-ui/src/api/modules/kgBuilderApi.js @@ -0,0 +1,161 @@ +import BaseAPI from '@/utils/BaseAPI' + +class kgBuilderApi extends BaseAPI{ + // 获取图谱数据 + getKgData() { + return this.get("/static/kgData.json"); + } + feedBack(data) { + return this.post("/feedBack",data); + } + saveData(data) { + return this.post("/er/saveData",data,{ + headers: { + 'Content-Type': 'application/json' + } + } + ); + } + getDomainNode(domainId) { + return this.get('/er/getDomainNode', { + domainId + }) + + } + execute(domainId) { + return this.get('/er/execute', { + domainId + }) + + } + getDomains(data) { + return this.post("/getGraph",data,{ + headers: { + 'Content-Type': 'application/json' + } + } + ); + } + createDomain(data) { + return this.get("/createDomain",data); + // return request({ + // url: "/createDomain?domain=" + data.domain + "&type=" + data.type, + // method: "get" + // }); + } + getCypherResult(data) { + return this.get("/getCypherResult",data); + } + getNodeContent(data) { + return this.post("/getNodeContent",data); + } + getNodeImage(data) { + return this.post("/getNodeImage",data); + } + getNodeDetail(data) { + return this.post("/getNodeDetail",data); + } + saveNodeImage(data) { + return this.post("/saveNodeImage",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + saveNodeContent(data) { + return this.post("/saveNodeContent",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + getDomainGraph(data) { + return this.post("/queryGraphResult",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + getRelationNodeCount(data) { + return this.post("/getRelationNodeCount",data); + } + getMoreRelationNode(data) { + return this.get("/getMoreRelationNode",data); + } + deleteDomain(data) { + return this.post("/deleteDomain",data); + } + getRecommendGraph(data) { + return this.post("/getRecommendGraph",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + createNode(data) { + return this.post("/createNode",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + deleteNode(data) { + return this.post("/deleteNode",data); + } + deleteLink(data) { + return this.post("/deleteLink",data); + } + createLink(data) { + return this.post("/createLink",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + updateLink(data) { + return this.post("/updateLink",data); + } + updateNodeName(data) { + return this.post("/updateNodeName",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + batchCreateNode(data) { + return this.post("/batchCreateNode",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + batchCreateChildNode(data) { + return this.post("/batchCreateChildNode",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + batchCreateSameNode(data) { + return this.post("/batchCreateSameNode",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + exportGraph(data) { + return this.post("/exportGraph",data); + } + download(data) { + return this.get("/download/"+data,); + } + updateCoordinateOfNode(data) { + return this.post("/updateCoordinateOfNode",data,{ + headers: { + 'Content-Type': 'application/json' + } + }); + } + +} +export default new kgBuilderApi(); diff --git a/kgBuilder-ui/src/api/token.js b/kgBuilder-ui/src/api/token.js new file mode 100644 index 0000000..c8c2323 --- /dev/null +++ b/kgBuilder-ui/src/api/token.js @@ -0,0 +1,31 @@ +/** + * @description: token操作 + */ + +export const TOKENKEY = "authtoken"; + +// 存储token +export const setToken = (token, key) => { + localStorage.setItem(key || TOKENKEY, token); +}; + +// 获取token +export const getToken = key => localStorage.getItem(key || TOKENKEY) || null; + +// 删除token +export const removeToken = key => { + localStorage.removeItem(key || TOKENKEY); +}; + +// 获取cookie +export const getCookie = name => { + var arr; + var reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)"); + if ((arr = document.cookie.match(reg))) return +unescape(arr[2]); + else return null; +}; + +// 移除所有 +export const removeAll = () => { + localStorage.clear(); +}; diff --git a/kgBuilder-ui/src/assets/3yuanzuimport.png b/kgBuilder-ui/src/assets/3yuanzuimport.png new file mode 100644 index 0000000..fe1737e Binary files /dev/null and b/kgBuilder-ui/src/assets/3yuanzuimport.png differ diff --git a/kgBuilder-ui/src/assets/cfhi.png b/kgBuilder-ui/src/assets/cfhi.png new file mode 100644 index 0000000..4fe9993 Binary files /dev/null and b/kgBuilder-ui/src/assets/cfhi.png differ diff --git a/kgBuilder-ui/src/assets/logo.png b/kgBuilder-ui/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/kgBuilder-ui/src/assets/logo.png differ diff --git a/kgBuilder-ui/src/assets/sanyuanzuimport1.png b/kgBuilder-ui/src/assets/sanyuanzuimport1.png new file mode 100644 index 0000000..ce0d104 Binary files /dev/null and b/kgBuilder-ui/src/assets/sanyuanzuimport1.png differ diff --git a/kgBuilder-ui/src/assets/sanyuanzuimport2.png b/kgBuilder-ui/src/assets/sanyuanzuimport2.png new file mode 100644 index 0000000..2c6e9cf Binary files /dev/null and b/kgBuilder-ui/src/assets/sanyuanzuimport2.png differ diff --git a/kgBuilder-ui/src/assets/treeimport1.png b/kgBuilder-ui/src/assets/treeimport1.png new file mode 100644 index 0000000..81b23a2 Binary files /dev/null and b/kgBuilder-ui/src/assets/treeimport1.png differ diff --git a/kgBuilder-ui/src/assets/treeimport2.png b/kgBuilder-ui/src/assets/treeimport2.png new file mode 100644 index 0000000..9b84567 Binary files /dev/null and b/kgBuilder-ui/src/assets/treeimport2.png differ diff --git a/kgBuilder-ui/src/components/KGBuilder.vue b/kgBuilder-ui/src/components/KGBuilder.vue new file mode 100644 index 0000000..4a97fa5 --- /dev/null +++ b/kgBuilder-ui/src/components/KGBuilder.vue @@ -0,0 +1,837 @@ + + + diff --git a/kgBuilder-ui/src/components/KGBuilderMenuBlank.vue b/kgBuilder-ui/src/components/KGBuilderMenuBlank.vue new file mode 100644 index 0000000..7a272a5 --- /dev/null +++ b/kgBuilder-ui/src/components/KGBuilderMenuBlank.vue @@ -0,0 +1,70 @@ + + + + diff --git a/kgBuilder-ui/src/components/KGBuilderMenuLink.vue b/kgBuilder-ui/src/components/KGBuilderMenuLink.vue new file mode 100644 index 0000000..c98fb3f --- /dev/null +++ b/kgBuilder-ui/src/components/KGBuilderMenuLink.vue @@ -0,0 +1,63 @@ + + + + diff --git a/kgBuilder-ui/src/components/KGBuilderSimple.vue b/kgBuilder-ui/src/components/KGBuilderSimple.vue new file mode 100644 index 0000000..bd7391d --- /dev/null +++ b/kgBuilder-ui/src/components/KGBuilderSimple.vue @@ -0,0 +1,628 @@ + + + diff --git a/kgBuilder-ui/src/components/KGBuilder_v1.vue b/kgBuilder-ui/src/components/KGBuilder_v1.vue new file mode 100644 index 0000000..e05a956 --- /dev/null +++ b/kgBuilder-ui/src/components/KGBuilder_v1.vue @@ -0,0 +1,1281 @@ + + + + diff --git a/kgBuilder-ui/src/components/KGFocus.vue b/kgBuilder-ui/src/components/KGFocus.vue new file mode 100644 index 0000000..e0ef268 --- /dev/null +++ b/kgBuilder-ui/src/components/KGFocus.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/kgBuilder-ui/src/components/KGHeader.vue b/kgBuilder-ui/src/components/KGHeader.vue new file mode 100644 index 0000000..65d3526 --- /dev/null +++ b/kgBuilder-ui/src/components/KGHeader.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/kgBuilder-ui/src/components/KGTable.vue b/kgBuilder-ui/src/components/KGTable.vue new file mode 100644 index 0000000..0628be3 --- /dev/null +++ b/kgBuilder-ui/src/components/KGTable.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/kgBuilder-ui/src/components/KGWanted.vue b/kgBuilder-ui/src/components/KGWanted.vue new file mode 100644 index 0000000..96be892 --- /dev/null +++ b/kgBuilder-ui/src/components/KGWanted.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/kgBuilder-ui/src/components/SvgIcon.vue b/kgBuilder-ui/src/components/SvgIcon.vue new file mode 100644 index 0000000..e6bb384 --- /dev/null +++ b/kgBuilder-ui/src/components/SvgIcon.vue @@ -0,0 +1,36 @@ + + + + diff --git a/kgBuilder-ui/src/components/index.js b/kgBuilder-ui/src/components/index.js new file mode 100644 index 0000000..f90b693 --- /dev/null +++ b/kgBuilder-ui/src/components/index.js @@ -0,0 +1,10 @@ +/* + * 动态注册全局组件 + */ +const allComponents = require.context('./', true, /\.vue$/) + +export default Vue => { + allComponents.keys().forEach(item => { + Vue.component(item.replace(/\.\//, '').replace(/\.vue$/, ''), allComponents(item).default) + }) +} diff --git a/kgBuilder-ui/src/config/index.js b/kgBuilder-ui/src/config/index.js new file mode 100644 index 0000000..9f38b68 --- /dev/null +++ b/kgBuilder-ui/src/config/index.js @@ -0,0 +1,4 @@ +// base url +const BASE_URL = process.env.VUE_APP_BASE_URL; + +export { BASE_URL }; diff --git a/kgBuilder-ui/src/main.js b/kgBuilder-ui/src/main.js new file mode 100644 index 0000000..5da1fd2 --- /dev/null +++ b/kgBuilder-ui/src/main.js @@ -0,0 +1,18 @@ +import Vue from "vue"; +import App from "./App.vue"; +import router from "./router"; +import store from "./store"; +import ElementUI from "element-ui"; +import "element-ui/lib/theme-chalk/index.css"; +import axios from "axios"; +import components from './components/index' + +Vue.prototype.$http = axios; //正确的使用 +Vue.config.productionTip = false; +Vue.use(ElementUI); +Vue.use(components) +new Vue({ + router, + store, + render: h => h(App) +}).$mount("#app"); diff --git a/kgBuilder-ui/src/router/index.js b/kgBuilder-ui/src/router/index.js new file mode 100644 index 0000000..44987c5 --- /dev/null +++ b/kgBuilder-ui/src/router/index.js @@ -0,0 +1,55 @@ +import Vue from "vue"; +import VueRouter from "vue-router"; +import Home from "../views/Home.vue"; + +Vue.use(VueRouter); + +const routes = [ + { + path: "/", + name: "Home", + component: () => import("../views/kgbuilder/index_v1.vue") + }, + { + path: "/builder", + name: "builder", + component: () => import("../views/kgbuilder/index.vue") + }, + { + path: "/kg", + name: "kg", + component: () => import("../views/kgbuilder/index_v1.vue") + }, + { + path: "/er", + name: "er", + component: () => import("../views/erbuilder/index.vue") + }, + { + path: "/ds", + name: "ds", + component: () => import("../views/datasource/index.vue") + }, + { + path: "/icon", + name: "icon", + component: () => import("../views/icon/index.vue") + }, + { + path: "/about", + name: "About", + // route level code-splitting + // this generates a separate chunk (about.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => + import(/* webpackChunkName: "about" */ "../views/About.vue") + } +]; + +const router = new VueRouter({ + mode: "history", + base: process.env.BASE_URL, + routes +}); + +export default router; diff --git a/kgBuilder-ui/src/settings.js b/kgBuilder-ui/src/settings.js new file mode 100644 index 0000000..431dc9c --- /dev/null +++ b/kgBuilder-ui/src/settings.js @@ -0,0 +1,31 @@ +module.exports = { + title: "Dream it possible", + + /** + * 是否系统布局配置 + */ + showSettings: false, + + /** + * 是否显示 tagsView + */ + tagsView: true, + + /** + * 是否固定头部 + */ + fixedHeader: false, + + /** + * 是否显示logo + */ + sidebarLogo: true, + + /** + * @type {string | array} 'production' | ['production', 'development'] + * @description Need show err logs component. + * The default is only used in the production env + * If you want to also use it in dev, you can pass ['production', 'development'] + */ + errorLog: "production", +}; diff --git a/kgBuilder-ui/src/store/index.js b/kgBuilder-ui/src/store/index.js new file mode 100644 index 0000000..fb6015f --- /dev/null +++ b/kgBuilder-ui/src/store/index.js @@ -0,0 +1,11 @@ +import Vue from "vue"; +import Vuex from "vuex"; + +Vue.use(Vuex); + +export default new Vuex.Store({ + state: {}, + mutations: {}, + actions: {}, + modules: {} +}); diff --git a/kgBuilder-ui/src/utils/BaseAPI.js b/kgBuilder-ui/src/utils/BaseAPI.js new file mode 100644 index 0000000..46584c2 --- /dev/null +++ b/kgBuilder-ui/src/utils/BaseAPI.js @@ -0,0 +1,24 @@ +import request from '@/utils/request' +import qs from 'qs' + +export default class BaseAPI { + get (url, params) { + return request({ url, method: 'GET', params }) + } + + post (url, data, config) { + let temp + + if ( + config && + config?.headers && + (config?.headers['Content-Type'].indexOf('application/json') !== -1 || + config?.headers['Content-Type'].indexOf('multipart/form-data') !== -1) + ) { + temp = data + } else { + temp = qs.stringify(data) + } + return request(Object.assign({ url, method: 'POST', data: temp }, config)) + } +} diff --git a/kgBuilder-ui/src/utils/auth.js b/kgBuilder-ui/src/utils/auth.js new file mode 100644 index 0000000..785a25d --- /dev/null +++ b/kgBuilder-ui/src/utils/auth.js @@ -0,0 +1,15 @@ +import Cookies from "js-cookie"; + +const TokenKey = "Admin-Token"; + +export function getToken() { + return Cookies.get(TokenKey); +} + +export function setToken(token) { + return Cookies.set(TokenKey, token); +} + +export function removeToken() { + return Cookies.remove(TokenKey); +} diff --git a/kgBuilder-ui/src/utils/errorCode.js b/kgBuilder-ui/src/utils/errorCode.js new file mode 100644 index 0000000..047910c --- /dev/null +++ b/kgBuilder-ui/src/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + "401": "认证失败,无法访问系统资源", + "403": "当前操作没有权限", + "404": "访问资源不存在", + default: "系统未知错误,请反馈给管理员" +}; diff --git a/kgBuilder-ui/src/utils/event-bus.js b/kgBuilder-ui/src/utils/event-bus.js new file mode 100644 index 0000000..a01196a --- /dev/null +++ b/kgBuilder-ui/src/utils/event-bus.js @@ -0,0 +1,39 @@ + +class EventPublic { + constructor() { + this.event = {} + } + $on(type, callback) { + if (!this.event[type]) { + this.event[type] = [callback] + } else { + this.event[type].push(callback) + } + } + $emit(type, ...args) { + if (!this.event[type]) { + return + } + this.event[type].forEach(res => { + res.apply(this, args) + }) + } + $off(type, callback) { + if (!this.event[type]) { + return + } + this.event[type] = this.event[type].filter(res => { + return res != callback + }) + } + // 执行一次 + $once(type, callback) { + function f() { + callback() + this.$off(type, f) + } + this.$on(type, f) + } + } + export const EventBus = new EventPublic() + \ No newline at end of file diff --git a/kgBuilder-ui/src/utils/request.js b/kgBuilder-ui/src/utils/request.js new file mode 100644 index 0000000..263d547 --- /dev/null +++ b/kgBuilder-ui/src/utils/request.js @@ -0,0 +1,107 @@ +import axios from "axios"; +import { Notification, MessageBox, Message } from "element-ui"; +import store from "@/store"; +import { getToken } from "@/utils/auth"; +import errorCode from "@/utils/errorCode"; + +const queue = [] // 请求队列 +// 创建axios实例 +const service = axios.create({ + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + // 超时 + timeout: 10 * 60 * 1000, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' + } +}); +// 取消重复请求 +const removeRepeatRequest = config => { + for (const key in queue) { + const index = +key + const item = queue[key] + + if ( + item.url === config.url && + item.method === config.method && + JSON.stringify(item.params) === JSON.stringify(config.params) && + JSON.stringify(item.data) === JSON.stringify(config.data) + ) { + // 执行取消操作 + item.cancel('操作太频繁,请稍后再试') + queue.splice(index, 1) + } + } +} +// request拦截器 +service.interceptors.request.use( + config => { + // 是否需要设置 token + const isToken = (config.headers || {}).isToken === false; + if (getToken() && !isToken) { + config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改 + } + return config; + }, + error => { + console.log(error); + Promise.reject(error); + } +); + +// 响应拦截器 +service.interceptors.response.use( + res => { + // 未设置状态码则默认成功状态 + const code = res.data.code || 200; + // 获取错误信息 + const msg = errorCode[code] || res.data.msg || errorCode["default"]; + if (code === 401) { + MessageBox.confirm( + "登录状态已过期,您可以继续留在该页面,或者重新登录", + "系统提示", + { + confirmButtonText: "重新登录", + cancelButtonText: "取消", + type: "warning" + } + ).then(() => { + store.dispatch("LogOut").then(() => { + location.href = "/index"; + }); + }); + } else if (code === 500) { + Message({ + message: msg, + type: "error" + }); + return Promise.reject(new Error(msg)); + } else if (code !== 200) { + Notification.error({ + title: msg + }); + return Promise.reject("error"); + } else { + return res.data; + } + }, + error => { + console.log("err" + error); + let { message } = error; + if (message == "Network Error") { + message = "后端接口连接异常"; + } else if (message.includes("timeout")) { + message = "系统接口请求超时"; + } else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ + message: message, + type: "error", + duration: 5 * 1000 + }); + return Promise.reject(error); + } +); + +export default service; diff --git a/kgBuilder-ui/src/views/About.vue b/kgBuilder-ui/src/views/About.vue new file mode 100644 index 0000000..3c45002 --- /dev/null +++ b/kgBuilder-ui/src/views/About.vue @@ -0,0 +1,13 @@ + + diff --git a/kgBuilder-ui/src/views/Home.vue b/kgBuilder-ui/src/views/Home.vue new file mode 100644 index 0000000..f11ee25 --- /dev/null +++ b/kgBuilder-ui/src/views/Home.vue @@ -0,0 +1,22 @@ + + + + diff --git a/kgBuilder-ui/src/views/datasource/index.vue b/kgBuilder-ui/src/views/datasource/index.vue new file mode 100644 index 0000000..81976b3 --- /dev/null +++ b/kgBuilder-ui/src/views/datasource/index.vue @@ -0,0 +1,568 @@ + + + + diff --git a/kgBuilder-ui/src/views/erbuilder/components/help.vue b/kgBuilder-ui/src/views/erbuilder/components/help.vue new file mode 100644 index 0000000..35c06bb --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/help.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/kgBuilder-ui/src/views/erbuilder/components/initData.js b/kgBuilder-ui/src/views/erbuilder/components/initData.js new file mode 100644 index 0000000..5f5750c --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/initData.js @@ -0,0 +1,164 @@ +let dataB = { + "domainName": "测试知识图谱领域", + "domainId":"xxxxx", + "nodeList": [ + { + "nodeKey": "table-11", + "nodeName": "kg_domain", + "type": "task", + "left": "256px", + "top": "74px", + "ico": "el-icon-menu", + "state": "success", + "viewOnly": 1, + "alia": "kg_domain", + "sourceId": 4, + "startNode":1, + "items": [ + { + "columnId": 120, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-11-120", + "itemCode": "commend", + "itemName": "commend", + "itemType": "int(11)" + }, + { + "columnId": 121, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-11-121", + "itemCode": "createuser", + "itemName": "createuser", + "itemType": "varchar(255)" + }, + { + "columnId": 122, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-11-122", + "itemCode": "nodeKey", + "itemName": "nodeKey", + "itemType": "int(11)" + }, + { + "columnId": 123, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-11-123", + "itemCode": "nodeName", + "itemName": "nodeName", + "itemType": "varchar(255)" + } + ] + }, + { + "nodeKey": "table-13", + "nodeName": "kg_category", + "type": "task", + "left": "675px", + "top": "197px", + "ico": "el-icon-menu", + "state": "success", + "viewOnly": 1, + "alia": "kg_category", + "sourceId": 4, + "startNode":0, + "items": [ + { + "columnId": 137, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-137", + "itemCode": "CategoryId", + "itemName": "CategoryId", + "itemType": "bigint(11)" + }, + { + "columnId": 138, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-138", + "itemCode": "CategoryNodeCode", + "itemName": "CategoryNodeCode", + "itemType": "varchar(255)" + }, + { + "columnId": 139, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-139", + "itemCode": "CategoryNodeId", + "itemName": "CategoryNodeId", + "itemType": "int(11)" + }, + { + "columnId": 140, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-140", + "itemCode": "CategoryNodeName", + "itemName": "CategoryNodeName", + "itemType": "varchar(255)" + }, + { + "columnId": 141, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-141", + "itemCode": "Color", + "itemName": "Color", + "itemType": "varchar(255)" + }, + { + "columnId": 142, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-142", + "itemCode": "CreateTime", + "itemName": "CreateTime", + "itemType": "datetime" + }, + { + "columnId": 151, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-151", + "itemCode": "TreeLevel", + "itemName": "TreeLevel", + "itemType": "int(11)" + }, + { + "columnId": 152, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-152", + "itemCode": "UpdateTime", + "itemName": "UpdateTime", + "itemType": "datetime" + }, + { + "columnId": 153, + "ico": "el-icon-film", + "isPrimary": 0, + "itemId": "table-13-153", + "itemCode": "UpdateUser", + "itemName": "UpdateUser", + "itemType": "varchar(64)" + } + ] + } + ], + "lineList": [ + { + "from": "table-11-122", + "to": "table-13-137", + "label":"AAA" + } + ] +}; + +export function getDataB() { + return dataB; +} diff --git a/kgBuilder-ui/src/views/erbuilder/components/mixins.js b/kgBuilder-ui/src/views/erbuilder/components/mixins.js new file mode 100644 index 0000000..fafbca7 --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/mixins.js @@ -0,0 +1,160 @@ +export const easyFlowMixin = { + data () { + return { + jsplumbSetting: { + // 动态锚点、位置自适应 + //Anchor: ['Top', 'TopCenter', 'TopRight', 'TopLeft', 'Right', 'RightMiddle', 'Bottom', 'BottomCenter', 'BottomRight', 'BottomLeft', 'Left', 'LeftMiddle'], + Anchor: ['RightMiddle', 'LeftMiddle'], + Anchors: ["Right", "Left"], + // 容器ID + Container: 'efContainer', + // 连线的样式,直线或者曲线等,可选值: StateMachine、Flowchart,Bezier、Straight + //Connector: ['Bezier', {curviness: 100}], + Connector: ['Straight', {stub: 20, gap: 1}], + //Connector: ['Flowchart', {stub: 30, gap: 1, alwaysRespectStubs: false, midpoint: 0.5, cornerRadius: 10}], + // Connector: ['StateMachine', {margin: 5, curviness: 10, proximityLimit: 80}], + // 鼠标不能拖动删除线 + ConnectionsDetachable: false, + // 删除线的时候节点不删除 + DeleteEndpointsOnDetach: false, + /** + * 连线的两端端点类型:圆形 + * radius: 圆的半径,越大圆越大 + */ + Endpoint: ['Dot', {radius: 5, cssClass: 'ef-dot', hoverClass: 'ef-dot-hover'}], + /** + * 连线的两端端点类型:矩形 + * height: 矩形的高 + * width: 矩形的宽 + */ + // Endpoint: ['Rectangle', {height: 20, width: 20, cssClass: 'ef-rectangle', hoverClass: 'ef-rectangle-hover'}], + /** + * 图像端点 + */ + // Endpoint: ['Image', {src: 'https://www.easyicon.net/api/resizeApi.php?id=1181776&size=32', cssClass: 'ef-img', hoverClass: 'ef-img-hover'}], + /** + * 空白端点 + */ + //Endpoint: ['Blank', {Overlays: ''}], + //Endpoint: "Dot", // 端点类型 + //Endpoints: [['Dot', {radius: 5, cssClass: 'ef-dot', hoverClass: 'ef-dot-hover'}], ['Rectangle', {height: 20, width: 20, cssClass: 'ef-rectangle', hoverClass: 'ef-rectangle-hover'}]], + /** + * 连线的两端端点样式 + * fill: 颜色值,如:#12aabb,为空不显示 + * outlineWidth: 外边线宽度 + */ + EndpointStyle: {fill: '#1879ffa1', outlineWidth: 1}, + // 是否打开jsPlumb的内部日志记录 + LogEnabled: false, + /** + * 连线的样式 + */ + PaintStyle: { + // 线的颜色 + stroke: '#E0E3E7', + // 线的粗细,值越大线越粗 + strokeWidth: 1, + // 设置外边线的颜色,默认设置透明,这样别人就看不见了,点击线的时候可以不用精确点击,参考 https://blog.csdn.net/roymno2/article/details/72717101 + outlineStroke: 'transparent', + // 线外边的宽,值越大,线的点击范围越大 + outlineWidth: 10 + }, + DragOptions: {cursor: 'pointer', zIndex: 2000}, + /** + * 叠加 参考: https://www.jianshu.com/p/d9e9918fd928 + */ + Overlays: [ + // 箭头叠加 + ['Arrow', { + width: 10, // 箭头尾部的宽度 + length: 8, // 从箭头的尾部到头部的距离 + location: 1, // 位置,建议使用0~1之间 + direction: 1, // 方向,默认值为1(表示向前),可选-1(表示向后) + foldback: 0.623 // 折回,也就是尾翼的角度,默认0.623,当为1时,为正三角 + }], + // ['Diamond', { + // events: { + // dblclick: function (diamondOverlay, originalEvent) { + // console.log('double click on diamond overlay for : ' + diamondOverlay.component) + // } + // } + // }], + ['Label', { + label: '', + location: 0.1, + cssClass: 'aLabel' + }] + ], + // 绘制图的模式 svg、canvas + RenderMode: 'svg', + // 鼠标滑过线的样式 + HoverPaintStyle: {stroke: '#b0b2b5', strokeWidth: 1}, + // 滑过锚点效果 + EndpointHoverStyle: {fill: 'orange'}, + Scope: 'jsPlumb_DefaultScope' // 范围,具有相同scope的点才可连接 + }, + /** + * 连线参数 + */ + jsplumbConnectOptions: { + isSource: false, + isTarget: false, + // 动态锚点、提供了4个方向 Continuous、AutoDefault + anchor: 'Continuous', + // 设置连线上面的label样式 + labelStyle: { + cssClass: 'flowLabel' + }, + // 修改了jsplumb 源码,支持label 为空传入自定义style + emptyLabelStyle: { + cssClass: 'emptyFlowLabel' + } + }, + /** + * 源点配置参数 + */ + jsplumbSourceOptions: { + // 设置可以拖拽的类名,只要鼠标移动到该类名上的DOM,就可以拖拽连线 + filter: '.flow-node-drag', + filterExclude: false, + anchor: ['RightMiddle', 'LeftMiddle'], + // 是否允许自己连接自己 + allowLoopback: false, + maxConnections: 1, + onMaxConnections: function (info, e) { + console.log(`超过了最大值连线: ${info.maxConnections}`) + } + }, + // 参考 https://www.cnblogs.com/mq0036/p/7942139.html + jsplumbSourceOptions2: { + // 设置可以拖拽的类名,只要鼠标移动到该类名上的DOM,就可以拖拽连线 + filter: '.flow-node-drag', + filterExclude: false, + anchor: 'Continuous', + // 是否允许自己连接自己 + allowLoopback: false, + connector: ['Flowchart', {curviness: 50}], + connectorStyle: { + // 线的颜色 + stroke: 'red', + // 线的粗细,值越大线越粗 + strokeWidth: 1, + // 设置外边线的颜色,默认设置透明,这样别人就看不见了,点击线的时候可以不用精确点击,参考 https://blog.csdn.net/roymno2/article/details/72717101 + outlineStroke: 'transparent', + // 线外边的宽,值越大,线的点击范围越大 + outlineWidth: 10 + }, + connectorHoverStyle: {stroke: 'orange', strokeWidth: 2} + }, + jsplumbTargetOptions: { + // 设置可以拖拽的类名,只要鼠标移动到该类名上的DOM,就可以拖拽连线 + filter: '.flow-node-drag', + filterExclude: false, + // 是否允许自己连接自己 + anchor: 'Continuous', + allowLoopback: false, + dropOptions: {hoverClass: 'ef-drop-hover'} + } + } + } +} diff --git a/kgBuilder-ui/src/views/erbuilder/components/node.vue b/kgBuilder-ui/src/views/erbuilder/components/node.vue new file mode 100644 index 0000000..ea3393a --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/node.vue @@ -0,0 +1,241 @@ + + + + diff --git a/kgBuilder-ui/src/views/erbuilder/components/node_form.vue b/kgBuilder-ui/src/views/erbuilder/components/node_form.vue new file mode 100644 index 0000000..9af379f --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/node_form.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/kgBuilder-ui/src/views/erbuilder/components/node_info.vue b/kgBuilder-ui/src/views/erbuilder/components/node_info.vue new file mode 100644 index 0000000..5e18e4f --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/node_info.vue @@ -0,0 +1,60 @@ + + + + diff --git a/kgBuilder-ui/src/views/erbuilder/components/node_tree.vue b/kgBuilder-ui/src/views/erbuilder/components/node_tree.vue new file mode 100644 index 0000000..ddeeb64 --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/components/node_tree.vue @@ -0,0 +1,263 @@ + + + diff --git a/kgBuilder-ui/src/views/erbuilder/index.vue b/kgBuilder-ui/src/views/erbuilder/index.vue new file mode 100644 index 0000000..2300107 --- /dev/null +++ b/kgBuilder-ui/src/views/erbuilder/index.vue @@ -0,0 +1,888 @@ + + + + diff --git a/kgBuilder-ui/src/views/icon/index.vue b/kgBuilder-ui/src/views/icon/index.vue new file mode 100644 index 0000000..6442c60 --- /dev/null +++ b/kgBuilder-ui/src/views/icon/index.vue @@ -0,0 +1,11252 @@ + + + + + + + + + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/kg_form.vue b/kgBuilder-ui/src/views/kgbuilder/components/kg_form.vue new file mode 100644 index 0000000..fcb9cfc --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/kg_form.vue @@ -0,0 +1,524 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/kg_help.vue b/kgBuilder-ui/src/views/kgbuilder/components/kg_help.vue new file mode 100644 index 0000000..860f5e1 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/kg_help.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/kg_json.vue b/kgBuilder-ui/src/views/kgbuilder/components/kg_json.vue new file mode 100644 index 0000000..13aa44d --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/kg_json.vue @@ -0,0 +1,60 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/menu_blank.vue b/kgBuilder-ui/src/views/kgbuilder/components/menu_blank.vue new file mode 100644 index 0000000..fc10407 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/menu_blank.vue @@ -0,0 +1,69 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/menu_link.vue b/kgBuilder-ui/src/views/kgbuilder/components/menu_link.vue new file mode 100644 index 0000000..c74a679 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/menu_link.vue @@ -0,0 +1,74 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/node_info.vue b/kgBuilder-ui/src/views/kgbuilder/components/node_info.vue new file mode 100644 index 0000000..5e18e4f --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/node_info.vue @@ -0,0 +1,60 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/components/node_richer.vue b/kgBuilder-ui/src/views/kgbuilder/components/node_richer.vue new file mode 100644 index 0000000..81d8f76 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/components/node_richer.vue @@ -0,0 +1,73 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/index.vue b/kgBuilder-ui/src/views/kgbuilder/index.vue new file mode 100644 index 0000000..5500b26 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/index.vue @@ -0,0 +1,2054 @@ + + + + diff --git a/kgBuilder-ui/src/views/kgbuilder/index_v1.vue b/kgBuilder-ui/src/views/kgbuilder/index_v1.vue new file mode 100644 index 0000000..6786f59 --- /dev/null +++ b/kgBuilder-ui/src/views/kgbuilder/index_v1.vue @@ -0,0 +1,1494 @@ + + + + diff --git a/kgBuilder-ui/vue.config.js b/kgBuilder-ui/vue.config.js new file mode 100644 index 0000000..5874737 --- /dev/null +++ b/kgBuilder-ui/vue.config.js @@ -0,0 +1,125 @@ +"use strict"; +const path = require("path"); +const webpack = require("webpack"); +const defaultSettings = require("./src/settings.js"); + +function resolve(dir) { + return path.join(__dirname, dir); +} + +const name = defaultSettings.title || "暖暖动听"; // 标题 + +const port = process.env.port || process.env.npm_config_port || 80; // 端口 + +// vue.config.js 配置说明 +//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions +// 这里只列一部分,具体配置参考文档 +module.exports = { + // 部署生产环境和开发环境下的URL。 + // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 + // 例如 https://www.dream.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.dream.vip/admin/,则设置 baseUrl 为 /admin/。 + publicPath: process.env.NODE_ENV === "production" ? "/" : "/", + // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) + outputDir: "dist", + // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) + assetsDir: "static", + // 是否开启eslint保存检测,有效值:ture | false | 'error' + lintOnSave: process.env.NODE_ENV === "development", + // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 + productionSourceMap: false, + // webpack-dev-server 相关配置 + devServer: { + host: "0.0.0.0", + port: port, + open: true, + proxy: { + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VUE_APP_BASE_API]: { + target: `http://localhost:8080`, + changeOrigin: true, + pathRewrite: { + ["^" + process.env.VUE_APP_BASE_API]: "" + } + } + }, + disableHostCheck: true + }, + configureWebpack: { + name: name, + resolve: { + alias: { + "@": resolve("src") + } + } + }, + chainWebpack(config) { + config.plugin("provide").use(webpack.ProvidePlugin, [ + { + $: "jquery", + jQuery: "jquery", + jquery: "jquery", + "window.jQuery": "jquery" + } + ]); + config.plugins.delete("preload"); // TODO: need test + config.plugins.delete("prefetch"); // TODO: need test + + // set svg-sprite-loader + config.module + .rule("svg") + .exclude.add(resolve("src/assets/icons")) + .end(); + config.module + .rule("icons") + .test(/\.svg$/) + .include.add(resolve("src/assets/icons")) + .end() + .use("svg-sprite-loader") + .loader("svg-sprite-loader") + .options({ + symbolId: "icon-[name]" + }) + .end(); + + config.when(process.env.NODE_ENV !== "development", config => { + config + .plugin("ScriptExtHtmlWebpackPlugin") + .after("html") + .use("script-ext-html-webpack-plugin", [ + { + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + } + ]) + .end(); + config.optimization.splitChunks({ + chunks: "all", + cacheGroups: { + libs: { + name: "chunk-libs", + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: "initial" // only package third parties that are initially dependent + }, + elementUI: { + name: "chunk-elementUI", // split elementUI into a single package + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + }, + commons: { + name: "chunk-commons", + test: resolve("src/components"), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }); + config.optimization.runtimeChunk("single"), + { + from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件 + to: "./" //到根目录下 + }; + }); + } +}; diff --git a/kg_builder.sql b/kg_builder.sql new file mode 100644 index 0000000..3cbd703 --- /dev/null +++ b/kg_builder.sql @@ -0,0 +1,260 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80012 + Source Host : localhost:3306 + Source Schema : kg + + Target Server Type : MySQL + Target Server Version : 80012 + File Encoding : 65001 + + Date: 08/05/2023 14:49:23 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for kg_category +-- ---------------------------- +DROP TABLE IF EXISTS `kg_category`; +CREATE TABLE `kg_category` ( + `CategoryNodeId` int(11) NOT NULL AUTO_INCREMENT, + `CategoryNodeName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CategoryNodeCode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `SystemCode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CategoryId` bigint(20) NOT NULL, + `ParentId` int(11) NULL DEFAULT NULL, + `ParentCode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `TreeLevel` int(11) NULL DEFAULT NULL, + `IsLeaf` int(11) NOT NULL DEFAULT 1, + `Status` int(11) NULL DEFAULT NULL, + `FileUuid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件uuid', + `FileName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点来源附件', + `CreateUser` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CreateTime` datetime(0) NULL DEFAULT NULL, + `UpdateUser` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `UpdateTime` datetime(0) NULL DEFAULT NULL, + `Color` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`CategoryNodeId`) USING BTREE, + INDEX `categoryId`(`CategoryId`) USING BTREE, + INDEX `parentId`(`ParentId`) USING BTREE, + INDEX `parentCode`(`ParentCode`) USING BTREE, + INDEX `categoryCode`(`CategoryNodeCode`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 101534 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_domain +-- ---------------------------- +DROP TABLE IF EXISTS `kg_domain`; +CREATE TABLE `kg_domain` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `label` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `type` int(11) NULL DEFAULT NULL COMMENT '0=手动创建,1=三元组导入,2=excel导入,3=er图构建', + `nodecount` int(11) NOT NULL DEFAULT 0, + `shipcount` int(11) NOT NULL, + `commend` int(11) NULL DEFAULT 0 COMMENT '推荐', + `status` int(11) NOT NULL, + `createuser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `createtime` datetime(0) NULL DEFAULT NULL, + `modifyTime` datetime(0) NULL DEFAULT NULL, + `modifyUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_feedback +-- ---------------------------- +DROP TABLE IF EXISTS `kg_feedback`; +CREATE TABLE `kg_feedback` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '反馈主题', + `desc` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '描述', + `type` int(11) NULL DEFAULT NULL COMMENT '类型', + `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱', + `createTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_graph_link +-- ---------------------------- +DROP TABLE IF EXISTS `kg_graph_link`; +CREATE TABLE `kg_graph_link` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `from` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `to` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `label` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `domainId` int(11) NULL DEFAULT NULL COMMENT '领域id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_graph_node +-- ---------------------------- +DROP TABLE IF EXISTS `kg_graph_node`; +CREATE TABLE `kg_graph_node` ( + `nodeId` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + `nodeKey` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点唯一标识', + `tableId` int(11) NULL DEFAULT NULL COMMENT '数据表id', + `nodeName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点名称', + `type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点类型', + `left` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点左位置', + `top` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点右位置', + `ico` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点图标', + `state` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '节点状态', + `viewOnly` int(11) NULL DEFAULT NULL COMMENT '是否可以拖动,1=是,0=否', + `sourceId` int(11) NULL DEFAULT NULL COMMENT '数据源id', + `domainId` int(11) NULL DEFAULT NULL COMMENT '领域id', + `startNode` int(11) NULL DEFAULT NULL COMMENT '是否是起点', + PRIMARY KEY (`nodeId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_graph_node_map +-- ---------------------------- +DROP TABLE IF EXISTS `kg_graph_node_map`; +CREATE TABLE `kg_graph_node_map` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `columnId` int(11) NULL DEFAULT NULL COMMENT '列id', + `ico` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列图标', + `isPrimary` int(11) NULL DEFAULT NULL COMMENT '是否主键', + `itemId` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据列key', + `itemCode` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '原始数据列字段', + `isMainEntity` int(11) NOT NULL DEFAULT 0 COMMENT '是否主实体', + `itemName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列别名', + `itemType` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段类型', + `nodeId` bigint(20) NULL DEFAULT NULL COMMENT '节点id', + `domainId` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 320 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_nodedetail +-- ---------------------------- +DROP TABLE IF EXISTS `kg_nodedetail`; +CREATE TABLE `kg_nodedetail` ( + `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '领域关系主键', + `DomainId` int(11) NULL DEFAULT NULL COMMENT '知识图谱领域主键', + `NodeId` int(11) NULL DEFAULT NULL COMMENT '关系定义主键', + `Status` int(11) NULL DEFAULT 1, + `Content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL, + `CreateUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CreateTime` datetime(0) NULL DEFAULT NULL, + `ModifyUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `ModifyTime` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE, + INDEX `domainid`(`DomainId`) USING BTREE, + INDEX `nodeid`(`NodeId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 135 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for kg_nodedetail_file +-- ---------------------------- +DROP TABLE IF EXISTS `kg_nodedetail_file`; +CREATE TABLE `kg_nodedetail_file` ( + `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '领域关系主键', + `DomainId` int(11) NULL DEFAULT NULL COMMENT '知识图谱领域主键', + `NodeId` int(11) NULL DEFAULT NULL COMMENT '关系定义主键', + `FileName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '若是本地上传则为文件名称,若是网络链接则保存为链接', + `ImageType` int(11) NULL DEFAULT 0 COMMENT '0=本地上传,1=网络链接', + `Status` int(11) NULL DEFAULT 1, + `CreateUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `CreateTime` datetime(0) NULL DEFAULT NULL, + `ModifyUser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `ModifyTime` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE, + INDEX `domainid`(`DomainId`) USING BTREE, + INDEX `nodeid`(`NodeId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 187 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for meta_data_column +-- ---------------------------- +DROP TABLE IF EXISTS `meta_data_column`; +CREATE TABLE `meta_data_column` ( + `DataColumnId` int(11) NOT NULL AUTO_INCREMENT COMMENT '数据列id', + `DataTableId` int(11) NULL DEFAULT NULL COMMENT '数据表id', + `DataColumnCode` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据列名称', + `DataColumnName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据列别名', + `DataColumnComment` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据列描述', + `DataColumnType` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据类型', + `IsPrimary` int(11) NULL DEFAULT NULL COMMENT '是否主键', + `Status` int(11) NULL DEFAULT 1 COMMENT '状态:0停用1启用', + `CreateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建人', + `CreateTime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `UpdateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改人', + `UpdateTime` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`DataColumnId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 231 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for meta_data_source +-- ---------------------------- +DROP TABLE IF EXISTS `meta_data_source`; +CREATE TABLE `meta_data_source` ( + `DataSourceId` int(11) NOT NULL AUTO_INCREMENT COMMENT '数据源主键', + `DbType` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据源类型', + `DriverName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `IPAndPort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'IP及端口号', + `ConnectUrl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'url', + `DbName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据库别名', + `DbCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据库名称', + `DbUserName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名', + `DbPassWord` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码', + `MaxPoolSize` int(11) NULL DEFAULT NULL COMMENT '最大连接数', + `Status` int(11) NULL DEFAULT 1 COMMENT '状态 0禁用 1启用(默认)', + `DatabaseCoding` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '数据库编码', + `Transcoding` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '转换编码', + `CreateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `CreateTime` datetime(0) NULL DEFAULT NULL, + `UpdateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `UpdateTime` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`DataSourceId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '数据源' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for meta_data_table +-- ---------------------------- +DROP TABLE IF EXISTS `meta_data_table`; +CREATE TABLE `meta_data_table` ( + `DataTableId` int(11) NOT NULL AUTO_INCREMENT COMMENT '数据表主键', + `DatasourceId` int(11) NULL DEFAULT NULL COMMENT '数据源id', + `DataTableCode` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '表名', + `DataTableName` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '表别名', + `Status` int(11) NULL DEFAULT 1 COMMENT '记录状态', + `CreateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '创建用户', + `CreateTime` timestamp(0) NULL DEFAULT NULL COMMENT '创建时间', + `UpdateUser` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '修改用户', + `UpdateTime` timestamp(0) NULL DEFAULT NULL COMMENT '修改时间', + PRIMARY KEY (`DataTableId`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uuid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `blog` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `company` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `gender` int(11) NULL DEFAULT NULL, + `source` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `createtime` datetime(0) NULL DEFAULT NULL, + `updatetime` datetime(0) NULL DEFAULT NULL, + `isadmin` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1123 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/kgbuilder.jpg b/kgbuilder.jpg new file mode 100644 index 0000000..7fb217f Binary files /dev/null and b/kgbuilder.jpg differ diff --git a/kgbuilder2.jpg b/kgbuilder2.jpg new file mode 100644 index 0000000..b17831e Binary files /dev/null and b/kgbuilder2.jpg differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7ade7d7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.11 + + + com.warmer + kgbuilder + 0.0.1 + kgBuilder + pom + Demo project for kgBuilder + + UTF-8 + UTF-8 + 1.8 + 4.4.5 + 8.0.16 + 2.1.3 + 1.4.6 + 1.2.78 + 3.12.0 + 7.2.17 + 3.17 + 2.0 + portable-1.7.8 + 1.18.26 + 5.8.18 + 1.4 + 2.15.0 + + + + + org.springframework.boot + spring-boot-devtools + true + + + + + kgBuilder-base + kgBuilder-meta + kgBuilder-pro + +