Compare commits
No commits in common. "master" and "core" have entirely different histories.
11
.env.example
11
.env.example
|
@ -1,11 +0,0 @@
|
|||
# TypeORM
|
||||
|
||||
TYPEORM_CONNECTION=mysql
|
||||
TYPEORM_HOST=localhost
|
||||
TYPEORM_PORT=3306
|
||||
TYPEORM_USERNAME=root
|
||||
TYPEORM_PASSWORD=jeremy
|
||||
TYPEORM_DATABASE=nest
|
||||
TYPEORM_SYNCHRONIZE=true
|
||||
TYPEORM_LOGGING=true
|
||||
TYPEORM_ENTITIES=./src/**/*.entity{.ts,.js}
|
|
@ -2,9 +2,6 @@
|
|||
/dist
|
||||
/node_modules
|
||||
|
||||
# env
|
||||
.env
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
title: NinghaoNodeCamp2019
|
||||
date: 2019-06-17
|
||||
draft: false
|
||||
---
|
||||
|
||||
NinghaoNodeCamp2019 的时间安排是 0615-0630,不过由于周末有其它事情没及时开启,今天来追上吧。(暂时此文不发布到博客,先跟着项目更新走)
|
||||
|
||||
相关链接:
|
||||
|
||||
https://gitea.isyin.cn/jeremy/ninghao-nestjs
|
||||
|
||||
https://github.com/jeremyyin2012/ninghao-nestjs
|
||||
|
||||
https://nnc2019.isyin.cn
|
||||
|
||||
## 00 prepare
|
||||
|
||||
### 0001 命令行界面
|
||||
|
||||
我是 macOS 所以就用自带终端 Terminal 就可以了,以及我也有装了 iTerm,以及也在不久前才配置了 oh-my-zsh,可以了。
|
||||
|
||||
Windows 下 cmder 以前没遇到过,毕竟用的少,也因为 cmd 不好用;据说 Windows 以后会有个很厉害的终端,可能还没那么快,那就先用着 cmder 吧。
|
||||
|
||||
### 0002 Git
|
||||
|
||||
git macOS 上有的,不过我又用 brew upgrade 更新到了最新版本,不过其实 git 命令用的其实不多,大部分时间还是会用 GUI 类型的产品,一年前基本是 Source Tree,但是由于它经常性死掉,所以后来就寻找新的替代,经过一些尝试,后来发现了 Fork,体验很好,个人非常喜欢,也在推荐朋友们使用。
|
||||
|
||||
### 0003 代码编辑器
|
||||
|
||||
编辑器我工作中针对长期项目主要是 PyCharm,临时看一下或者是啥,就会用 VS Code,经常性地也会把 VS Code 当作临时文本片段编辑器来用,比如竖向编辑;Sublime 也装着,长期开着做临时文本记录用,直接打开代码文件也会是用它来查看。
|
||||
|
||||
### 0004 HTTP 客户端
|
||||
|
||||
试过 Postman 还有一些其它的以及 Insomnia,后来直接买了 Paw,蛮喜欢的。
|
||||
|
||||
### 0005 数据库客户端
|
||||
|
||||
产品有很多,不过现在都没咋用 GUI 客户端了,能用 Web 的就用 Web 的了,几个客户端都蛮能吃内存的,Sequel Pro 以前用过,很好用,但是 MySQL 升级到 8 它就不支持了,现在不知道更新没;TablePlus 以前没遇到过,不过看介绍挺喜欢的,不过价格也感人,后面试用下看看。配数据库服务我现在都一般会配上一个 Web 管理服务,不在本地搞太多东西了,MySQL:Adminer,Mongo:Mongo Express,Redis:PHPRedisAdmin。
|
||||
|
||||
### 0006 Node.js(v11.13)
|
||||
|
||||
本地我用 brew 升级到了 v12.4.0
|
||||
|
||||
### 0007 Docker 桌面版
|
||||
|
||||
Docker 我已经用了蛮久了,开发和生产都在用,目前主要是用 docker-compose 来操作,应对较小规模场景完全没问题,几乎只需要敲一个命令就完成全部事情。k8s 是非常好,不过手里没那么多配套资源,复杂度也蛮高,暂时还没吃下来。
|
||||
|
||||
日常要用的数据库啊什么的都是跑在 Docker 里面了,反正能上 Docker 就优先上 Docker,简直不要太舒服,就两只手操作那么多服务,照以前那还不得死去活来。
|
||||
|
||||
### 0008 MySQL(v5.7)
|
||||
|
||||
目前我是会优先考虑 8 版本的,不过好在有 Docker,你想什么版本就什么版本,多服务多版本共存也完全不是问题。
|
|
@ -1,2 +0,0 @@
|
|||
version: '3'
|
||||
# msyql 以及 web 管理界面直接用已经通过 docker-compose 创建的 8 版本的,就先不写了
|
14
package.json
14
package.json
|
@ -22,22 +22,12 @@
|
|||
"dependencies": {
|
||||
"@nestjs/common": "^6.0.0",
|
||||
"@nestjs/core": "^6.0.0",
|
||||
"@nestjs/jwt": "^6.1.1",
|
||||
"@nestjs/passport": "^6.1.0",
|
||||
"@nestjs/platform-express": "^6.0.0",
|
||||
"@nestjs/typeorm": "^6.1.2",
|
||||
"@types/bcrypt": "^3.0.0",
|
||||
"@types/passport": "^1.0.0",
|
||||
"@types/passport-jwt": "^3.0.1",
|
||||
"bcrypt": "^3.0.6",
|
||||
"class-transformer": "^0.2.3",
|
||||
"mysql": "^2.17.1",
|
||||
"passport": "^0.4.0",
|
||||
"passport-jwt": "^4.0.0",
|
||||
"class-validator": "^0.9.1",
|
||||
"reflect-metadata": "^0.1.12",
|
||||
"rimraf": "^2.6.2",
|
||||
"rxjs": "^6.3.3",
|
||||
"typeorm": "^0.2.18"
|
||||
"rxjs": "^6.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/testing": "^6.0.0",
|
||||
|
|
|
@ -1,29 +1,32 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { Module, NestModule, MiddlewareConsumer} from '@nestjs/common';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { PostModule } from './modules/post/post.module';
|
||||
import { UserModule } from './modules/user/user.module';
|
||||
import { AuthModule } from './modules/auth/auth.module';
|
||||
import { PostsModule } from './modules/posts/posts.module';
|
||||
import { DemoMiddleware } from './core/middleware/demo.middleware'
|
||||
import { APP_GUARD } from '@nestjs/core';
|
||||
import { DemoRolesGuard } from './core/guards/demo-roles.guard'
|
||||
import { APP_INTERCEPTOR } from '@nestjs/core';
|
||||
import { LoggingInterceptor } from './core/interceptors/logging.interceptor'
|
||||
|
||||
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forRoot({
|
||||
type: 'mysql',
|
||||
host: 'localhost',
|
||||
port: 3306,
|
||||
username: 'root',
|
||||
password: 'jeremy',
|
||||
database: 'nest',
|
||||
synchronize: true,
|
||||
logging: true,
|
||||
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
||||
}),
|
||||
PostModule,
|
||||
UserModule,
|
||||
AuthModule,
|
||||
],
|
||||
imports: [PostsModule],
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
providers: [
|
||||
AppService,
|
||||
{
|
||||
provide: APP_GUARD,
|
||||
useClass: DemoRolesGuard,
|
||||
},
|
||||
{
|
||||
provide: APP_INTERCEPTOR,
|
||||
useClass: LoggingInterceptor,
|
||||
}
|
||||
],
|
||||
})
|
||||
export class AppModule {}
|
||||
export class AppModule implements NestModule {
|
||||
configure(consumer: MiddlewareConsumer) {
|
||||
consumer.apply(DemoMiddleware).forRoutes('posts')
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
import { ReflectMetadata, SetMetadata } from '@nestjs/common';
|
||||
|
||||
export const Roles = (...args: string[]) => SetMetadata('roles', args);
|
|
@ -1,3 +1,7 @@
|
|||
import { createParamDecorator } from "@nestjs/common";
|
||||
import { createParamDecorator } from '@nestjs/common'
|
||||
|
||||
export const User = createParamDecorator((data, req) => req.user)
|
||||
export const User = createParamDecorator((data, req) => {
|
||||
console.log('data:', data)
|
||||
|
||||
return req.user[data]
|
||||
})
|
|
@ -0,0 +1,7 @@
|
|||
import { DemoFilter } from './demo.filter';
|
||||
|
||||
describe('DemoFilter', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new DemoFilter()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,16 @@
|
|||
import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common';
|
||||
|
||||
@Catch(HttpException)
|
||||
export class DemoFilter<T> implements ExceptionFilter {
|
||||
catch(exception: HttpException, host: ArgumentsHost) {
|
||||
const ctx = host.switchToHttp();
|
||||
const response = ctx.getResponse();
|
||||
const request = ctx.getRequest();
|
||||
const status = exception.getStatus();
|
||||
|
||||
response.status(status).json({
|
||||
statusCode: status,
|
||||
path: request.url,
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { DemoAuthGuard } from './demo-auth.guard';
|
||||
|
||||
describe('DemoAuthGuard', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new DemoAuthGuard()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,13 @@
|
|||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
@Injectable()
|
||||
export class DemoAuthGuard implements CanActivate {
|
||||
canActivate(
|
||||
context: ExecutionContext,
|
||||
): boolean | Promise<boolean> | Observable<boolean> {
|
||||
const request = context.switchToHttp().getRequest();
|
||||
|
||||
return request.header('x-demo') === 'secret';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { DemoRolesGuard } from './demo-roles.guard';
|
||||
|
||||
describe('DemoRolesGuard', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new DemoRolesGuard()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,28 @@
|
|||
import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Reflector } from '@nestjs/core';
|
||||
|
||||
@Injectable()
|
||||
export class DemoRolesGuard implements CanActivate {
|
||||
constructor(private readonly reflector: Reflector) {}
|
||||
|
||||
canActivate(
|
||||
context: ExecutionContext,
|
||||
): boolean | Promise<boolean> | Observable<boolean> {
|
||||
console.log('handler:', context.getHandler());
|
||||
console.log('class:', context.getClass());
|
||||
|
||||
const roles = this.reflector.get<string[]>('roles', context.getHandler())
|
||||
console.log(roles)
|
||||
|
||||
if (!roles) {
|
||||
return true
|
||||
}
|
||||
|
||||
const request = context.switchToHttp().getRequest();
|
||||
const { user } = request;
|
||||
const hasRole = () => user.roles.some(item => roles.includes(item))
|
||||
|
||||
return user && user.roles && hasRole();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { ErrorsInterceptor } from './errors.interceptor';
|
||||
|
||||
describe('ErrorsInterceptor', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new ErrorsInterceptor()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,14 @@
|
|||
import { CallHandler, ExecutionContext, Injectable, NestInterceptor, BadGatewayException } from '@nestjs/common';
|
||||
import { Observable, throwError } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators'
|
||||
|
||||
@Injectable()
|
||||
export class ErrorsInterceptor implements NestInterceptor {
|
||||
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
||||
return next
|
||||
.handle()
|
||||
.pipe(
|
||||
catchError(error => throwError(new BadGatewayException()))
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { LoggingInterceptor } from './logging.interceptor';
|
||||
|
||||
describe('LoggingInterceptor', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new LoggingInterceptor()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,21 @@
|
|||
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
|
||||
import { Observable } from 'rxjs';
|
||||
import { tap } from 'rxjs/operators'
|
||||
|
||||
@Injectable()
|
||||
export class LoggingInterceptor implements NestInterceptor {
|
||||
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
|
||||
console.log('I am a interceptor!')
|
||||
|
||||
const now = Date.now();
|
||||
console.log('before...');
|
||||
|
||||
|
||||
|
||||
return next
|
||||
.handle()
|
||||
.pipe(
|
||||
tap(() => console.log(`after... ${Date.now() - now}ms`))
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { TransformInterceptor } from './transform.interceptor';
|
||||
|
||||
describe('TransformInterceptor', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new TransformInterceptor()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,18 @@
|
|||
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
export interface Response<T>{
|
||||
data: T;
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> {
|
||||
intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {
|
||||
return next
|
||||
.handle()
|
||||
.pipe(
|
||||
map(item => ({data: item})) // 这个map和js那个map貌似还是有点不一样,那边返回的是一个数组呀?
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { DemoMiddleware } from './demo.middleware';
|
||||
|
||||
describe('DemoMiddleware', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new DemoMiddleware()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,24 @@
|
|||
import { Injectable, NestMiddleware } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class DemoMiddleware implements NestMiddleware {
|
||||
use(req: any, res: any, next: () => void) {
|
||||
console.log('hello ~')
|
||||
req.user = {
|
||||
roles: [
|
||||
'guest'
|
||||
]
|
||||
}
|
||||
|
||||
if (req.header('x-demo') === 'secret') {
|
||||
req.user = {
|
||||
roles: [
|
||||
'member'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
next();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { DemoPipe } from './demo.pipe';
|
||||
|
||||
describe('DemoPipe', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new DemoPipe()).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,8 @@
|
|||
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class DemoPipe implements PipeTransform {
|
||||
transform(value: any, metadata: ArgumentMetadata) {
|
||||
return value;
|
||||
}
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
import { NestFactory } from '@nestjs/core';
|
||||
import { AppModule } from './app.module';
|
||||
import { DemoFilter } from './core/filters/demo.filter'
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule);
|
||||
// app.useGlobalFilters(new DemoFilter());
|
||||
await app.listen(3000);
|
||||
}
|
||||
bootstrap();
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { AuthController } from './auth.controller';
|
||||
|
||||
describe('Auth Controller', () => {
|
||||
let controller: AuthController;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
controllers: [AuthController],
|
||||
}).compile();
|
||||
|
||||
controller = module.get<AuthController>(AuthController);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(controller).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -1,27 +0,0 @@
|
|||
import { Controller, Post, Body, Get, UseGuards } from '@nestjs/common';
|
||||
import { AuthService } from './auth.service';
|
||||
import { LoginDto } from './login.dto';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { User } from '../../core/decorators/user.decorator';
|
||||
|
||||
@Controller('auth')
|
||||
export class AuthController {
|
||||
constructor(
|
||||
private readonly authService: AuthService,
|
||||
) { }
|
||||
|
||||
@Post('login')
|
||||
async login(@Body() data: LoginDto) {
|
||||
return await this.authService.login(data)
|
||||
}
|
||||
|
||||
@Get('test')
|
||||
@UseGuards(AuthGuard())
|
||||
async authTest(@User() user) {
|
||||
console.log('user: ', user)
|
||||
return {
|
||||
message: 'ok',
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
export interface JwtPayload {
|
||||
id: number;
|
||||
username: string
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { AuthController } from './auth.controller';
|
||||
import { AuthService } from './auth.service';
|
||||
import { UserModule } from '../user/user.module';
|
||||
import { JwtModule } from '@nestjs/jwt';
|
||||
import { PassportModule } from '@nestjs/passport';
|
||||
import { JwtStrategy } from './strategies/jwt.strategy';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
UserModule,
|
||||
JwtModule.register({
|
||||
secret: 'nDSAR3+K4pLD+HIl9xWFY/n7maMxLwPTj5gscZvd9Vo=',
|
||||
signOptions: {
|
||||
expiresIn: '12h',
|
||||
}
|
||||
}),
|
||||
PassportModule.register({
|
||||
defaultStrategy: 'jwt',
|
||||
}),
|
||||
],
|
||||
controllers: [AuthController],
|
||||
providers: [AuthService, JwtStrategy]
|
||||
})
|
||||
export class AuthModule {}
|
|
@ -1,18 +0,0 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { AuthService } from './auth.service';
|
||||
|
||||
describe('AuthService', () => {
|
||||
let service: AuthService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [AuthService],
|
||||
}).compile();
|
||||
|
||||
service = module.get<AuthService>(AuthService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -1,42 +0,0 @@
|
|||
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||
import { UserService } from '../user/user.service';
|
||||
import { LoginDto } from './login.dto';
|
||||
import { JwtPayload } from './auth.interface';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
|
||||
@Injectable()
|
||||
export class AuthService {
|
||||
constructor(
|
||||
private readonly userService: UserService,
|
||||
private readonly jwtService: JwtService,
|
||||
) {}
|
||||
|
||||
async login(data: LoginDto) {
|
||||
const { username, password } = data
|
||||
const entity = await this.userService.findByUserName(username)
|
||||
console.log(entity)
|
||||
|
||||
if (!entity) {
|
||||
throw new UnauthorizedException('用户不存在')
|
||||
}
|
||||
const match = await entity.comparePassword(password)
|
||||
console.log(match)
|
||||
|
||||
if (!match) {
|
||||
throw new UnauthorizedException('密码错误')
|
||||
}
|
||||
|
||||
const { id } = entity
|
||||
const payload = {username, id}
|
||||
const token = this.signToken(payload)
|
||||
|
||||
return {
|
||||
...payload,
|
||||
token
|
||||
}
|
||||
}
|
||||
|
||||
signToken(data: JwtPayload) {
|
||||
return this.jwtService.sign(data)
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
export class LoginDto {
|
||||
readonly username: string;
|
||||
readonly password: string;
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
import { Injectable, UnauthorizedException } from "@nestjs/common";
|
||||
import { PassportStrategy } from "@nestjs/passport";
|
||||
import { Strategy, ExtractJwt } from "passport-jwt";
|
||||
import { JwtPayload } from "../auth.interface";
|
||||
import { UserService } from "../../user/user.service";
|
||||
|
||||
@Injectable()
|
||||
export class JwtStrategy extends PassportStrategy(Strategy) {
|
||||
constructor(
|
||||
private readonly userService: UserService
|
||||
) {
|
||||
super({
|
||||
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
||||
secretOrKey: 'nDSAR3+K4pLD+HIl9xWFY/n7maMxLwPTj5gscZvd9Vo=',
|
||||
})
|
||||
}
|
||||
|
||||
async validate(payload: JwtPayload) {
|
||||
console.log(payload)
|
||||
const { username } = payload
|
||||
const entity = await this.userService.findByUserName(username)
|
||||
if (!entity) {
|
||||
throw new UnauthorizedException('用户不存在')
|
||||
}
|
||||
return entity
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
import { Controller, Post, Body, Get, Param, Put, Delete } from '@nestjs/common';
|
||||
import { PostService } from './post.service';
|
||||
import { PostDto } from './post.dto';
|
||||
|
||||
@Controller('posts')
|
||||
export class PostController {
|
||||
constructor(
|
||||
private readonly postService: PostService,
|
||||
) { }
|
||||
|
||||
@Post()
|
||||
async store(@Body() data: PostDto) {
|
||||
return await this.postService.store(data);
|
||||
}
|
||||
|
||||
@Get()
|
||||
async index() {
|
||||
return await this.postService.index();
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
async show(@Param() id: string) {
|
||||
return await this.postService.show(id);
|
||||
}
|
||||
|
||||
@Put(':id')
|
||||
async update(@Param() id: string, @Body() data: Partial<PostDto>) {
|
||||
return await this.postService.update(id, data);
|
||||
}
|
||||
|
||||
@Delete(':id')
|
||||
async destroy(@Param() id: string) {
|
||||
return await this.postService.destroy(id);
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
export class PostDto {
|
||||
readonly title: string;
|
||||
readonly body: string;
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn} from 'typeorm';
|
||||
|
||||
@Entity()
|
||||
export class Post {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column()
|
||||
title: string;
|
||||
|
||||
@Column('longtext', {nullable: true})
|
||||
body: string;
|
||||
|
||||
@CreateDateColumn()
|
||||
created: Date;
|
||||
|
||||
@UpdateDateColumn()
|
||||
updated: Date;
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { PostController } from './post.controller';
|
||||
import { PostService } from './post.service';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Post } from './post.entity';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([Post]),
|
||||
],
|
||||
controllers: [PostController],
|
||||
providers: [PostService],
|
||||
})
|
||||
export class PostModule {}
|
|
@ -1,18 +0,0 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PostService } from './post.service';
|
||||
|
||||
describe('PostService', () => {
|
||||
let service: PostService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [PostService],
|
||||
}).compile();
|
||||
|
||||
service = module.get<PostService>(PostService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -1,38 +0,0 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Post } from './post.entity';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { PostDto } from './post.dto';
|
||||
|
||||
@Injectable()
|
||||
export class PostService {
|
||||
constructor(
|
||||
@InjectRepository(Post)
|
||||
private readonly postRepository: Repository<Post>,
|
||||
) { }
|
||||
|
||||
async store(data: PostDto) {
|
||||
const entity = await this.postRepository.create(data);
|
||||
return await this.postRepository.save(entity);
|
||||
}
|
||||
|
||||
async index() {
|
||||
const entities = await this.postRepository.find();
|
||||
return entities;
|
||||
}
|
||||
|
||||
async show(id: string) {
|
||||
const entity = await this.postRepository.findOne(id);
|
||||
return entity;
|
||||
}
|
||||
|
||||
async update(id: string, data: Partial<PostDto>) {
|
||||
const result = await this.postRepository.update(id, data);
|
||||
return result;
|
||||
}
|
||||
|
||||
async destroy(id: string) {
|
||||
const result = await this.postRepository.delete(id);
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
export interface Post {
|
||||
title: string
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
import { IsString } from 'class-validator'
|
||||
|
||||
export class CreatePostDto {
|
||||
@IsString()
|
||||
readonly title: string
|
||||
}
|
|
@ -1,15 +1,15 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { PostController } from './post.controller';
|
||||
import { PostsController } from './posts.controller';
|
||||
|
||||
describe('Post Controller', () => {
|
||||
let controller: PostController;
|
||||
describe('Posts Controller', () => {
|
||||
let controller: PostsController;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
controllers: [PostController],
|
||||
controllers: [PostsController],
|
||||
}).compile();
|
||||
|
||||
controller = module.get<PostController>(PostController);
|
||||
controller = module.get<PostsController>(PostsController);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
|
@ -0,0 +1,51 @@
|
|||
import { Controller, Get, Post, Req, Query, Headers, Param, Body, HttpException, HttpStatus, ForbiddenException, UseFilters, UsePipes, ValidationPipe, ParseIntPipe, UseGuards, SetMetadata, UseInterceptors } from '@nestjs/common';
|
||||
import { CreatePostDto } from './post.dto';
|
||||
import { DemoService } from './providers/demo/demo.service'
|
||||
import { DemoFilter } from '../../core/filters/demo.filter'
|
||||
import { DemoAuthGuard } from '../../core/guards/demo-auth.guard'
|
||||
import { Roles } from '../../core/decorators/roles.decorator'
|
||||
import { User } from '../../core/decorators/user.decorator'
|
||||
import { LoggingInterceptor } from '../../core/interceptors/logging.interceptor'
|
||||
import { TransformInterceptor } from '../../core/interceptors/transform.interceptor'
|
||||
import { ErrorsInterceptor } from '../../core/interceptors/errors.interceptor'
|
||||
|
||||
@Controller('posts')
|
||||
// @UseGuards(DemoAuthGuard)
|
||||
// @UseFilters(DemoFilter)
|
||||
// @ UseInterceptors(LoggingInterceptor)
|
||||
export class PostsController {
|
||||
|
||||
constructor(private readonly demoService: DemoService) {}
|
||||
|
||||
@Get()
|
||||
@UseInterceptors(TransformInterceptor)
|
||||
@UseInterceptors(ErrorsInterceptor)
|
||||
index() {
|
||||
throw new ForbiddenException();
|
||||
// return this.demoService.findAll();
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
show(@Param('id', ParseIntPipe) id) {
|
||||
console.log('typeof id:', typeof id);
|
||||
|
||||
return {
|
||||
title: `Post ${id}`
|
||||
}
|
||||
}
|
||||
|
||||
@Post()
|
||||
// @UseFilters(DemoFilter)
|
||||
@UsePipes(ValidationPipe)
|
||||
// @SetMetadata('roles', ['member', 89])
|
||||
// @Roles('member', 'tester')
|
||||
@Roles(...['member', 'tester'])
|
||||
store(@Body() post: CreatePostDto, @User('roles') roles) {
|
||||
console.log('roles:', roles)
|
||||
|
||||
|
||||
// throw new HttpException('没有权限!', HttpStatus.FORBIDDEN)
|
||||
// throw new ForbiddenException('没有权限!')
|
||||
this.demoService.create(post);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { PostsController } from './posts.controller';
|
||||
import { DemoService } from "./providers/demo/demo.service";
|
||||
|
||||
@Module({
|
||||
controllers: [PostsController],
|
||||
providers: [DemoService]
|
||||
})
|
||||
export class PostsModule {}
|
|
@ -1,15 +1,15 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { UserService } from './user.service';
|
||||
import { DemoService } from './demo.service';
|
||||
|
||||
describe('UserService', () => {
|
||||
let service: UserService;
|
||||
describe('DemoService', () => {
|
||||
let service: DemoService;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [UserService],
|
||||
providers: [DemoService],
|
||||
}).compile();
|
||||
|
||||
service = module.get<UserService>(UserService);
|
||||
service = module.get<DemoService>(DemoService);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
|
@ -0,0 +1,15 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { Post } from 'src/modules/posts/interfaces/post.interface';
|
||||
|
||||
@Injectable()
|
||||
export class DemoService {
|
||||
private readonly posts: Post[] = [];
|
||||
|
||||
findAll(): Post[] {
|
||||
return this.posts;
|
||||
}
|
||||
|
||||
create(post: Post) {
|
||||
this.posts.push(post);
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { UserController } from './user.controller';
|
||||
|
||||
describe('User Controller', () => {
|
||||
let controller: UserController;
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
controllers: [UserController],
|
||||
}).compile();
|
||||
|
||||
controller = module.get<UserController>(UserController);
|
||||
});
|
||||
|
||||
it('should be defined', () => {
|
||||
expect(controller).toBeDefined();
|
||||
});
|
||||
});
|
|
@ -1,27 +0,0 @@
|
|||
import { Controller, Post, Body, Get, Param, UseInterceptors, ClassSerializerInterceptor, Put } from '@nestjs/common';
|
||||
import { UserService } from './user.service';
|
||||
import { UserDto, UpdatePasswordDto } from './user.dto';
|
||||
|
||||
@Controller('users')
|
||||
export class UserController {
|
||||
constructor(
|
||||
private readonly userService: UserService,
|
||||
) {}
|
||||
|
||||
@Post()
|
||||
async store(@Body() data: UserDto) {
|
||||
return await this.userService.store(data);
|
||||
}
|
||||
|
||||
@Get(':id')
|
||||
@UseInterceptors(ClassSerializerInterceptor)
|
||||
async show(@Param('id') id: string) {
|
||||
return await this.userService.show(id);
|
||||
}
|
||||
|
||||
@Put(':id/password')
|
||||
@UseInterceptors(ClassSerializerInterceptor)
|
||||
async updatePassword(@Param('id') id: string, @Body() data: UpdatePasswordDto) {
|
||||
return await this.userService.updatePassword(id, data)
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
export class UserDto {
|
||||
readonly username: string;
|
||||
readonly password: string;
|
||||
}
|
||||
|
||||
export class UpdatePasswordDto {
|
||||
readonly password: string;
|
||||
readonly newPassword: string;
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, BeforeInsert, BeforeUpdate } from 'typeorm';
|
||||
import * as bcrypt from 'bcrypt';
|
||||
import { Exclude } from 'class-transformer';
|
||||
|
||||
@Entity()
|
||||
export class User {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column('varchar', { unique: true })
|
||||
username: string;
|
||||
|
||||
@Column('longtext', { nullable: true })
|
||||
@Exclude()
|
||||
password: string;
|
||||
|
||||
@CreateDateColumn()
|
||||
created: Date;
|
||||
|
||||
@UpdateDateColumn()
|
||||
updated: Date;
|
||||
|
||||
@BeforeInsert()
|
||||
@BeforeUpdate()
|
||||
async hashPassword() {
|
||||
this.password = await bcrypt.hash(this.password, 10);
|
||||
}
|
||||
|
||||
async comparePassword(password: string) {
|
||||
console.log(password, this.password)
|
||||
return await bcrypt.compare(password, this.password);
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
import { Module } from '@nestjs/common';
|
||||
import { UserController } from './user.controller';
|
||||
import { UserService } from './user.service';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { User } from './user.entity';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([User]),
|
||||
],
|
||||
controllers: [UserController],
|
||||
providers: [UserService],
|
||||
exports: [UserService]
|
||||
})
|
||||
export class UserModule {}
|
|
@ -1,50 +0,0 @@
|
|||
import { Injectable, BadRequestException, NotFoundException } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { User } from './user.entity';
|
||||
import { UserDto, UpdatePasswordDto } from './user.dto';
|
||||
|
||||
@Injectable()
|
||||
export class UserService {
|
||||
constructor(
|
||||
@InjectRepository(User)
|
||||
private readonly userRepository: Repository<User>,
|
||||
) { }
|
||||
|
||||
async store(data: UserDto) {
|
||||
const { username } = data;
|
||||
const user = await this.userRepository.findOne({ username });
|
||||
if (user) {
|
||||
throw new BadRequestException('用户已经存在');
|
||||
}
|
||||
const entity = await this.userRepository.create(data);
|
||||
await this.userRepository.save(entity);
|
||||
return entity;
|
||||
}
|
||||
|
||||
async show(id: string) {
|
||||
const entity = await this.userRepository.findOne(id);
|
||||
if (!entity) {
|
||||
throw new NotFoundException('没有找到用户');
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
|
||||
async updatePassword(id: string, data: UpdatePasswordDto) {
|
||||
const { password, newPassword } = data;
|
||||
const entity = await this.userRepository.findOne(id)
|
||||
if (!entity) {
|
||||
throw new NotFoundException('没有找到用户')
|
||||
}
|
||||
const match = await entity.comparePassword(password)
|
||||
if (!match) {
|
||||
throw new BadRequestException('密码错误')
|
||||
}
|
||||
entity.password = newPassword
|
||||
return await this.userRepository.save(entity)
|
||||
}
|
||||
|
||||
async findByUserName(username: string) {
|
||||
return await this.userRepository.findOne({ username })
|
||||
}
|
||||
}
|
529
yarn.lock
529
yarn.lock
|
@ -39,19 +39,6 @@
|
|||
optional "0.1.4"
|
||||
uuid "3.3.2"
|
||||
|
||||
"@nestjs/jwt@^6.1.1":
|
||||
version "6.1.1"
|
||||
resolved "https://registry.npm.taobao.org/@nestjs/jwt/download/@nestjs/jwt-6.1.1.tgz#78883321fc8663a7cf32aa725a70adc8454bbf5d"
|
||||
integrity sha1-eIgzIfyGY6fPMqpyWnCtyEVLv10=
|
||||
dependencies:
|
||||
"@types/jsonwebtoken" "7.2.8"
|
||||
jsonwebtoken "8.4.0"
|
||||
|
||||
"@nestjs/passport@^6.1.0":
|
||||
version "6.1.0"
|
||||
resolved "https://registry.npm.taobao.org/@nestjs/passport/download/@nestjs/passport-6.1.0.tgz#80da326cc976a82530648d8025b04c8e2d41c10e"
|
||||
integrity sha1-gNoybMl2qCUwZI2AJbBMji1BwQ4=
|
||||
|
||||
"@nestjs/platform-express@^6.0.0":
|
||||
version "6.3.1"
|
||||
resolved "https://registry.npm.taobao.org/@nestjs/platform-express/download/@nestjs/platform-express-6.3.1.tgz#8adb602a5bb9571b9d58646bd52141a26ea8ba3e"
|
||||
|
@ -69,13 +56,6 @@
|
|||
dependencies:
|
||||
optional "0.1.4"
|
||||
|
||||
"@nestjs/typeorm@^6.1.2":
|
||||
version "6.1.2"
|
||||
resolved "https://registry.npm.taobao.org/@nestjs/typeorm/download/@nestjs/typeorm-6.1.2.tgz#a52b694c6ba976ceef101c72d1b731206a079709"
|
||||
integrity sha1-pStpTGupds7vEBxy0bcxIGoHlwk=
|
||||
dependencies:
|
||||
uuid "3.3.2"
|
||||
|
||||
"@nuxtjs/opencollective@0.2.2":
|
||||
version "0.2.2"
|
||||
resolved "https://registry.npm.taobao.org/@nuxtjs/opencollective/download/@nuxtjs/opencollective-0.2.2.tgz#26a761ebf588cc92a422d7cee996a66bd6e2761e"
|
||||
|
@ -85,11 +65,6 @@
|
|||
consola "^2.3.0"
|
||||
node-fetch "^2.3.0"
|
||||
|
||||
"@types/bcrypt@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/@types/bcrypt/download/@types/bcrypt-3.0.0.tgz#851489a9065a067cb7f3c9cbe4ce9bed8bba0876"
|
||||
integrity sha1-hRSJqQZaBny388nL5M6b7Yu6CHY=
|
||||
|
||||
"@types/body-parser@*":
|
||||
version "1.17.0"
|
||||
resolved "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.17.0.tgz#9f5c9d9bd04bb54be32d5eb9fc0d8c974e6cf58c"
|
||||
|
@ -118,7 +93,7 @@
|
|||
"@types/node" "*"
|
||||
"@types/range-parser" "*"
|
||||
|
||||
"@types/express@*", "@types/express@^4.16.0":
|
||||
"@types/express@^4.16.0":
|
||||
version "4.17.0"
|
||||
resolved "https://registry.npm.taobao.org/@types/express/download/@types/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287"
|
||||
integrity sha1-SertsglYKobxLtm3JRYPEtBO8oc=
|
||||
|
@ -137,20 +112,6 @@
|
|||
resolved "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
|
||||
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
|
||||
|
||||
"@types/jsonwebtoken@*":
|
||||
version "8.3.2"
|
||||
resolved "https://registry.npm.taobao.org/@types/jsonwebtoken/download/@types/jsonwebtoken-8.3.2.tgz#e3d5245197152346fae7ee87d5541aa5a92d0362"
|
||||
integrity sha1-49UkUZcVI0b65+6H1VQapaktA2I=
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/jsonwebtoken@7.2.8":
|
||||
version "7.2.8"
|
||||
resolved "https://registry.npm.taobao.org/@types/jsonwebtoken/download/@types/jsonwebtoken-7.2.8.tgz#8d199dab4ddb5bba3234f8311b804d2027af2b3a"
|
||||
integrity sha1-jRmdq03bW7oyNPgxG4BNICevKzo=
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/mime@*":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
|
||||
|
@ -166,30 +127,6 @@
|
|||
resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-10.14.9.tgz#2e8d678039d27943ce53a1913386133227fd9066"
|
||||
integrity sha1-Lo1ngDnSeUPOU6GRM4YTMif9kGY=
|
||||
|
||||
"@types/passport-jwt@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npm.taobao.org/@types/passport-jwt/download/@types/passport-jwt-3.0.1.tgz#bc4c2610815565de977ea1a580c047d71c646084"
|
||||
integrity sha1-vEwmEIFVZd6XfqGlgMBH1xxkYIQ=
|
||||
dependencies:
|
||||
"@types/express" "*"
|
||||
"@types/jsonwebtoken" "*"
|
||||
"@types/passport-strategy" "*"
|
||||
|
||||
"@types/passport-strategy@*":
|
||||
version "0.2.35"
|
||||
resolved "https://registry.npm.taobao.org/@types/passport-strategy/download/@types/passport-strategy-0.2.35.tgz#e52f5212279ea73f02d9b06af67efe9cefce2d0c"
|
||||
integrity sha1-5S9SEieepz8C2bBq9n7+nO/OLQw=
|
||||
dependencies:
|
||||
"@types/express" "*"
|
||||
"@types/passport" "*"
|
||||
|
||||
"@types/passport@*", "@types/passport@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/@types/passport/download/@types/passport-1.0.0.tgz#747fa127a747a145ff279f3df3e07c425e5ff297"
|
||||
integrity sha1-dH+hJ6dHoUX/J5898+B8Ql5f8pc=
|
||||
dependencies:
|
||||
"@types/express" "*"
|
||||
|
||||
"@types/range-parser@*":
|
||||
version "1.2.3"
|
||||
resolved "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
|
||||
|
@ -291,11 +228,6 @@ ansi-regex@^3.0.0:
|
|||
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||
|
||||
ansi-regex@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
|
||||
integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
|
@ -308,11 +240,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
|||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
|
||||
|
||||
anymatch@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
|
||||
|
@ -321,11 +248,6 @@ anymatch@^2.0.0:
|
|||
micromatch "^3.1.4"
|
||||
normalize-path "^2.1.1"
|
||||
|
||||
app-root-path@^2.0.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.npm.taobao.org/app-root-path/download/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a"
|
||||
integrity sha1-0N9KaC7kCCc1g9Q/b3npiSYkvJo=
|
||||
|
||||
append-field@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/append-field/download/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56"
|
||||
|
@ -643,11 +565,6 @@ balanced-match@^1.0.0:
|
|||
resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
base64-js@^1.0.2:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
|
||||
integrity sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=
|
||||
|
||||
base@^0.11.1:
|
||||
version "0.11.2"
|
||||
resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||
|
@ -668,19 +585,6 @@ bcrypt-pbkdf@^1.0.0:
|
|||
dependencies:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
bcrypt@^3.0.6:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.npm.taobao.org/bcrypt/download/bcrypt-3.0.6.tgz#f607846df62d27e60d5e795612c4f67d70206eb2"
|
||||
integrity sha1-9geEbfYtJ+YNXnlWEsT2fXAgbrI=
|
||||
dependencies:
|
||||
nan "2.13.2"
|
||||
node-pre-gyp "0.12.0"
|
||||
|
||||
bignumber.js@7.2.1:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.npm.taobao.org/bignumber.js/download/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
|
||||
integrity sha1-gMBIdZ2CaACAfEv9Uh5Q7bulel8=
|
||||
|
||||
binary-extensions@^1.0.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
|
||||
|
@ -774,24 +678,11 @@ bser@^2.0.0:
|
|||
dependencies:
|
||||
node-int64 "^0.4.0"
|
||||
|
||||
buffer-equal-constant-time@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||
|
||||
buffer-from@1.x, buffer-from@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=
|
||||
|
||||
buffer@^5.1.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.npm.taobao.org/buffer/download/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
|
||||
integrity sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=
|
||||
dependencies:
|
||||
base64-js "^1.0.2"
|
||||
ieee754 "^1.1.4"
|
||||
|
||||
builtin-modules@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||
|
@ -857,7 +748,7 @@ caseless@~0.12.0:
|
|||
resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
chalk@^1.1.1, chalk@^1.1.3:
|
||||
chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
|
||||
|
@ -868,7 +759,7 @@ chalk@^1.1.1, chalk@^1.1.3:
|
|||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
|
||||
|
@ -921,6 +812,14 @@ class-utils@^0.3.5:
|
|||
isobject "^3.0.0"
|
||||
static-extend "^0.1.1"
|
||||
|
||||
class-validator@^0.9.1:
|
||||
version "0.9.1"
|
||||
resolved "https://registry.npm.taobao.org/class-validator/download/class-validator-0.9.1.tgz#d60e58c5d14abca0a41bce38cf792ad4c46d1531"
|
||||
integrity sha1-1g5YxdFKvKCkG844z3kq1MRtFTE=
|
||||
dependencies:
|
||||
google-libphonenumber "^3.1.6"
|
||||
validator "10.4.0"
|
||||
|
||||
cli-boxes@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/cli-boxes/download/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
||||
|
@ -938,17 +837,6 @@ cli-color@1.4.0:
|
|||
memoizee "^0.4.14"
|
||||
timers-ext "^0.1.5"
|
||||
|
||||
cli-highlight@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.1.tgz#2180223d51618b112f4509cf96e4a6c750b07e97"
|
||||
integrity sha1-IYAiPVFhixEvRQnPluSmx1Cwfpc=
|
||||
dependencies:
|
||||
chalk "^2.3.0"
|
||||
highlight.js "^9.6.0"
|
||||
mz "^2.4.0"
|
||||
parse5 "^4.0.0"
|
||||
yargs "^13.0.0"
|
||||
|
||||
cliui@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||
|
@ -958,15 +846,6 @@ cliui@^4.0.0:
|
|||
strip-ansi "^4.0.0"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
|
||||
integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=
|
||||
dependencies:
|
||||
string-width "^3.1.0"
|
||||
strip-ansi "^5.2.0"
|
||||
wrap-ansi "^5.1.0"
|
||||
|
||||
co@^4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
|
||||
|
@ -1057,9 +936,9 @@ configstore@^3.0.0:
|
|||
xdg-basedir "^3.0.0"
|
||||
|
||||
consola@^2.3.0:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.npm.taobao.org/consola/download/consola-2.9.0.tgz?cache=0&sync_timestamp=1560867735070&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsola%2Fdownload%2Fconsola-2.9.0.tgz#57760e3a65a53ec27337f4add31505802d902278"
|
||||
integrity sha1-V3YOOmWlPsJzN/St0xUFgC2QIng=
|
||||
version "2.7.1"
|
||||
resolved "https://registry.npm.taobao.org/consola/download/consola-2.7.1.tgz#3f7f7c53eb44362240c3aee41b9bb2641d5ca32e"
|
||||
integrity sha1-P398U+tENiJAw67kG5uyZB1coy4=
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
|
@ -1193,7 +1072,7 @@ data-urls@^1.0.0:
|
|||
|
||||
date-fns@^1.23.0:
|
||||
version "1.30.1"
|
||||
resolved "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
||||
resolved "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
||||
integrity sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=
|
||||
|
||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
|
||||
|
@ -1217,13 +1096,6 @@ debug@^3.1.0, debug@^3.2.6:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
integrity sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
decamelize@^1.1.1, decamelize@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
@ -1349,11 +1221,6 @@ dot-prop@^4.1.0:
|
|||
dependencies:
|
||||
is-obj "^1.0.0"
|
||||
|
||||
dotenv@^6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.npm.taobao.org/dotenv/download/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
|
||||
integrity sha1-lBwEEFNdlCyL7PKNPzV9vZ1HYGQ=
|
||||
|
||||
duplexer3@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
|
||||
|
@ -1367,23 +1234,11 @@ ecc-jsbn@~0.1.1:
|
|||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.npm.taobao.org/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
integrity sha1-rg8PothQRe8UqBfao86azQSJ5b8=
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=
|
||||
|
||||
encodeurl@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
|
@ -1524,7 +1379,7 @@ exec-sh@^0.2.0:
|
|||
|
||||
execa@^0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
||||
resolved "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
|
||||
integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
|
||||
dependencies:
|
||||
cross-spawn "^5.0.1"
|
||||
|
@ -1537,7 +1392,7 @@ execa@^0.7.0:
|
|||
|
||||
execa@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
|
||||
resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
|
||||
integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=
|
||||
dependencies:
|
||||
cross-spawn "^6.0.0"
|
||||
|
@ -1706,11 +1561,6 @@ fb-watchman@^2.0.0:
|
|||
dependencies:
|
||||
bser "^2.0.0"
|
||||
|
||||
figlet@^1.1.1:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.npm.taobao.org/figlet/download/figlet-1.2.3.tgz#7d25df546f41fc411c2a8b88012d48d55de72129"
|
||||
integrity sha1-fSXfVG9B/EEcKouIAS1I1V3nISk=
|
||||
|
||||
filename-regex@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
|
||||
|
@ -1804,18 +1654,9 @@ forever-agent@~0.6.1:
|
|||
resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||
|
||||
form-data@^2.3.1:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.4.0.tgz?cache=0&sync_timestamp=1560929244634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.4.0.tgz#4902b831b051e0db5612a35e1a098376f7b13ad8"
|
||||
integrity sha1-SQK4MbBR4NtWEqNeGgmDdvexOtg=
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@~2.3.2:
|
||||
form-data@^2.3.1, form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz?cache=0&sync_timestamp=1560929244634&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fform-data%2Fdownload%2Fform-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y=
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
|
@ -1888,11 +1729,6 @@ get-caller-file@^1.0.1:
|
|||
resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||
integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=
|
||||
|
||||
get-caller-file@^2.0.1:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||
integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=
|
||||
|
||||
get-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
|
@ -1964,6 +1800,11 @@ globals@^9.18.0:
|
|||
resolved "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
|
||||
integrity sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=
|
||||
|
||||
google-libphonenumber@^3.1.6:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.npm.taobao.org/google-libphonenumber/download/google-libphonenumber-3.2.2.tgz#3d9d7ba727e99a50812f21b0ed313723b76c5c54"
|
||||
integrity sha1-PZ17pyfpmlCBLyGw7TE3I7dsXFQ=
|
||||
|
||||
got@^6.7.1:
|
||||
version "6.7.1"
|
||||
resolved "https://registry.npm.taobao.org/got/download/got-6.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgot%2Fdownload%2Fgot-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
|
||||
|
@ -2085,11 +1926,6 @@ has@^1.0.1, has@^1.0.3:
|
|||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
highlight.js@^9.6.0:
|
||||
version "9.15.8"
|
||||
resolved "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.15.8.tgz#f344fda123f36f1a65490e932cf90569e4999971"
|
||||
integrity sha1-80T9oSPzbxplSQ6TLPkFaeSZmXE=
|
||||
|
||||
hoek@5.x.x:
|
||||
version "5.0.4"
|
||||
resolved "https://registry.npm.taobao.org/hoek/download/hoek-5.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhoek%2Fdownload%2Fhoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da"
|
||||
|
@ -2147,11 +1983,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4:
|
|||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||
integrity sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=
|
||||
|
||||
ignore-by-default@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npm.taobao.org/ignore-by-default/download/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||
|
@ -2190,14 +2021,9 @@ inflight@^1.0.4:
|
|||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
|
||||
|
||||
inherits@2.0.3:
|
||||
inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
|
||||
ini@^1.3.4, ini@~1.3.0:
|
||||
|
@ -2525,7 +2351,7 @@ isemail@3.x.x:
|
|||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
isobject@^2.0.0:
|
||||
|
@ -2564,7 +2390,7 @@ istanbul-api@^1.3.1:
|
|||
|
||||
istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
|
||||
resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
|
||||
integrity sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=
|
||||
|
||||
istanbul-lib-hook@^1.2.2:
|
||||
|
@ -2610,7 +2436,7 @@ istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6:
|
|||
|
||||
istanbul-reports@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
|
||||
resolved "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.5.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-reports%2Fdownload%2Fistanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
|
||||
integrity sha1-l+Tb87UV6MSEyuoV1lJO69P/Tho=
|
||||
dependencies:
|
||||
handlebars "^4.0.3"
|
||||
|
@ -2956,7 +2782,7 @@ js-tokens@^3.0.2:
|
|||
resolved "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
|
||||
|
||||
js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0:
|
||||
js-yaml@^3.13.0, js-yaml@^3.7.0:
|
||||
version "3.13.1"
|
||||
resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
|
||||
integrity sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=
|
||||
|
@ -3045,37 +2871,6 @@ json5@^1.0.1:
|
|||
dependencies:
|
||||
minimist "^1.2.0"
|
||||
|
||||
jsonwebtoken@8.4.0:
|
||||
version "8.4.0"
|
||||
resolved "https://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.4.0.tgz#8757f7b4cb7440d86d5e2f3becefa70536c8e46a"
|
||||
integrity sha1-h1f3tMt0QNhtXi877O+nBTbI5Go=
|
||||
dependencies:
|
||||
jws "^3.1.5"
|
||||
lodash.includes "^4.3.0"
|
||||
lodash.isboolean "^3.0.3"
|
||||
lodash.isinteger "^4.0.4"
|
||||
lodash.isnumber "^3.0.3"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.isstring "^4.0.1"
|
||||
lodash.once "^4.0.0"
|
||||
ms "^2.1.1"
|
||||
|
||||
jsonwebtoken@^8.2.0:
|
||||
version "8.5.1"
|
||||
resolved "https://registry.npm.taobao.org/jsonwebtoken/download/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
|
||||
integrity sha1-AOceC431TCEhofJhN98igGc7zA0=
|
||||
dependencies:
|
||||
jws "^3.2.2"
|
||||
lodash.includes "^4.3.0"
|
||||
lodash.isboolean "^3.0.3"
|
||||
lodash.isinteger "^4.0.4"
|
||||
lodash.isnumber "^3.0.3"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.isstring "^4.0.1"
|
||||
lodash.once "^4.0.0"
|
||||
ms "^2.1.1"
|
||||
semver "^5.6.0"
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
||||
|
@ -3086,23 +2881,6 @@ jsprim@^1.2.2:
|
|||
json-schema "0.2.3"
|
||||
verror "1.10.0"
|
||||
|
||||
jwa@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.npm.taobao.org/jwa/download/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
|
||||
integrity sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=
|
||||
dependencies:
|
||||
buffer-equal-constant-time "1.0.1"
|
||||
ecdsa-sig-formatter "1.0.11"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
jws@^3.1.5, jws@^3.2.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.npm.taobao.org/jws/download/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
|
||||
integrity sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=
|
||||
dependencies:
|
||||
jwa "^1.4.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
|
||||
|
@ -3198,41 +2976,6 @@ locate-path@^3.0.0:
|
|||
p-locate "^3.0.0"
|
||||
path-exists "^3.0.0"
|
||||
|
||||
lodash.includes@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.npm.taobao.org/lodash.includes/download/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||
integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
|
||||
|
||||
lodash.isboolean@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
|
||||
integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
|
||||
|
||||
lodash.isinteger@^4.0.4:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
|
||||
integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
|
||||
|
||||
lodash.isnumber@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
|
||||
integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
|
||||
|
||||
lodash.isplainobject@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
|
||||
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
|
||||
|
||||
lodash.isstring@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
|
||||
integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
|
||||
|
||||
lodash.once@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
||||
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
|
||||
|
||||
lodash.sortby@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||
|
@ -3516,30 +3259,6 @@ multer@1.4.1:
|
|||
type-is "^1.6.4"
|
||||
xtend "^4.0.0"
|
||||
|
||||
mysql@^2.17.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.npm.taobao.org/mysql/download/mysql-2.17.1.tgz#62bba4a039a9b2f73638cd1652ce50fc6f682899"
|
||||
integrity sha1-YrukoDmpsvc2OM0WUs5Q/G9oKJk=
|
||||
dependencies:
|
||||
bignumber.js "7.2.1"
|
||||
readable-stream "2.3.6"
|
||||
safe-buffer "5.1.2"
|
||||
sqlstring "2.3.1"
|
||||
|
||||
mz@^2.4.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
integrity sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@2.13.2:
|
||||
version "2.13.2"
|
||||
resolved "https://registry.npm.taobao.org/nan/download/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7"
|
||||
integrity sha1-9R3Hrma6fV1V4ebU2AkugCya7+c=
|
||||
|
||||
nan@^2.12.1:
|
||||
version "2.14.0"
|
||||
resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
||||
|
@ -3617,7 +3336,7 @@ node-notifier@^5.2.1:
|
|||
shellwords "^0.1.1"
|
||||
which "^1.3.0"
|
||||
|
||||
node-pre-gyp@0.12.0, node-pre-gyp@^0.12.0:
|
||||
node-pre-gyp@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149"
|
||||
integrity sha1-ObpLsUOdoDApX4meO1ILd4V2YUk=
|
||||
|
@ -3731,7 +3450,7 @@ oauth-sign@~0.9.0:
|
|||
resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||
integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=
|
||||
|
||||
object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||
object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
@ -3838,7 +3557,7 @@ os-locale@^2.0.0:
|
|||
lcid "^1.0.0"
|
||||
mem "^1.1.0"
|
||||
|
||||
os-locale@^3.0.0, os-locale@^3.1.0:
|
||||
os-locale@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&sync_timestamp=1560274285880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
|
||||
integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=
|
||||
|
@ -3923,11 +3642,6 @@ package-json@^4.0.0:
|
|||
registry-url "^3.0.3"
|
||||
semver "^5.1.0"
|
||||
|
||||
parent-require@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/parent-require/download/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977"
|
||||
integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=
|
||||
|
||||
parse-glob@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
|
||||
|
@ -3953,7 +3667,7 @@ parse-json@^4.0.0:
|
|||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
|
||||
parse5@4.0.0, parse5@^4.0.0:
|
||||
parse5@4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
|
||||
integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=
|
||||
|
@ -3968,27 +3682,6 @@ pascalcase@^0.1.1:
|
|||
resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
|
||||
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
|
||||
|
||||
passport-jwt@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/passport-jwt/download/passport-jwt-4.0.0.tgz#7f0be7ba942e28b9f5d22c2ebbb8ce96ef7cf065"
|
||||
integrity sha1-fwvnupQuKLn10iwuu7jOlu988GU=
|
||||
dependencies:
|
||||
jsonwebtoken "^8.2.0"
|
||||
passport-strategy "^1.0.0"
|
||||
|
||||
passport-strategy@1.x.x, passport-strategy@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/passport-strategy/download/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4"
|
||||
integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=
|
||||
|
||||
passport@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.npm.taobao.org/passport/download/passport-0.4.0.tgz#c5095691347bd5ad3b5e180238c3914d16f05811"
|
||||
integrity sha1-xQlWkTR71a07XhgCOMORTRbwWBE=
|
||||
dependencies:
|
||||
passport-strategy "1.x.x"
|
||||
pause "0.0.1"
|
||||
|
||||
path-dirname@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
|
||||
|
@ -4040,11 +3733,6 @@ path-type@^1.0.0:
|
|||
pify "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
pause@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.npm.taobao.org/pause/download/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
|
||||
integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
|
@ -4123,9 +3811,9 @@ private@^0.1.8:
|
|||
integrity sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I=
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
integrity sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=
|
||||
|
||||
prompts@^0.1.9:
|
||||
version "0.1.14"
|
||||
|
@ -4149,9 +3837,9 @@ pseudomap@^1.0.2:
|
|||
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
||||
|
||||
psl@^1.1.24, psl@^1.1.28:
|
||||
version "1.1.33"
|
||||
resolved "https://registry.npm.taobao.org/psl/download/psl-1.1.33.tgz#5533d9384ca7aab86425198e10e8053ebfeab661"
|
||||
integrity sha1-VTPZOEynqrhkJRmOEOgFPr/qtmE=
|
||||
version "1.1.32"
|
||||
resolved "https://registry.npm.taobao.org/psl/download/psl-1.1.32.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.1.32.tgz#3f132717cf2f9c169724b2b6caf373cf694198db"
|
||||
integrity sha1-PxMnF88vnBaXJLK2yvNzz2lBmNs=
|
||||
|
||||
pstree.remy@^1.1.6:
|
||||
version "1.1.7"
|
||||
|
@ -4256,7 +3944,7 @@ readable-stream@1.1.x:
|
|||
isarray "0.0.1"
|
||||
string_decoder "~0.10.x"
|
||||
|
||||
readable-stream@2.3.6, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5:
|
||||
readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=
|
||||
|
@ -4285,7 +3973,7 @@ realpath-native@^1.0.0:
|
|||
dependencies:
|
||||
util.promisify "^1.0.0"
|
||||
|
||||
reflect-metadata@^0.1.12, reflect-metadata@^0.1.13:
|
||||
reflect-metadata@^0.1.12:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
||||
integrity sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag=
|
||||
|
@ -4399,11 +4087,6 @@ require-main-filename@^1.0.1:
|
|||
resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
|
||||
|
||||
require-main-filename@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
|
||||
integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=
|
||||
|
||||
resolve-cwd@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
|
||||
|
@ -4495,7 +4178,7 @@ sane@^2.0.0:
|
|||
optionalDependencies:
|
||||
fsevents "^1.2.3"
|
||||
|
||||
sax@>=0.6.0, sax@^1.2.4:
|
||||
sax@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk=
|
||||
|
@ -4507,7 +4190,7 @@ semver-diff@^2.0.0:
|
|||
dependencies:
|
||||
semver "^5.0.3"
|
||||
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5, semver@^5.5.0, semver@^5.6.0:
|
||||
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5, semver@^5.5.0:
|
||||
version "5.7.0"
|
||||
resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.0.tgz?cache=0&sync_timestamp=1559063729249&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b"
|
||||
integrity sha1-eQp89v6lRZuslhELKbYEEtyP+Ws=
|
||||
|
@ -4548,7 +4231,7 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
|
|||
|
||||
set-value@^0.4.3:
|
||||
version "0.4.3"
|
||||
resolved "https://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
|
||||
resolved "https://registry.npm.taobao.org/set-value/download/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
|
||||
integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
|
||||
dependencies:
|
||||
extend-shallow "^2.0.1"
|
||||
|
@ -4558,7 +4241,7 @@ set-value@^0.4.3:
|
|||
|
||||
set-value@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fset-value%2Fdownload%2Fset-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
|
||||
resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
|
||||
integrity sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=
|
||||
dependencies:
|
||||
extend-shallow "^2.0.1"
|
||||
|
@ -4717,11 +4400,6 @@ sprintf-js@~1.0.2:
|
|||
resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||
|
||||
sqlstring@2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npm.taobao.org/sqlstring/download/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40"
|
||||
integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.16.1"
|
||||
resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
||||
|
@ -4790,15 +4468,6 @@ string-width@^1.0.1:
|
|||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^3.0.0, string-width@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
|
||||
integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE=
|
||||
dependencies:
|
||||
emoji-regex "^7.0.1"
|
||||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^5.1.0"
|
||||
|
||||
string_decoder@~0.10.x:
|
||||
version "0.10.31"
|
||||
resolved "https://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
|
||||
|
@ -4825,13 +4494,6 @@ strip-ansi@^4.0.0:
|
|||
dependencies:
|
||||
ansi-regex "^3.0.0"
|
||||
|
||||
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
|
||||
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
|
||||
dependencies:
|
||||
ansi-regex "^4.1.0"
|
||||
|
||||
strip-bom@3.0.0, strip-bom@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||
|
@ -4940,20 +4602,6 @@ test-exclude@^4.2.1:
|
|||
read-pkg-up "^1.0.1"
|
||||
require-main-filename "^1.0.1"
|
||||
|
||||
thenify-all@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
|
||||
dependencies:
|
||||
thenify ">= 3.1.0 < 4"
|
||||
|
||||
"thenify@>= 3.1.0 < 4":
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npm.taobao.org/thenify/download/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
|
||||
integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
throat@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
|
||||
|
@ -5164,26 +4812,6 @@ typedarray@^0.0.6:
|
|||
resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typeorm@^0.2.18:
|
||||
version "0.2.18"
|
||||
resolved "https://registry.npm.taobao.org/typeorm/download/typeorm-0.2.18.tgz#8ae1d21104117724af41ddc11035c40a705e1de8"
|
||||
integrity sha1-iuHSEQQRdySvQd3BEDXECnBeHeg=
|
||||
dependencies:
|
||||
app-root-path "^2.0.1"
|
||||
buffer "^5.1.0"
|
||||
chalk "^2.4.2"
|
||||
cli-highlight "^2.0.0"
|
||||
debug "^4.1.1"
|
||||
dotenv "^6.2.0"
|
||||
glob "^7.1.2"
|
||||
js-yaml "^3.13.1"
|
||||
mkdirp "^0.5.1"
|
||||
reflect-metadata "^0.1.13"
|
||||
tslib "^1.9.0"
|
||||
xml2js "^0.4.17"
|
||||
yargonaut "^1.1.2"
|
||||
yargs "^13.2.1"
|
||||
|
||||
typescript@3.4.3:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.npm.taobao.org/typescript/download/typescript-3.4.3.tgz#0eb320e4ace9b10eadf5bc6103286b0f8b7c224f"
|
||||
|
@ -5315,6 +4943,11 @@ validate-npm-package-license@^3.0.1:
|
|||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
validator@10.4.0:
|
||||
version "10.4.0"
|
||||
resolved "https://registry.npm.taobao.org/validator/download/validator-10.4.0.tgz#ee99a44afb3bb5ed350a159f056ca72a204cfc3c"
|
||||
integrity sha1-7pmkSvs7te01ChWfBWynKiBM/Dw=
|
||||
|
||||
vary@^1, vary@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
|
@ -5441,15 +5074,6 @@ wrap-ansi@^2.0.0:
|
|||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
|
||||
wrap-ansi@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
||||
integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=
|
||||
dependencies:
|
||||
ansi-styles "^3.2.0"
|
||||
string-width "^3.0.0"
|
||||
strip-ansi "^5.0.0"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
|
@ -5466,7 +5090,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.1.0:
|
|||
|
||||
ws@^5.2.0:
|
||||
version "5.2.2"
|
||||
resolved "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz?cache=0&sync_timestamp=1560788200711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
|
||||
resolved "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
|
||||
integrity sha1-3/7xSGa46NyRM1glFNG++vlumA8=
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
@ -5481,19 +5105,6 @@ xml-name-validator@^3.0.0:
|
|||
resolved "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
|
||||
integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=
|
||||
|
||||
xml2js@^0.4.17:
|
||||
version "0.4.19"
|
||||
resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.19.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxml2js%2Fdownload%2Fxml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
|
||||
integrity sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~9.0.1"
|
||||
|
||||
xmlbuilder@~9.0.1:
|
||||
version "9.0.7"
|
||||
resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
|
||||
integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
|
||||
|
||||
xtend@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npm.taobao.org/xtend/download/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
|
@ -5504,7 +5115,7 @@ y18n@^3.2.1:
|
|||
resolved "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
|
||||
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
|
||||
|
||||
"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
|
||||
"y18n@^3.2.1 || ^4.0.0":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||
integrity sha1-le+U+F7MgdAHwmThkKEg8KPIVms=
|
||||
|
@ -5519,15 +5130,6 @@ yallist@^3.0.0, yallist@^3.0.3:
|
|||
resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
|
||||
integrity sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=
|
||||
|
||||
yargonaut@^1.1.2:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.npm.taobao.org/yargonaut/download/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c"
|
||||
integrity sha1-xk9WQyx0ZScSIfU/XMUXiQw9bgw=
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
figlet "^1.1.1"
|
||||
parent-require "^1.0.0"
|
||||
|
||||
yargs-parser@10.x:
|
||||
version "10.1.0"
|
||||
resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-10.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
|
||||
|
@ -5543,14 +5145,6 @@ yargs-parser@^11.1.1:
|
|||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^13.1.0:
|
||||
version "13.1.1"
|
||||
resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
||||
integrity sha1-0mBYUyqgbTZf4JH2ofwGsvfl7KA=
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^9.0.2:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
|
||||
|
@ -5594,23 +5188,6 @@ yargs@^12.0.1:
|
|||
y18n "^3.2.1 || ^4.0.0"
|
||||
yargs-parser "^11.1.1"
|
||||
|
||||
yargs@^13.0.0, yargs@^13.2.1:
|
||||
version "13.2.4"
|
||||
resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
|
||||
integrity sha1-C1YreUAW65ZRuYvTes82SqXW3IM=
|
||||
dependencies:
|
||||
cliui "^5.0.0"
|
||||
find-up "^3.0.0"
|
||||
get-caller-file "^2.0.1"
|
||||
os-locale "^3.1.0"
|
||||
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.0"
|
||||
|
||||
yn@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npm.taobao.org/yn/download/yn-3.1.0.tgz#fcbe2db63610361afcc5eb9e0ac91e976d046114"
|
||||
|
|
Loading…
Reference in New Issue