提交 a36fee51 作者: 方治民

refactor: 重构部分代码、依赖更新、新增 ci/文档/配置项等

上级 94cb809d
# public/* linguist-vendored
* text=auto eol=lf
......@@ -35,3 +35,4 @@ out/
### VS Code ###
.vscode/
node_modules
# Pipelines 步骤
stages:
- build
- test
- deploy
# 缓存配置
cache:
paths:
- .gradle/wrapper
- .gradle/caches
# 编译项目
build-job:
stage: build
image: java:8
only:
- tags
# 使用 CI Runner,在 GitLab-Runner 中注册好的 Runner
tags:
- CI
before_script:
- chmod +x ./gradlew
script:
- ./gradlew assemble
artifacts:
# 配置构建结果过期时间
expire_in: 1 week
# 保留目录
paths:
- build/libs/*.jar
# 发布,在本地构建镜像并推送到发布环境的镜像库
deploy-job:
stage: deploy
image: docker:latest
# 部署依赖编译
dependencies:
- build-job
only:
- tags
# 使用 CD Runner,在 GitLab-Runner 中注册好的 Runner(此处配置成使用宿主环境构建)
tags:
- CD
script:
# 基于 Dockerfile 构建镜像
- docker build -t $TAG .
# 登录到发布环境的私服
- docker login -u $REGISTRY_REMOTE_USER -p $REGISTRY_REMOTE_PASSWORD https://$REGISTRY_REMOTE
# 将刚刚构建的镜像推送到私服
- docker push $TAG
variables:
# 读取 GitLab CI/CD 配置的 Secret variables
REGISTRY_REMOTE: $REGISTRY_REMOTE
REGISTRY_REMOTE_USER: $REGISTRY_REMOTE_USER
REGISTRY_REMOTE_PASSWORD: $REGISTRY_REMOTE_PASSWORD
# 设置镜像 tag,使用 git tag 标识作为镜像 tag
TAG: ${REGISTRY_REMOTE}/basic/basic-api:${CI_BUILD_REF_NAME}
# 是否需要分号
semi: false
# 单引号
singleQuote: true
# 在对象,数组括号与文字之间加空格 "{ foo: bar }"
bracketSpacing: true
# 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
trailingComma: all
# 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
proseWrap: preserve
# tab
tabWidth: 4
# 一行的字符数,如果超过会进行换行,默认为80
printWidth: 120
# vueIndentScriptAndStyle: true
jsxBracketSameLine: false
jsxSingleQuote: false
htmlWhitespaceSensitivity: strict
endOfLine: lf
# 覆盖配置
overrides:
- files:
- '*.yml'
- '*.styl'
options:
tabWidth: 2
# 指定基础镜像,在其上进行定制
FROM java:8
# 维护者信息
MAINTAINER ifzm <fangzhimin@yiring.com>
# 声明数据挂载目录
VOLUME /data
# 声明日志挂载目录
VOLUME /logs
# 复制上下文目录下的 build/libs/app.jar 到容器里
COPY build/libs/app-0.0.1-SNAPSHOT.jar app.jar
# bash方式执行,使 app.jar 可访问
# RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /app.jar"
# 声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8181
# 指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]
# Basic API(Template)
## 开发环境
<!-- prettier-ignore -->
- JDK 1.8+ (推荐同时安装最新 LTS 版本) [下载](https://www.oracle.com/java/technologies/downloads/#jdk17-windows)
- NodeJS [latest](https://nodejs.org/zh-cn/)
- IDEA [下载](https://www.jetbrains.com/idea/)
- Navicat Premium [下载](http://www.downcc.com/soft/430673.html)
- RedisDesktopManager [下载](https://github.com/FuckDoctors/rdm-builder)
- Docker(**可选**) [了解](https://www.docker.com/)
- [常用插件清单](./doc/plugins.md)
## 开始
<!-- prettier-ignore -->
- [开发规范说明](./doc/workflow.md)
- [技术栈说明](./doc/technique.md)
---
## TODO
<!-- prettier-ignore -->
- [x] 完成项目构建,开发文档编写
- [x] [conventional-changelog](https://www.cnblogs.com/mengfangui/p/12634845.html)
- [ ] 设计权限模块
......@@ -19,6 +19,9 @@ dependencies {
// runtimeOnly 'mysql:mysql-connector-java'
// runtimeOnly 'org.postgresql:postgresql'
// sa-token
implementation "cn.dev33:sa-token-spring-boot-starter:${saTokenVersion}"
// swagger
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}"
implementation "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}"
......
......@@ -5,11 +5,18 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@EntityScan(basePackageClasses = { Application.class, Jsr310JpaConverters.class })
@SpringBootApplication(scanBasePackages = "com.yiring")
@EnableJpaRepositories(basePackages = Application.BASE_PACKAGES)
@EntityScan(
basePackageClasses = { Application.class, Jsr310JpaConverters.class },
basePackages = Application.BASE_PACKAGES
)
@SpringBootApplication(scanBasePackages = Application.BASE_PACKAGES)
public class Application {
public static final String BASE_PACKAGES = "com.yiring";
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
......
/* (C) 2021 YiRing, Inc. */
package com.yiring.app.config;
import cn.dev33.satoken.exception.NotLoginException;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.ClientAbortException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.web.HttpRequestMethodNotSupportedException;
......@@ -67,13 +70,31 @@ public class GlobalExceptionHandler {
}
/**
* 未登录异常(鉴权失败)
*
* @param e 异常信息
* @return 异常信息反馈 {@link Status#UNAUTHORIZED
*/
@ExceptionHandler(value = NotLoginException.class)
public Result<String> notLoginErrorHandler(Exception e) {
return Result.no(Status.UNAUTHORIZED);
}
/**
* 取消请求异常(忽略)
*/
@ExceptionHandler(value = ClientAbortException.class)
public void clientAbortExceptionHandler() {}
/**
* 其他异常
*
* @param e 异常信息
* @return 统一的500异常信息 {@link Status#INTERNAL_SERVER_ERROR
*/
@ExceptionHandler(value = Exception.class)
public Result<String> defaultErrorHandler(Exception e) {
public Result<String> defaultErrorHandler(Exception e, HttpServletResponse response) {
response.setStatus(Status.INTERNAL_SERVER_ERROR.value());
log.error(e.getMessage(), e);
return Result.no(Status.INTERNAL_SERVER_ERROR, e);
}
......
......@@ -18,13 +18,13 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/**
* 分页查询参数公共
* 分页查询参数公共类
*
* @author ifzm
* @version 0.1 2019/3/10 16:29
*/
@SuppressWarnings({ "unused" })
@ApiModel
@ApiModel("分页查询参数公共类")
@Data
@SuperBuilder
@NoArgsConstructor
......
/* (C) 2021 YiRing, Inc. */
package com.yiring.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.FieldDefaults;
/**
* 公共数据响应
*
* @author ifzm
* @version 0.1
* 2022/3/23 16:47
*/
@ApiModel("公共数据响应")
@NoArgsConstructor
@Getter(value = AccessLevel.PRIVATE)
@Setter(value = AccessLevel.PRIVATE)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DataVo<T extends Serializable> implements Serializable {
private static final long serialVersionUID = 2472779197432240431L;
@ApiModelProperty(value = "数据")
T data;
/**
* 通常在带有时效性的数据查询时有用途(可选参数)
*/
@ApiModelProperty(value = "数据最新时间")
LocalDateTime latest;
/**
* 构建一个 DataVo
* @param data 数据
* @return DataVo
*/
@SuppressWarnings({ "unused" })
public static <R extends Serializable> DataVo<R> build(R data) {
return build(data, null);
}
/**
* 构建一个 DataVo
* @param data 数据
* @param latest 数据最新时间
* @return DataVo
*/
@SuppressWarnings({ "unused" })
public static <R extends Serializable> DataVo<R> build(R data, LocalDateTime latest) {
DataVo<R> vo = new DataVo<>();
vo.setData(data);
vo.setLatest(latest);
return vo;
}
}
......@@ -4,6 +4,7 @@ package com.yiring.app.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
......@@ -33,6 +34,12 @@ public class PageVo<T extends Serializable> implements Serializable {
Long total;
/**
* 通常在带有时效性的数据查询时有用途(可选参数)
*/
@ApiModelProperty(value = "数据最新时间")
LocalDateTime latest;
/**
* 构建一个 PageVo
* @param data 数据
* @param total 总数据量
......@@ -40,9 +47,22 @@ public class PageVo<T extends Serializable> implements Serializable {
*/
@SuppressWarnings({ "unused" })
public static <R extends Serializable> PageVo<R> build(List<R> data, long total) {
return build(data, total, null);
}
/**
* 构建一个 PageVo
* @param data 数据
* @param total 总数据量
* @param latest 数据最新时间
* @return PageVo
*/
@SuppressWarnings({ "unused" })
public static <R extends Serializable> PageVo<R> build(List<R> data, long total, LocalDateTime latest) {
PageVo<R> vo = new PageVo<>();
vo.setData(data);
vo.setTotal(total);
vo.setLatest(latest);
return vo;
}
}
......@@ -5,6 +5,7 @@ import com.yiring.app.param.IdParam;
import com.yiring.app.param.PageParam;
import com.yiring.app.vo.PageVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import io.swagger.annotations.Api;
import java.util.Arrays;
import java.util.List;
......@@ -17,14 +18,14 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
@Validated
@Api(tags = "Hello World")
@RestController("/")
@RestController("/hello/")
public class HelloController {
String text = "😎 Hello World";
@GetMapping
public Result<String> hello() {
return Result.ok(text);
return Result.no(Status.BAD_REQUEST, "测试错误");
}
@GetMapping("id")
......
......@@ -9,3 +9,13 @@ spring:
open-in-view: true
hibernate:
ddl-auto: update
knife4j:
enable: true
basic:
enable: true
username: admin
password: 123456
setting:
enableOpenApi: false
enableDebug: true
......@@ -12,3 +12,13 @@ spring:
h2:
console:
enabled: true
knife4j:
enable: true
basic:
enable: true
username: admin
password: 123456
setting:
enableOpenApi: false
enableDebug: true
server:
port: 8080
port: 8181
servlet:
context-path: /api
......@@ -7,7 +7,7 @@ spring:
application:
name: "basic-api-app"
profiles:
include: auth,doc
include: auth
active: mock
# DEBUG
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.auth.config;
import cn.dev33.satoken.interceptor.SaRouteInterceptor;
import cn.dev33.satoken.router.SaHttpMethod;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 路由拦截器鉴权
*
* @author Jim
* @version 0.1
* 2022/1/28 20:35
*/
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册Sa-Token的路由拦截器
registry
.addInterceptor(
new SaRouteInterceptor((req, res, handler) -> {
// 登录认证 -- 拦截所有路由,并排除 /auth/** 用于开放授权相关, 以及 swagger 相关
SaRouter
.match("/**")
.notMatchMethod(SaHttpMethod.OPTIONS.name())
// TODO: 实现用户权限相关后应移除下行代码
.notMatch("/**")
.notMatch("/auth/**")
.notMatch("/favicon.ico", "/**/*.html", "/**/*.js", "/**/*.css")
.notMatch("/v2/api-docs", "/v3/api-docs", "/swagger-resources/**")
.check(r -> StpUtil.checkLogin());
})
)
.addPathPatterns("/**");
}
}
/**
* @author Jim
* @version 0.1
* 2021/11/22 13:03
* 2022/3/23 16:18
*/
package com.yiring.common;
package com.yiring.auth;
......@@ -6,4 +6,9 @@ dependencies {
// swagger annotations
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}"
// hutool-extra
implementation "cn.hutool:hutool-extra:${hutoolVersion}"
// hutool-json
implementation "cn.hutool:hutool-json:${hutoolVersion}"
}
/* (C) 2021 YiRing, Inc. */
package com.yiring.common.aspect;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.json.JSONObject;
import com.yiring.common.constant.DateFormatter;
import com.yiring.common.core.Result;
import com.yiring.common.util.Commons;
......@@ -11,12 +13,13 @@ import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
/**
* 请求接口切面,记录接口耗时
* 请求接口切面,记录接口耗时相关
*
* @author ifzm
* @version 0.1
......@@ -27,6 +30,9 @@ import org.springframework.web.context.request.RequestContextHolder;
@Component
public class RequestAspect {
@Value("${debug}")
Boolean debug;
@Pointcut(
"@annotation(org.springframework.web.bind.annotation.PostMapping) || @annotation(org.springframework.web.bind.annotation.GetMapping) || @annotation(org.springframework.web.bind.annotation.ExceptionHandler)"
)
......@@ -44,12 +50,20 @@ public class RequestAspect {
String times = String.format("%.3fs", (double) (end - start) / 1000);
// Print Request Log (Optional Replace: MDC)
String extra = "";
if (Boolean.TRUE.equals(debug)) {
extra += String.format("\nHeaders: %s", new JSONObject(ServletUtil.getHeaderMap(request)).toStringPretty());
extra += String.format("\nParams: %s", new JSONObject(ServletUtil.getParamMap(request)).toStringPretty());
if (result instanceof Result) {
extra += String.format("\nResponse Status: %s", ((Result<?>) result).getStatus());
}
}
log.info(
"[Request] {} - URL: {}, IP: {}, Times: {}",
timestamp,
"[Request] URL: {}, IP: {}, Times: {}{}",
request.getRequestURL(),
Commons.getClientIpAddress(request),
times
times,
extra
);
if (result instanceof Result) {
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import com.yiring.common.constant.DateFormatter;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
/**
* DateTime Config
*
* @author ifzm
* 2020/7/8 00:35
*/
@Configuration
public class DateTimeConfig {
@Bean(name = "mapperObject")
public ObjectMapper getObjectMapper() {
JavaTimeModule timeModule = new JavaTimeModule();
timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateFormatter.DATE_TIME));
timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateFormatter.DATE));
timeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateFormatter.TIME));
timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateFormatter.DATE_TIME));
timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateFormatter.DATE));
timeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateFormatter.TIME));
// feat: add AdminServerModule
// .setSerializationInclusion(JsonInclude.Include.NON_NULL)
return new ObjectMapper().registerModules(timeModule);
}
@Bean
public StringToLocalDateTimeConverter localDateTimeConverter() {
return source -> LocalDateTime.parse(source, DateFormatter.DATE_TIME);
}
@Bean
public StringToLocalDateConverter localDateConverter() {
return source -> LocalDate.parse(source, DateFormatter.DATE);
}
@Bean
public StringToLocalTimeConverter localTimeConverter() {
return source -> LocalTime.parse(source, DateFormatter.TIME);
}
interface StringToLocalDateTimeConverter extends Converter<String, LocalDateTime> {}
interface StringToLocalDateConverter extends Converter<String, LocalDate> {}
interface StringToLocalTimeConverter extends Converter<String, LocalTime> {}
}
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.config;
package com.yiring.common.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
......
......@@ -49,6 +49,12 @@ public class Result<T extends Serializable> implements Serializable {
Integer status;
/**
* 业务标识码
*/
@ApiModelProperty(value = "业务标识码", example = "0")
Integer code;
/**
* 响应消息
*/
@ApiModelProperty(value = "消息", example = "OK")
......@@ -104,7 +110,7 @@ public class Result<T extends Serializable> implements Serializable {
* @see Status#BAD_REQUEST
*/
public static <T extends Serializable> Result<T> no(Status status) {
return no(status, null, null);
return no(status, null, null, null);
}
/**
......@@ -114,7 +120,7 @@ public class Result<T extends Serializable> implements Serializable {
* @see Status
*/
public static <T extends Serializable> Result<T> no(Status status, String details) {
return no(status, details, null);
return no(status, null, details, null);
}
/**
......@@ -124,7 +130,7 @@ public class Result<T extends Serializable> implements Serializable {
* @see Status
*/
public static <T extends Serializable> Result<T> no(Status status, Throwable error) {
return no(status, null, error);
return no(status, null, null, error);
}
/**
......@@ -133,11 +139,12 @@ public class Result<T extends Serializable> implements Serializable {
* @return Result
* @see Status
*/
public static <T extends Serializable> Result<T> no(Status status, String details, Throwable error) {
public static <T extends Serializable> Result<T> no(Status status, Integer code, String details, Throwable error) {
Result<T> result = (Result<T>) Result
.builder()
.status(status.value())
.message(status.getReasonPhrase())
.code(code)
.details(details)
.build();
......
knife4j:
enable: true
basic:
enable: true
username: admin
password: 123456
setting:
enableOpenApi: false
enableDebug: true
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation "org.apache.commons:commons-lang3:${commonsLangVersion}"
}
......@@ -11,7 +11,6 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
/**
* Mapping 序列化
......@@ -40,7 +39,7 @@ public class ObjectMappingSerializer extends StdSerializer<Object> implements Co
String mapping = mappingSerialize.mapping();
Map<String, String> map = new HashMap<>();
if (!StringUtils.isEmpty(mapping)) {
if (mapping.length() > 0) {
String[] strings = mapping.split(",");
for (String str : strings) {
String[] split = str.split(":");
......@@ -56,7 +55,7 @@ public class ObjectMappingSerializer extends StdSerializer<Object> implements Co
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {
String text = mapping.get(Objects.toString(value));
if (StringUtils.isEmpty(text)) {
if (text == null || text.length() == 0) {
gen.writeObject(value);
} else {
gen.writeString(text);
......
......@@ -13,18 +13,24 @@ buildscript {
saTokenVersion = '1.28.0'
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
commonsLangVersion = '3.12.0'
// https://mvnrepository.com/artifact/cn.hutool/hutool-all
hutoolVersion = '5.7.22'
// https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core
xxlJobVersion = '2.3.0'
// https://mvnrepository.com/artifact/com.alibaba/fastjson
fastJsonVersion = '1.2.79'
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.8'
id 'org.springframework.boot' version '2.5.10'
// https://plugins.gradle.org/plugin/io.spring.dependency-management
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
// https://plugins.gradle.org/plugin/com.diffplug.spotless
id "com.diffplug.spotless" version "6.0.0"
id "com.diffplug.spotless" version "6.3.0"
// https://plugins.gradle.org/plugin/com.github.spotbugs
id "com.github.spotbugs" version "4.7.10"
// id "com.github.spotbugs" version "4.7.10"
}
group = 'com.yiring'
......@@ -46,7 +52,7 @@ subprojects {
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
apply plugin: "com.diffplug.spotless"
apply plugin: "com.github.spotbugs"
// apply plugin: "com.github.spotbugs"
configurations {
compileOnly {
......@@ -98,7 +104,7 @@ subprojects {
licenseHeader '/* (C) $YEAR YiRing, Inc. */'
// https://www.npmjs.com/package/prettier
// https://www.npmjs.com/package/prettier-plugin-java
prettier(['prettier': '2.5.1', 'prettier-plugin-java': '1.6.0']).config([
prettier(['prettier': '2.6.0', 'prettier-plugin-java': '1.6.1']).config([
'parser' : 'java',
'tabWidth' : 4,
'printWidth': 120,
......@@ -116,7 +122,7 @@ def hook = new File("$rootProject.projectDir/.git/hooks/pre-commit")
hook.text = """#!/bin/bash
#set -x
./gradlew spotlessCheck spotbugsMain
./gradlew spotlessCheck
RESULT=\$?
exit \$RESULT
......
### IDE 插件推荐清单
> IDEA
<!-- prettier-ignore -->
-[IDE Eval Rest](https://www.cnblogs.com/wang-cong/p/15150585.html) - IDEA 无限重置试用插件
-[.ignore](https://plugins.jetbrains.com/plugin/7495--ignore)
-[GitToolBox](https://plugins.jetbrains.com/plugin/7499-gittoolbox)
-[Grep Console](https://plugins.jetbrains.com/plugin/7125-grep-console)
-[Rainbow Brackets](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets)
-[Spotless Gradle](https://plugins.jetbrains.com/plugin/18321-spotless-gradle)
- [Prettier](https://plugins.jetbrains.com/plugin/10456-prettier)
- [Nyan Progress Bar](https://plugins.jetbrains.com/plugin/8575-nyan-progress-bar)
- [JPA Buddy](https://plugins.jetbrains.com/plugin/15075-jpa-buddy)
## 技术栈
### 基础
<!-- prettier-ignore -->
- [Vue v3.x](https://v3.vuejs.org/guide/introduction.html)
- [uni-app@vue3 v3.x-alpha](https://uniapp.dcloud.io/tutorial/migration-to-vue3.html), 依赖 `HBuilderX Alpha` 版本编辑器
- [TypeScript](https://www.typescriptlang.org/zh/)
- [Sass](https://www.sass.hk/)
### UI
<!-- prettier-ignore -->
- [uni-ui@vue3](https://github.com/dcloudio/uni-ui)
- 备选方案: [uView](https://uviewui.com/), 由于尚未完成 Vue3 的适配, 暂不推荐使用
### Tools
<!-- prettier-ignore -->
- [Lodash](https://github.com/lodash/lodash) 函数库
- [Dayjs](https://github.com/iamkun/dayjs) 时间库
- [@vueuse/core](https://github.com/vueuse/vueuse) Vue2/3 实用工具集
- [mock.js](https://github.com/nuysoft/Mock) 数据模拟
### 网络
<!-- prettier-ignore -->
- [uni.request](https://uniapp.dcloud.net.cn/api/request/request.html)
- [uni-ajax](https://uniajax.ponjs.com/)
### 图表
<!-- prettier-ignore -->
- [ucharts](https://gitee.com/uCharts/uCharts)
### 构建工具
<!-- prettier-ignore -->
- [HBuilderX Alpha](https://download1.dcloud.net.cn/hbuilderx/changelog/3.4.2.20220310-alpha.html)
- [Vite v2.x](https://vitejs.dev)
### 其他插件
<!-- prettier-ignore -->
- [prettier](https://prettier.io) 代码格式化工具
- [husky](https://github.com/typicode/husky) Git hooks 插件
- [ESLint](https://eslint.org) 代码规范检查工具
- [stylelint](https://stylelint.io) CSS 规范检查工具
- [commitizen](https://github.com/commitizen) Git 提交规范工具
- [lint-staged](https://github.com/okonet/lint-staged)
- ...
# 开发工作流规范
> 🥇 适用于前后端项目开发
## 开发前必读 🔥
以下内容,项目负责人及开发团队成员务必遵守,共同营造一个良好的开发环境
1. 使用代码规范检查工具(前端:`ESLint`,后端:`Spotless`),规范项通常使用业内标准,再由团队协商调整部分检查项
2. 使用代码格式规范工具统一编码风格(前端:`Prettier`,后端:`Spotless + Prettier for Java`
3. 使用 `GitHook` 来自动化规范提交前的代码初步检查
4. ~~TODO...~~
## 代码管理规范 ⚠️
重要:所有项目统一由负责人在 GitLab 上创建群组,与项目有关的前后端工程,全部在群组内预先创建好,并分配人员,不允许将项目挂在私人账号下进行协同开发。
## Git 规范 ✅
简化使用 [git-flow](https://www.gitflow.com/),具体说明参考如下
### 分支规范
1. master (主分支)
2. develop (开发分支)
3. dev_fzm (开发人员分支,fzm 代表用户方治民)
4. release、hotfix (视情况产生的分支,用完删除)
共包含五种类型的分支,暂定工作流程图如下
![image](http://img.ifzm.cn/git-flow.2020-02-14.png)
develop 分支允许开发时用于代码合并,保持最新的汇总版本
develop 分支之上为权限分支,仅由负责人负责合并代码或创建新分支,以及发布版本
### 提交规范
> **推荐方式**: 使用 [cz-cli](https://github.com/commitizen/cz-cli) 来提交代码,推荐使用 `cz-conventional-changelog` 插件来提交更新日志
<!-- prettier-ignore -->
- 禁止提交自己的本地配置,如:`.idea/.vscode``local/env` 配置(特殊情况下需要团队保持强一致时可以提交)
- 禁止提交不能通过编译的代码
- 养成早提交、多提交习惯,最好每开发一个功能都 `commit` 一次,提交前需要先更新
### Commit Message 规范
规范 `Commit Message` 格式(注意冒号后面有空格)
```md
<type>: <subject> <#id>
```
#### 常用的 type 类别
<!-- prettier-ignore -->
- `feat`:新增 xxx 功能
- `fix`:修复 xxx Bug
- `docs`:变更 xxx 文档
- `style`: 变更 xxx 代码格式或注释
- `refactor`:重构 xxx 功能或方法
- `test`:调试 xxx 功能或新增 xxx 测试用例
- `chore`:构建过程或辅助工具的变动(较少出现,项目构建之初基本已确定好)
- `build`: 发布 v0.0.1 版本
#### subject 简述
`subject``commit` 描述信息,尽可能简明扼要。
#### id 标识
`#id` 代表 [PingCode](https://yiring.pingcode.com) 任务、Bug 编号(可选,如果有对应的必须填写)
#### 示例
```sh
git commit -m 'feat: 新增用户登录功能'
git commit -m 'fix: 修复由 token 问题引起的需要重复登录 Bug #1002'
```
version: '3'
services:
# 应用服务
basic-api:
build:
context: .
dockerfile: Dockerfile
# 镜像名称
image: 127.0.0.1:18500/basic/basic-api:0.0.1
# 容器名称
container_name: 'basic-api'
# 端口绑定
ports:
- "18181:8181"
# 当 docker 重启时,容器自动启动
restart: always
# 挂载目录
volumes:
- "/volume/basic/app/data:/data"
- "/volume/basic/app/logs:/logs"
environment:
# 设置时区
- TZ=Asia/Shanghai
# 指定网络
networks:
- basic
networks:
basic:
{
"name": "basic-api-project",
"version": "0.0.1",
"devDependencies": {
"cz-conventional-changelog": "^3.3.0"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
lockfileVersion: 5.3
specifiers:
cz-conventional-changelog: ^3.3.0
devDependencies:
cz-conventional-changelog: registry.npmjs.org/cz-conventional-changelog/3.3.0
packages:
registry.npmjs.org/@babel/code-frame/7.16.7:
resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz}
name: '@babel/code-frame'
version: 7.16.7
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': registry.npmjs.org/@babel/highlight/7.16.10
dev: true
optional: true
registry.npmjs.org/@babel/helper-validator-identifier/7.16.7:
resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz}
name: '@babel/helper-validator-identifier'
version: 7.16.7
engines: {node: '>=6.9.0'}
dev: true
optional: true
registry.npmjs.org/@babel/highlight/7.16.10:
resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz}
name: '@babel/highlight'
version: 7.16.10
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.16.7
chalk: registry.npmjs.org/chalk/2.4.2
js-tokens: registry.npmjs.org/js-tokens/4.0.0
dev: true
optional: true
registry.npmjs.org/@commitlint/config-validator/16.2.1:
resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-16.2.1.tgz}
name: '@commitlint/config-validator'
version: 16.2.1
engines: {node: '>=v12'}
dependencies:
'@commitlint/types': registry.npmjs.org/@commitlint/types/16.2.1
ajv: registry.npmjs.org/ajv/6.12.6
dev: true
optional: true
registry.npmjs.org/@commitlint/execute-rule/16.2.1:
resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-16.2.1.tgz}
name: '@commitlint/execute-rule'
version: 16.2.1
engines: {node: '>=v12'}
dev: true
optional: true
registry.npmjs.org/@commitlint/load/16.2.3:
resolution: {integrity: sha512-Hb4OUlMnBUK6UxJEZ/VJ5k0LocIS7PtEMbRXEAA7eSpOgORIFexC4K/RaRpVd5UTtu3M0ST3ddPPijF9rdW6nw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@commitlint/load/-/load-16.2.3.tgz}
name: '@commitlint/load'
version: 16.2.3
engines: {node: '>=v12'}
requiresBuild: true
dependencies:
'@commitlint/config-validator': registry.npmjs.org/@commitlint/config-validator/16.2.1
'@commitlint/execute-rule': registry.npmjs.org/@commitlint/execute-rule/16.2.1
'@commitlint/resolve-extends': registry.npmjs.org/@commitlint/resolve-extends/16.2.1
'@commitlint/types': registry.npmjs.org/@commitlint/types/16.2.1
'@types/node': registry.npmjs.org/@types/node/17.0.22
chalk: registry.npmjs.org/chalk/4.1.2
cosmiconfig: registry.npmjs.org/cosmiconfig/7.0.1
cosmiconfig-typescript-loader: registry.npmjs.org/cosmiconfig-typescript-loader/1.0.6_5338de7ff0b33ef224ee85855d74b9f4
lodash: registry.npmjs.org/lodash/4.17.21
resolve-from: registry.npmjs.org/resolve-from/5.0.0
typescript: registry.npmjs.org/typescript/4.6.2
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
dev: true
optional: true
registry.npmjs.org/@commitlint/resolve-extends/16.2.1:
resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-16.2.1.tgz}
name: '@commitlint/resolve-extends'
version: 16.2.1
engines: {node: '>=v12'}
dependencies:
'@commitlint/config-validator': registry.npmjs.org/@commitlint/config-validator/16.2.1
'@commitlint/types': registry.npmjs.org/@commitlint/types/16.2.1
import-fresh: registry.npmjs.org/import-fresh/3.3.0
lodash: registry.npmjs.org/lodash/4.17.21
resolve-from: registry.npmjs.org/resolve-from/5.0.0
resolve-global: registry.npmjs.org/resolve-global/1.0.0
dev: true
optional: true
registry.npmjs.org/@commitlint/types/16.2.1:
resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@commitlint/types/-/types-16.2.1.tgz}
name: '@commitlint/types'
version: 16.2.1
engines: {node: '>=v12'}
dependencies:
chalk: registry.npmjs.org/chalk/4.1.2
dev: true
optional: true
registry.npmjs.org/@cspotcode/source-map-consumer/0.8.0:
resolution: {integrity: sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz}
name: '@cspotcode/source-map-consumer'
version: 0.8.0
engines: {node: '>= 12'}
dev: true
optional: true
registry.npmjs.org/@cspotcode/source-map-support/0.7.0:
resolution: {integrity: sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz}
name: '@cspotcode/source-map-support'
version: 0.7.0
engines: {node: '>=12'}
dependencies:
'@cspotcode/source-map-consumer': registry.npmjs.org/@cspotcode/source-map-consumer/0.8.0
dev: true
optional: true
registry.npmjs.org/@tsconfig/node10/1.0.8:
resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz}
name: '@tsconfig/node10'
version: 1.0.8
dev: true
optional: true
registry.npmjs.org/@tsconfig/node12/1.0.9:
resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz}
name: '@tsconfig/node12'
version: 1.0.9
dev: true
optional: true
registry.npmjs.org/@tsconfig/node14/1.0.1:
resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz}
name: '@tsconfig/node14'
version: 1.0.1
dev: true
optional: true
registry.npmjs.org/@tsconfig/node16/1.0.2:
resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz}
name: '@tsconfig/node16'
version: 1.0.2
dev: true
optional: true
registry.npmjs.org/@types/node/17.0.22:
resolution: {integrity: sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-17.0.22.tgz}
name: '@types/node'
version: 17.0.22
dev: true
optional: true
registry.npmjs.org/@types/parse-json/4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz}
name: '@types/parse-json'
version: 4.0.0
dev: true
optional: true
registry.npmjs.org/acorn-walk/8.2.0:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz}
name: acorn-walk
version: 8.2.0
engines: {node: '>=0.4.0'}
dev: true
optional: true
registry.npmjs.org/acorn/8.7.0:
resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz}
name: acorn
version: 8.7.0
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
optional: true
registry.npmjs.org/ajv/6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz}
name: ajv
version: 6.12.6
dependencies:
fast-deep-equal: registry.npmjs.org/fast-deep-equal/3.1.3
fast-json-stable-stringify: registry.npmjs.org/fast-json-stable-stringify/2.1.0
json-schema-traverse: registry.npmjs.org/json-schema-traverse/0.4.1
uri-js: registry.npmjs.org/uri-js/4.4.1
dev: true
optional: true
registry.npmjs.org/ansi-escapes/3.2.0:
resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz}
name: ansi-escapes
version: 3.2.0
engines: {node: '>=4'}
dev: true
registry.npmjs.org/ansi-regex/3.0.0:
resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz}
name: ansi-regex
version: 3.0.0
engines: {node: '>=4'}
dev: true
registry.npmjs.org/ansi-regex/4.1.1:
resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz}
name: ansi-regex
version: 4.1.1
engines: {node: '>=6'}
dev: true
registry.npmjs.org/ansi-styles/3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz}
name: ansi-styles
version: 3.2.1
engines: {node: '>=4'}
dependencies:
color-convert: registry.npmjs.org/color-convert/1.9.3
dev: true
registry.npmjs.org/ansi-styles/4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz}
name: ansi-styles
version: 4.3.0
engines: {node: '>=8'}
dependencies:
color-convert: registry.npmjs.org/color-convert/2.0.1
dev: true
optional: true
registry.npmjs.org/arg/4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/arg/-/arg-4.1.3.tgz}
name: arg
version: 4.1.3
dev: true
optional: true
registry.npmjs.org/balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz}
name: balanced-match
version: 1.0.2
dev: true
registry.npmjs.org/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz}
name: brace-expansion
version: 1.1.11
dependencies:
balanced-match: registry.npmjs.org/balanced-match/1.0.2
concat-map: registry.npmjs.org/concat-map/0.0.1
dev: true
registry.npmjs.org/braces/3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/braces/-/braces-3.0.2.tgz}
name: braces
version: 3.0.2
engines: {node: '>=8'}
dependencies:
fill-range: registry.npmjs.org/fill-range/7.0.1
dev: true
registry.npmjs.org/cachedir/2.2.0:
resolution: {integrity: sha512-VvxA0xhNqIIfg0V9AmJkDg91DaJwryutH5rVEZAhcNi4iJFj9f+QxmAjgK1LT9I8OgToX27fypX6/MeCXVbBjQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cachedir/-/cachedir-2.2.0.tgz}
name: cachedir
version: 2.2.0
engines: {node: '>=6'}
dev: true
registry.npmjs.org/callsites/3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz}
name: callsites
version: 3.1.0
engines: {node: '>=6'}
dev: true
optional: true
registry.npmjs.org/chalk/2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz}
name: chalk
version: 2.4.2
engines: {node: '>=4'}
dependencies:
ansi-styles: registry.npmjs.org/ansi-styles/3.2.1
escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5
supports-color: registry.npmjs.org/supports-color/5.5.0
dev: true
registry.npmjs.org/chalk/4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz}
name: chalk
version: 4.1.2
engines: {node: '>=10'}
dependencies:
ansi-styles: registry.npmjs.org/ansi-styles/4.3.0
supports-color: registry.npmjs.org/supports-color/7.2.0
dev: true
optional: true
registry.npmjs.org/chardet/0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz}
name: chardet
version: 0.7.0
dev: true
registry.npmjs.org/cli-cursor/2.1.0:
resolution: {integrity: sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz}
name: cli-cursor
version: 2.1.0
engines: {node: '>=4'}
dependencies:
restore-cursor: registry.npmjs.org/restore-cursor/2.0.0
dev: true
registry.npmjs.org/cli-width/2.2.1:
resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz}
name: cli-width
version: 2.2.1
dev: true
registry.npmjs.org/color-convert/1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz}
name: color-convert
version: 1.9.3
dependencies:
color-name: registry.npmjs.org/color-name/1.1.3
dev: true
registry.npmjs.org/color-convert/2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz}
name: color-convert
version: 2.0.1
engines: {node: '>=7.0.0'}
dependencies:
color-name: registry.npmjs.org/color-name/1.1.4
dev: true
optional: true
registry.npmjs.org/color-name/1.1.3:
resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz}
name: color-name
version: 1.1.3
dev: true
registry.npmjs.org/color-name/1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz}
name: color-name
version: 1.1.4
dev: true
optional: true
registry.npmjs.org/commitizen/4.2.4:
resolution: {integrity: sha512-LlZChbDzg3Ir3O2S7jSo/cgWp5/QwylQVr59K4xayVq8S4/RdKzSyJkghAiZZHfhh5t4pxunUoyeg0ml1q/7aw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/commitizen/-/commitizen-4.2.4.tgz}
name: commitizen
version: 4.2.4
engines: {node: '>= 10'}
hasBin: true
dependencies:
cachedir: registry.npmjs.org/cachedir/2.2.0
cz-conventional-changelog: registry.npmjs.org/cz-conventional-changelog/3.2.0
dedent: registry.npmjs.org/dedent/0.7.0
detect-indent: registry.npmjs.org/detect-indent/6.0.0
find-node-modules: registry.npmjs.org/find-node-modules/2.1.3
find-root: registry.npmjs.org/find-root/1.1.0
fs-extra: registry.npmjs.org/fs-extra/8.1.0
glob: registry.npmjs.org/glob/7.1.4
inquirer: registry.npmjs.org/inquirer/6.5.2
is-utf8: registry.npmjs.org/is-utf8/0.2.1
lodash: registry.npmjs.org/lodash/4.17.21
minimist: registry.npmjs.org/minimist/1.2.5
strip-bom: registry.npmjs.org/strip-bom/4.0.0
strip-json-comments: registry.npmjs.org/strip-json-comments/3.0.1
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
dev: true
registry.npmjs.org/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz}
name: concat-map
version: 0.0.1
dev: true
registry.npmjs.org/conventional-commit-types/3.0.0:
resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz}
name: conventional-commit-types
version: 3.0.0
dev: true
registry.npmjs.org/cosmiconfig-typescript-loader/1.0.6_5338de7ff0b33ef224ee85855d74b9f4:
resolution: {integrity: sha512-2nEotziYJWtNtoTjKbchj9QrdTT6DBxCvqjNKoDKARw+e2yZmTQCa07uRrykLIZuvSgp69YXLH89UHc0WhdMfQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.6.tgz}
id: registry.npmjs.org/cosmiconfig-typescript-loader/1.0.6
name: cosmiconfig-typescript-loader
version: 1.0.6
engines: {node: '>=12', npm: '>=6'}
peerDependencies:
'@types/node': '*'
typescript: '>=3'
dependencies:
'@types/node': registry.npmjs.org/@types/node/17.0.22
cosmiconfig: registry.npmjs.org/cosmiconfig/7.0.1
ts-node: registry.npmjs.org/ts-node/10.7.0_5338de7ff0b33ef224ee85855d74b9f4
typescript: registry.npmjs.org/typescript/4.6.2
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
dev: true
optional: true
registry.npmjs.org/cosmiconfig/7.0.1:
resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz}
name: cosmiconfig
version: 7.0.1
engines: {node: '>=10'}
dependencies:
'@types/parse-json': registry.npmjs.org/@types/parse-json/4.0.0
import-fresh: registry.npmjs.org/import-fresh/3.3.0
parse-json: registry.npmjs.org/parse-json/5.2.0
path-type: registry.npmjs.org/path-type/4.0.0
yaml: registry.npmjs.org/yaml/1.10.2
dev: true
optional: true
registry.npmjs.org/create-require/1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz}
name: create-require
version: 1.1.1
dev: true
optional: true
registry.npmjs.org/cz-conventional-changelog/3.2.0:
resolution: {integrity: sha512-yAYxeGpVi27hqIilG1nh4A9Bnx4J3Ov+eXy4koL3drrR+IO9GaWPsKjik20ht608Asqi8TQPf0mczhEeyAtMzg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.2.0.tgz}
name: cz-conventional-changelog
version: 3.2.0
engines: {node: '>= 10'}
dependencies:
chalk: registry.npmjs.org/chalk/2.4.2
commitizen: registry.npmjs.org/commitizen/4.2.4
conventional-commit-types: registry.npmjs.org/conventional-commit-types/3.0.0
lodash.map: registry.npmjs.org/lodash.map/4.6.0
longest: registry.npmjs.org/longest/2.0.1
word-wrap: registry.npmjs.org/word-wrap/1.2.3
optionalDependencies:
'@commitlint/load': registry.npmjs.org/@commitlint/load/16.2.3
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
dev: true
registry.npmjs.org/cz-conventional-changelog/3.3.0:
resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz}
name: cz-conventional-changelog
version: 3.3.0
engines: {node: '>= 10'}
dependencies:
chalk: registry.npmjs.org/chalk/2.4.2
commitizen: registry.npmjs.org/commitizen/4.2.4
conventional-commit-types: registry.npmjs.org/conventional-commit-types/3.0.0
lodash.map: registry.npmjs.org/lodash.map/4.6.0
longest: registry.npmjs.org/longest/2.0.1
word-wrap: registry.npmjs.org/word-wrap/1.2.3
optionalDependencies:
'@commitlint/load': registry.npmjs.org/@commitlint/load/16.2.3
transitivePeerDependencies:
- '@swc/core'
- '@swc/wasm'
dev: true
registry.npmjs.org/dedent/0.7.0:
resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz}
name: dedent
version: 0.7.0
dev: true
registry.npmjs.org/detect-file/1.0.0:
resolution: {integrity: sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz}
name: detect-file
version: 1.0.0
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/detect-indent/6.0.0:
resolution: {integrity: sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz}
name: detect-indent
version: 6.0.0
engines: {node: '>=8'}
dev: true
registry.npmjs.org/diff/4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/diff/-/diff-4.0.2.tgz}
name: diff
version: 4.0.2
engines: {node: '>=0.3.1'}
dev: true
optional: true
registry.npmjs.org/error-ex/1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz}
name: error-ex
version: 1.3.2
dependencies:
is-arrayish: registry.npmjs.org/is-arrayish/0.2.1
dev: true
optional: true
registry.npmjs.org/escape-string-regexp/1.0.5:
resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz}
name: escape-string-regexp
version: 1.0.5
engines: {node: '>=0.8.0'}
dev: true
registry.npmjs.org/expand-tilde/2.0.2:
resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz}
name: expand-tilde
version: 2.0.2
engines: {node: '>=0.10.0'}
dependencies:
homedir-polyfill: registry.npmjs.org/homedir-polyfill/1.0.3
dev: true
registry.npmjs.org/external-editor/3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz}
name: external-editor
version: 3.1.0
engines: {node: '>=4'}
dependencies:
chardet: registry.npmjs.org/chardet/0.7.0
iconv-lite: registry.npmjs.org/iconv-lite/0.4.24
tmp: registry.npmjs.org/tmp/0.0.33
dev: true
registry.npmjs.org/fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz}
name: fast-deep-equal
version: 3.1.3
dev: true
optional: true
registry.npmjs.org/fast-json-stable-stringify/2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz}
name: fast-json-stable-stringify
version: 2.1.0
dev: true
optional: true
registry.npmjs.org/figures/2.0.0:
resolution: {integrity: sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/figures/-/figures-2.0.0.tgz}
name: figures
version: 2.0.0
engines: {node: '>=4'}
dependencies:
escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5
dev: true
registry.npmjs.org/fill-range/7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz}
name: fill-range
version: 7.0.1
engines: {node: '>=8'}
dependencies:
to-regex-range: registry.npmjs.org/to-regex-range/5.0.1
dev: true
registry.npmjs.org/find-node-modules/2.1.3:
resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz}
name: find-node-modules
version: 2.1.3
dependencies:
findup-sync: registry.npmjs.org/findup-sync/4.0.0
merge: registry.npmjs.org/merge/2.1.1
dev: true
registry.npmjs.org/find-root/1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz}
name: find-root
version: 1.1.0
dev: true
registry.npmjs.org/findup-sync/4.0.0:
resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz}
name: findup-sync
version: 4.0.0
engines: {node: '>= 8'}
dependencies:
detect-file: registry.npmjs.org/detect-file/1.0.0
is-glob: registry.npmjs.org/is-glob/4.0.3
micromatch: registry.npmjs.org/micromatch/4.0.4
resolve-dir: registry.npmjs.org/resolve-dir/1.0.1
dev: true
registry.npmjs.org/fs-extra/8.1.0:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz}
name: fs-extra
version: 8.1.0
engines: {node: '>=6 <7 || >=8'}
dependencies:
graceful-fs: registry.npmjs.org/graceful-fs/4.2.9
jsonfile: registry.npmjs.org/jsonfile/4.0.0
universalify: registry.npmjs.org/universalify/0.1.2
dev: true
registry.npmjs.org/fs.realpath/1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz}
name: fs.realpath
version: 1.0.0
dev: true
registry.npmjs.org/glob/7.1.4:
resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/glob/-/glob-7.1.4.tgz}
name: glob
version: 7.1.4
dependencies:
fs.realpath: registry.npmjs.org/fs.realpath/1.0.0
inflight: registry.npmjs.org/inflight/1.0.6
inherits: registry.npmjs.org/inherits/2.0.4
minimatch: registry.npmjs.org/minimatch/3.1.2
once: registry.npmjs.org/once/1.4.0
path-is-absolute: registry.npmjs.org/path-is-absolute/1.0.1
dev: true
registry.npmjs.org/global-dirs/0.1.1:
resolution: {integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz}
name: global-dirs
version: 0.1.1
engines: {node: '>=4'}
dependencies:
ini: registry.npmjs.org/ini/1.3.8
dev: true
optional: true
registry.npmjs.org/global-modules/1.0.0:
resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz}
name: global-modules
version: 1.0.0
engines: {node: '>=0.10.0'}
dependencies:
global-prefix: registry.npmjs.org/global-prefix/1.0.2
is-windows: registry.npmjs.org/is-windows/1.0.2
resolve-dir: registry.npmjs.org/resolve-dir/1.0.1
dev: true
registry.npmjs.org/global-prefix/1.0.2:
resolution: {integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz}
name: global-prefix
version: 1.0.2
engines: {node: '>=0.10.0'}
dependencies:
expand-tilde: registry.npmjs.org/expand-tilde/2.0.2
homedir-polyfill: registry.npmjs.org/homedir-polyfill/1.0.3
ini: registry.npmjs.org/ini/1.3.8
is-windows: registry.npmjs.org/is-windows/1.0.2
which: registry.npmjs.org/which/1.3.1
dev: true
registry.npmjs.org/graceful-fs/4.2.9:
resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz}
name: graceful-fs
version: 4.2.9
dev: true
registry.npmjs.org/has-flag/3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz}
name: has-flag
version: 3.0.0
engines: {node: '>=4'}
dev: true
registry.npmjs.org/has-flag/4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz}
name: has-flag
version: 4.0.0
engines: {node: '>=8'}
dev: true
optional: true
registry.npmjs.org/homedir-polyfill/1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz}
name: homedir-polyfill
version: 1.0.3
engines: {node: '>=0.10.0'}
dependencies:
parse-passwd: registry.npmjs.org/parse-passwd/1.0.0
dev: true
registry.npmjs.org/iconv-lite/0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz}
name: iconv-lite
version: 0.4.24
engines: {node: '>=0.10.0'}
dependencies:
safer-buffer: registry.npmjs.org/safer-buffer/2.1.2
dev: true
registry.npmjs.org/import-fresh/3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz}
name: import-fresh
version: 3.3.0
engines: {node: '>=6'}
dependencies:
parent-module: registry.npmjs.org/parent-module/1.0.1
resolve-from: registry.npmjs.org/resolve-from/4.0.0
dev: true
optional: true
registry.npmjs.org/inflight/1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz}
name: inflight
version: 1.0.6
dependencies:
once: registry.npmjs.org/once/1.4.0
wrappy: registry.npmjs.org/wrappy/1.0.2
dev: true
registry.npmjs.org/inherits/2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz}
name: inherits
version: 2.0.4
dev: true
registry.npmjs.org/ini/1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ini/-/ini-1.3.8.tgz}
name: ini
version: 1.3.8
dev: true
registry.npmjs.org/inquirer/6.5.2:
resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz}
name: inquirer
version: 6.5.2
engines: {node: '>=6.0.0'}
dependencies:
ansi-escapes: registry.npmjs.org/ansi-escapes/3.2.0
chalk: registry.npmjs.org/chalk/2.4.2
cli-cursor: registry.npmjs.org/cli-cursor/2.1.0
cli-width: registry.npmjs.org/cli-width/2.2.1
external-editor: registry.npmjs.org/external-editor/3.1.0
figures: registry.npmjs.org/figures/2.0.0
lodash: registry.npmjs.org/lodash/4.17.21
mute-stream: registry.npmjs.org/mute-stream/0.0.7
run-async: registry.npmjs.org/run-async/2.4.1
rxjs: registry.npmjs.org/rxjs/6.6.7
string-width: registry.npmjs.org/string-width/2.1.1
strip-ansi: registry.npmjs.org/strip-ansi/5.2.0
through: registry.npmjs.org/through/2.3.8
dev: true
registry.npmjs.org/is-arrayish/0.2.1:
resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz}
name: is-arrayish
version: 0.2.1
dev: true
optional: true
registry.npmjs.org/is-extglob/2.1.1:
resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz}
name: is-extglob
version: 2.1.1
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/is-fullwidth-code-point/2.0.0:
resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz}
name: is-fullwidth-code-point
version: 2.0.0
engines: {node: '>=4'}
dev: true
registry.npmjs.org/is-glob/4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz}
name: is-glob
version: 4.0.3
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: registry.npmjs.org/is-extglob/2.1.1
dev: true
registry.npmjs.org/is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz}
name: is-number
version: 7.0.0
engines: {node: '>=0.12.0'}
dev: true
registry.npmjs.org/is-utf8/0.2.1:
resolution: {integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz}
name: is-utf8
version: 0.2.1
dev: true
registry.npmjs.org/is-windows/1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz}
name: is-windows
version: 1.0.2
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/isexe/2.0.0:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz}
name: isexe
version: 2.0.0
dev: true
registry.npmjs.org/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz}
name: js-tokens
version: 4.0.0
dev: true
optional: true
registry.npmjs.org/json-parse-even-better-errors/2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
name: json-parse-even-better-errors
version: 2.3.1
dev: true
optional: true
registry.npmjs.org/json-schema-traverse/0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz}
name: json-schema-traverse
version: 0.4.1
dev: true
optional: true
registry.npmjs.org/jsonfile/4.0.0:
resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz}
name: jsonfile
version: 4.0.0
optionalDependencies:
graceful-fs: registry.npmjs.org/graceful-fs/4.2.9
dev: true
registry.npmjs.org/lines-and-columns/1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz}
name: lines-and-columns
version: 1.2.4
dev: true
optional: true
registry.npmjs.org/lodash.map/4.6.0:
resolution: {integrity: sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz}
name: lodash.map
version: 4.6.0
dev: true
registry.npmjs.org/lodash/4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz}
name: lodash
version: 4.17.21
dev: true
registry.npmjs.org/longest/2.0.1:
resolution: {integrity: sha1-eB4YMpaqlPbU2RbcM10NF676I/g=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/longest/-/longest-2.0.1.tgz}
name: longest
version: 2.0.1
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/make-error/1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz}
name: make-error
version: 1.3.6
dev: true
optional: true
registry.npmjs.org/merge/2.1.1:
resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/merge/-/merge-2.1.1.tgz}
name: merge
version: 2.1.1
dev: true
registry.npmjs.org/micromatch/4.0.4:
resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz}
name: micromatch
version: 4.0.4
engines: {node: '>=8.6'}
dependencies:
braces: registry.npmjs.org/braces/3.0.2
picomatch: registry.npmjs.org/picomatch/2.3.1
dev: true
registry.npmjs.org/mimic-fn/1.2.0:
resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz}
name: mimic-fn
version: 1.2.0
engines: {node: '>=4'}
dev: true
registry.npmjs.org/minimatch/3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz}
name: minimatch
version: 3.1.2
dependencies:
brace-expansion: registry.npmjs.org/brace-expansion/1.1.11
dev: true
registry.npmjs.org/minimist/1.2.5:
resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz}
name: minimist
version: 1.2.5
dev: true
registry.npmjs.org/mute-stream/0.0.7:
resolution: {integrity: sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz}
name: mute-stream
version: 0.0.7
dev: true
registry.npmjs.org/once/1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/once/-/once-1.4.0.tgz}
name: once
version: 1.4.0
dependencies:
wrappy: registry.npmjs.org/wrappy/1.0.2
dev: true
registry.npmjs.org/onetime/2.0.1:
resolution: {integrity: sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz}
name: onetime
version: 2.0.1
engines: {node: '>=4'}
dependencies:
mimic-fn: registry.npmjs.org/mimic-fn/1.2.0
dev: true
registry.npmjs.org/os-tmpdir/1.0.2:
resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz}
name: os-tmpdir
version: 1.0.2
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/parent-module/1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz}
name: parent-module
version: 1.0.1
engines: {node: '>=6'}
dependencies:
callsites: registry.npmjs.org/callsites/3.1.0
dev: true
optional: true
registry.npmjs.org/parse-json/5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz}
name: parse-json
version: 5.2.0
engines: {node: '>=8'}
dependencies:
'@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.16.7
error-ex: registry.npmjs.org/error-ex/1.3.2
json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors/2.3.1
lines-and-columns: registry.npmjs.org/lines-and-columns/1.2.4
dev: true
optional: true
registry.npmjs.org/parse-passwd/1.0.0:
resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz}
name: parse-passwd
version: 1.0.0
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/path-is-absolute/1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz}
name: path-is-absolute
version: 1.0.1
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/path-type/4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz}
name: path-type
version: 4.0.0
engines: {node: '>=8'}
dev: true
optional: true
registry.npmjs.org/picomatch/2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz}
name: picomatch
version: 2.3.1
engines: {node: '>=8.6'}
dev: true
registry.npmjs.org/punycode/2.1.1:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz}
name: punycode
version: 2.1.1
engines: {node: '>=6'}
dev: true
optional: true
registry.npmjs.org/resolve-dir/1.0.1:
resolution: {integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz}
name: resolve-dir
version: 1.0.1
engines: {node: '>=0.10.0'}
dependencies:
expand-tilde: registry.npmjs.org/expand-tilde/2.0.2
global-modules: registry.npmjs.org/global-modules/1.0.0
dev: true
registry.npmjs.org/resolve-from/4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz}
name: resolve-from
version: 4.0.0
engines: {node: '>=4'}
dev: true
optional: true
registry.npmjs.org/resolve-from/5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz}
name: resolve-from
version: 5.0.0
engines: {node: '>=8'}
dev: true
optional: true
registry.npmjs.org/resolve-global/1.0.0:
resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz}
name: resolve-global
version: 1.0.0
engines: {node: '>=8'}
dependencies:
global-dirs: registry.npmjs.org/global-dirs/0.1.1
dev: true
optional: true
registry.npmjs.org/restore-cursor/2.0.0:
resolution: {integrity: sha1-n37ih/gv0ybU/RYpI9YhKe7g368=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz}
name: restore-cursor
version: 2.0.0
engines: {node: '>=4'}
dependencies:
onetime: registry.npmjs.org/onetime/2.0.1
signal-exit: registry.npmjs.org/signal-exit/3.0.7
dev: true
registry.npmjs.org/run-async/2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz}
name: run-async
version: 2.4.1
engines: {node: '>=0.12.0'}
dev: true
registry.npmjs.org/rxjs/6.6.7:
resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz}
name: rxjs
version: 6.6.7
engines: {npm: '>=2.0.0'}
dependencies:
tslib: registry.npmjs.org/tslib/1.14.1
dev: true
registry.npmjs.org/safer-buffer/2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz}
name: safer-buffer
version: 2.1.2
dev: true
registry.npmjs.org/signal-exit/3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz}
name: signal-exit
version: 3.0.7
dev: true
registry.npmjs.org/string-width/2.1.1:
resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz}
name: string-width
version: 2.1.1
engines: {node: '>=4'}
dependencies:
is-fullwidth-code-point: registry.npmjs.org/is-fullwidth-code-point/2.0.0
strip-ansi: registry.npmjs.org/strip-ansi/4.0.0
dev: true
registry.npmjs.org/strip-ansi/4.0.0:
resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz}
name: strip-ansi
version: 4.0.0
engines: {node: '>=4'}
dependencies:
ansi-regex: registry.npmjs.org/ansi-regex/3.0.0
dev: true
registry.npmjs.org/strip-ansi/5.2.0:
resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz}
name: strip-ansi
version: 5.2.0
engines: {node: '>=6'}
dependencies:
ansi-regex: registry.npmjs.org/ansi-regex/4.1.1
dev: true
registry.npmjs.org/strip-bom/4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz}
name: strip-bom
version: 4.0.0
engines: {node: '>=8'}
dev: true
registry.npmjs.org/strip-json-comments/3.0.1:
resolution: {integrity: sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz}
name: strip-json-comments
version: 3.0.1
engines: {node: '>=8'}
dev: true
registry.npmjs.org/supports-color/5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz}
name: supports-color
version: 5.5.0
engines: {node: '>=4'}
dependencies:
has-flag: registry.npmjs.org/has-flag/3.0.0
dev: true
registry.npmjs.org/supports-color/7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz}
name: supports-color
version: 7.2.0
engines: {node: '>=8'}
dependencies:
has-flag: registry.npmjs.org/has-flag/4.0.0
dev: true
optional: true
registry.npmjs.org/through/2.3.8:
resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/through/-/through-2.3.8.tgz}
name: through
version: 2.3.8
dev: true
registry.npmjs.org/tmp/0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz}
name: tmp
version: 0.0.33
engines: {node: '>=0.6.0'}
dependencies:
os-tmpdir: registry.npmjs.org/os-tmpdir/1.0.2
dev: true
registry.npmjs.org/to-regex-range/5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz}
name: to-regex-range
version: 5.0.1
engines: {node: '>=8.0'}
dependencies:
is-number: registry.npmjs.org/is-number/7.0.0
dev: true
registry.npmjs.org/ts-node/10.7.0_5338de7ff0b33ef224ee85855d74b9f4:
resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz}
id: registry.npmjs.org/ts-node/10.7.0
name: ts-node
version: 10.7.0
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@cspotcode/source-map-support': registry.npmjs.org/@cspotcode/source-map-support/0.7.0
'@tsconfig/node10': registry.npmjs.org/@tsconfig/node10/1.0.8
'@tsconfig/node12': registry.npmjs.org/@tsconfig/node12/1.0.9
'@tsconfig/node14': registry.npmjs.org/@tsconfig/node14/1.0.1
'@tsconfig/node16': registry.npmjs.org/@tsconfig/node16/1.0.2
'@types/node': registry.npmjs.org/@types/node/17.0.22
acorn: registry.npmjs.org/acorn/8.7.0
acorn-walk: registry.npmjs.org/acorn-walk/8.2.0
arg: registry.npmjs.org/arg/4.1.3
create-require: registry.npmjs.org/create-require/1.1.1
diff: registry.npmjs.org/diff/4.0.2
make-error: registry.npmjs.org/make-error/1.3.6
typescript: registry.npmjs.org/typescript/4.6.2
v8-compile-cache-lib: registry.npmjs.org/v8-compile-cache-lib/3.0.0
yn: registry.npmjs.org/yn/3.1.1
dev: true
optional: true
registry.npmjs.org/tslib/1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz}
name: tslib
version: 1.14.1
dev: true
registry.npmjs.org/typescript/4.6.2:
resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz}
name: typescript
version: 4.6.2
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
optional: true
registry.npmjs.org/universalify/0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz}
name: universalify
version: 0.1.2
engines: {node: '>= 4.0.0'}
dev: true
registry.npmjs.org/uri-js/4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz}
name: uri-js
version: 4.4.1
dependencies:
punycode: registry.npmjs.org/punycode/2.1.1
dev: true
optional: true
registry.npmjs.org/v8-compile-cache-lib/3.0.0:
resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz}
name: v8-compile-cache-lib
version: 3.0.0
dev: true
optional: true
registry.npmjs.org/which/1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/which/-/which-1.3.1.tgz}
name: which
version: 1.3.1
hasBin: true
dependencies:
isexe: registry.npmjs.org/isexe/2.0.0
dev: true
registry.npmjs.org/word-wrap/1.2.3:
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz}
name: word-wrap
version: 1.2.3
engines: {node: '>=0.10.0'}
dev: true
registry.npmjs.org/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz}
name: wrappy
version: 1.0.2
dev: true
registry.npmjs.org/yaml/1.10.2:
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz}
name: yaml
version: 1.10.2
engines: {node: '>= 6'}
dev: true
optional: true
registry.npmjs.org/yn/3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/yn/-/yn-3.1.1.tgz}
name: yn
version: 3.1.1
engines: {node: '>=6'}
dev: true
optional: true
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论