diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ac34763 --- /dev/null +++ b/.env.example @@ -0,0 +1,11 @@ +# 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} diff --git a/.gitignore b/.gitignore index c16ef02..92d0a25 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ /dist /node_modules +# env +.env + # Logs logs *.log diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1df8d98 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,2 @@ +version: '3' +# msyql 以及 web 管理界面直接用已经通过 docker-compose 创建的 8 版本的,就先不写了 \ No newline at end of file diff --git a/package.json b/package.json index 4d0eb94..72b13f9 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,13 @@ "dependencies": { "@nestjs/common": "^6.0.0", "@nestjs/core": "^6.0.0", - "@nestjs/platform-express": "^6.0.0", + "@nestjs/platform-express": "^6.0.0", + "@nestjs/typeorm": "^6.1.2", + "mysql": "^2.17.1", "reflect-metadata": "^0.1.12", "rimraf": "^2.6.2", - "rxjs": "^6.3.3" + "rxjs": "^6.3.3", + "typeorm": "^0.2.18" }, "devDependencies": { "@nestjs/testing": "^6.0.0", @@ -46,7 +49,11 @@ "wait-on": "^3.2.0" }, "jest": { - "moduleFileExtensions": ["js", "json", "ts"], + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], "rootDir": "src", "testRegex": ".spec.ts$", "transform": { diff --git a/src/app.module.ts b/src/app.module.ts index 8662803..bfa6dec 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,9 +1,23 @@ import { Module } 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'; @Module({ - imports: [], + imports: [ + TypeOrmModule.forRoot({ + type: 'mysql', + host: 'localhost', + port: 3306, + username: 'root', + password: 'jeremy', + database: 'nest', + synchronize: true, + entities: [__dirname + '/**/*.entity{.ts,.js}'], + }), + PostModule, + ], controllers: [AppController], providers: [AppService], }) diff --git a/src/modules/post/post.controller.spec.ts b/src/modules/post/post.controller.spec.ts new file mode 100644 index 0000000..a669429 --- /dev/null +++ b/src/modules/post/post.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PostController } from './post.controller'; + +describe('Post Controller', () => { + let controller: PostController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [PostController], + }).compile(); + + controller = module.get(PostController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/modules/post/post.controller.ts b/src/modules/post/post.controller.ts new file mode 100644 index 0000000..846493a --- /dev/null +++ b/src/modules/post/post.controller.ts @@ -0,0 +1,35 @@ +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) { + return await this.postService.update(id, data); + } + + @Delete(':id') + async destroy(@Param() id: string) { + return await this.postService.destroy(id); + } +} diff --git a/src/modules/post/post.dto.ts b/src/modules/post/post.dto.ts new file mode 100644 index 0000000..87eb738 --- /dev/null +++ b/src/modules/post/post.dto.ts @@ -0,0 +1,4 @@ +export class PostDto { + readonly title: string; + readonly body: string; +} \ No newline at end of file diff --git a/src/modules/post/post.entity.ts b/src/modules/post/post.entity.ts new file mode 100644 index 0000000..381ee46 --- /dev/null +++ b/src/modules/post/post.entity.ts @@ -0,0 +1,19 @@ +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; +} \ No newline at end of file diff --git a/src/modules/post/post.module.ts b/src/modules/post/post.module.ts new file mode 100644 index 0000000..a43b068 --- /dev/null +++ b/src/modules/post/post.module.ts @@ -0,0 +1,14 @@ +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 {} diff --git a/src/modules/post/post.service.spec.ts b/src/modules/post/post.service.spec.ts new file mode 100644 index 0000000..7769284 --- /dev/null +++ b/src/modules/post/post.service.spec.ts @@ -0,0 +1,18 @@ +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); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/modules/post/post.service.ts b/src/modules/post/post.service.ts new file mode 100644 index 0000000..610787b --- /dev/null +++ b/src/modules/post/post.service.ts @@ -0,0 +1,38 @@ +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, + ) { } + + 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) { + const result = await this.postRepository.update(id, data); + return result; + } + + async destroy(id: string) { + const result = await this.postRepository.delete(id); + return result; + } +} diff --git a/yarn.lock b/yarn.lock index 7de9c99..a968ae4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,6 +56,13 @@ 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" @@ -228,6 +235,11 @@ 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" @@ -240,6 +252,11 @@ 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" @@ -248,6 +265,11 @@ 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" @@ -565,6 +587,11 @@ 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" @@ -585,6 +612,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +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" @@ -683,6 +715,14 @@ buffer-from@1.x, buffer-from@^1.0.0: 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" @@ -748,7 +788,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.3: +chalk@^1.1.1, 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= @@ -759,7 +799,7 @@ 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.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= @@ -824,6 +864,17 @@ 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" @@ -833,6 +884,15 @@ 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" @@ -1083,6 +1143,13 @@ 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" @@ -1208,6 +1275,11 @@ 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" @@ -1226,6 +1298,11 @@ ee-first@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" @@ -1548,6 +1625,11 @@ 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" @@ -1725,6 +1807,11 @@ 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" @@ -1917,6 +2004,11 @@ 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" @@ -1974,6 +2066,11 @@ 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" @@ -2778,7 +2875,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.7.0: +js-yaml@^3.13.0, js-yaml@^3.13.1, 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= @@ -3255,6 +3352,25 @@ 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.12.1: version "2.14.0" resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -3446,7 +3562,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.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, 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= @@ -3553,7 +3669,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.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= @@ -3638,6 +3754,11 @@ 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" @@ -3663,7 +3784,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= @@ -3940,7 +4061,7 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -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.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: 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= @@ -3969,7 +4090,7 @@ realpath-native@^1.0.0: dependencies: util.promisify "^1.0.0" -reflect-metadata@^0.1.12: +reflect-metadata@^0.1.12, reflect-metadata@^0.1.13: 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= @@ -4083,6 +4204,11 @@ 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" @@ -4174,7 +4300,7 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" -sax@^1.2.4: +sax@>=0.6.0, 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= @@ -4396,6 +4522,11 @@ 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" @@ -4464,6 +4595,15 @@ 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" @@ -4490,6 +4630,13 @@ 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" @@ -4598,6 +4745,20 @@ 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" @@ -4808,6 +4969,26 @@ 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" @@ -5065,6 +5246,15 @@ 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" @@ -5096,6 +5286,19 @@ 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" @@ -5106,7 +5309,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@^3.2.1 || ^4.0.0", y18n@^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= @@ -5121,6 +5324,15 @@ 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" @@ -5136,6 +5348,14 @@ 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" @@ -5179,6 +5399,23 @@ 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"