diff --git a/.travis.yml b/.travis.yml index cb480e55f70..bdbda087dbd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,10 @@ language: node_js node_js: - "8" - "9" + - "10" +cache: + directories: + - "node_modules" git: depth: 5 addons: diff --git a/bundle/core/errors/exceptions/undefined-dependency.exception.d.ts b/bundle/core/errors/exceptions/undefined-dependency.exception.d.ts index 70e2ef7641e..1186f8ed298 100644 --- a/bundle/core/errors/exceptions/undefined-dependency.exception.d.ts +++ b/bundle/core/errors/exceptions/undefined-dependency.exception.d.ts @@ -1,4 +1,5 @@ import { RuntimeException } from './runtime.exception'; +import { InjectorDependencyContext } from '../../injector/injector'; export declare class UndefinedDependencyException extends RuntimeException { - constructor(type: string, index: number, length: number); + constructor(type: string, undefinedDependencyContext: InjectorDependencyContext); } diff --git a/bundle/core/errors/exceptions/undefined-dependency.exception.js b/bundle/core/errors/exceptions/undefined-dependency.exception.js index 35f9c7bb55d..c4f20f6d5ab 100644 --- a/bundle/core/errors/exceptions/undefined-dependency.exception.js +++ b/bundle/core/errors/exceptions/undefined-dependency.exception.js @@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const runtime_exception_1 = require("./runtime.exception"); const messages_1 = require("../messages"); class UndefinedDependencyException extends runtime_exception_1.RuntimeException { - constructor(type, index, length) { - super(messages_1.UnknownDependenciesMessage(type, index, length)); + constructor(type, undefinedDependencyContext) { + super(messages_1.UnknownDependenciesMessage(type, undefinedDependencyContext)); } } exports.UndefinedDependencyException = UndefinedDependencyException; diff --git a/bundle/core/errors/exceptions/unknown-dependencies.exception.d.ts b/bundle/core/errors/exceptions/unknown-dependencies.exception.d.ts index f1627c9ba3c..481560ca284 100644 --- a/bundle/core/errors/exceptions/unknown-dependencies.exception.d.ts +++ b/bundle/core/errors/exceptions/unknown-dependencies.exception.d.ts @@ -1,4 +1,5 @@ import { RuntimeException } from './runtime.exception'; +import { InjectorDependencyContext } from '../../injector/injector'; export declare class UnknownDependenciesException extends RuntimeException { - constructor(type: string, index: number, length: number); + constructor(type: string, unknownDependencyContext: InjectorDependencyContext); } diff --git a/bundle/core/errors/exceptions/unknown-dependencies.exception.js b/bundle/core/errors/exceptions/unknown-dependencies.exception.js index f41e227144f..076e43ad880 100644 --- a/bundle/core/errors/exceptions/unknown-dependencies.exception.js +++ b/bundle/core/errors/exceptions/unknown-dependencies.exception.js @@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const runtime_exception_1 = require("./runtime.exception"); const messages_1 = require("../messages"); class UnknownDependenciesException extends runtime_exception_1.RuntimeException { - constructor(type, index, length) { - super(messages_1.UnknownDependenciesMessage(type, index, length)); + constructor(type, unknownDependencyContext) { + super(messages_1.UnknownDependenciesMessage(type, unknownDependencyContext)); } } exports.UnknownDependenciesException = UnknownDependenciesException; diff --git a/bundle/core/errors/messages.d.ts b/bundle/core/errors/messages.d.ts index 9cec80a9785..ca9dec08e7d 100644 --- a/bundle/core/errors/messages.d.ts +++ b/bundle/core/errors/messages.d.ts @@ -1,4 +1,5 @@ -export declare const UnknownDependenciesMessage: (type: string, index: number, length: number) => string; +import { InjectorDependencyContext } from '../injector/injector'; +export declare const UnknownDependenciesMessage: (type: string, unknownDependencyContext: InjectorDependencyContext) => string; export declare const InvalidMiddlewareMessage: (name: string) => string; export declare const InvalidModuleMessage: (scope: string) => string; export declare const UnknownExportMessage: (module: string) => string; diff --git a/bundle/core/errors/messages.js b/bundle/core/errors/messages.js index f9d8b839ca6..c2d76280890 100644 --- a/bundle/core/errors/messages.js +++ b/bundle/core/errors/messages.js @@ -1,11 +1,19 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnknownDependenciesMessage = (type, index, length) => { +/** + * Returns the name of the dependency + * Tries to get the class name, otherwise the string value + * (= injection token). As fallback it returns '+' + * @param dependency The dependency whichs name shoul get displayed + */ +const getDependencyName = (dependency) => (dependency && dependency.name) || dependency || '+'; +exports.UnknownDependenciesMessage = (type, unknownDependencyContext) => { + const { index, dependencies } = unknownDependencyContext; let message = `Nest can't resolve dependencies of the ${type}`; message += ` (`; - const args = new Array(length).fill('+'); - args[index] = '?'; - message += args.join(', '); + const dependenciesName = dependencies.map(getDependencyName); + dependenciesName[index] = '?'; + message += dependenciesName.join(', '); message += `). Please make sure that the argument at index [${index}] is available in the current context.`; return message; }; diff --git a/bundle/core/injector/injector.d.ts b/bundle/core/injector/injector.d.ts index 727d12d82d0..3068ebd6bff 100644 --- a/bundle/core/injector/injector.d.ts +++ b/bundle/core/injector/injector.d.ts @@ -13,29 +13,38 @@ export declare class Injector { loadInstanceOfComponent(wrapper: InstanceWrapper, module: Module): Promise; applyDoneSubject(wrapper: InstanceWrapper): () => void; loadInstance(wrapper: InstanceWrapper, collection: any, module: Module): Promise; - resolveConstructorParams(wrapper: InstanceWrapper, module: Module, inject: any[], callback: (args) => void): Promise; + resolveConstructorParams(wrapper: InstanceWrapper, module: Module, inject: InjectorDependency[], callback: (args) => void): Promise; reflectConstructorParams(type: Type): any[]; reflectSelfParams(type: Type): any[]; - resolveSingleParam(wrapper: InstanceWrapper, param: Type | string | symbol | any, {index, length}: { - index: number; - length: number; - }, module: Module): Promise; + resolveSingleParam(wrapper: InstanceWrapper, param: Type | string | symbol | any, dependencyContext: InjectorDependencyContext, module: Module): Promise; resolveParamToken(wrapper: InstanceWrapper, param: Type | string | symbol | any): any; - resolveComponentInstance(module: Module, name: any, {index, length}: { - index: number; - length: number; - }, wrapper: InstanceWrapper): Promise; - lookupComponent(components: Map, module: Module, {name, index, length}: { - name: any; - index: number; - length: number; - }, wrapper: InstanceWrapper): Promise; - lookupComponentInExports(components: Map, {name, index, length}: { - name: any; - index: number; - length: number; - }, module: Module, wrapper: InstanceWrapper): Promise; + resolveComponentInstance(module: Module, name: any, dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper): Promise; + lookupComponent(components: Map, module: Module, dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper): Promise; + lookupComponentInExports(components: Map, dependencyContext: InjectorDependencyContext, module: Module, wrapper: InstanceWrapper): Promise; lookupComponentInRelatedModules(module: Module, name: any): Promise; resolveFactoryInstance(factoryResult: any): Promise; flatMap(modules: Module[]): Module[]; } +/** + * The type of an injectable dependency + */ +export declare type InjectorDependency = Type | Function | string; +/** + * Context of a dependency which gets injected by + * the injector + */ +export interface InjectorDependencyContext { + /** + * The name of the function or injection token + */ + name?: string; + /** + * The index of the dependency which gets injected + * from the dependencies array + */ + index: number; + /** + * The dependency array which gets injected + */ + dependencies: InjectorDependency[]; +} diff --git a/bundle/core/injector/injector.js b/bundle/core/injector/injector.js index 44eeb81e2fd..ae5b23a4625 100644 --- a/bundle/core/injector/injector.js +++ b/bundle/core/injector/injector.js @@ -73,11 +73,11 @@ class Injector { } async resolveConstructorParams(wrapper, module, inject, callback) { let isResolved = true; - const args = shared_utils_1.isNil(inject) + const dependencies = shared_utils_1.isNil(inject) ? this.reflectConstructorParams(wrapper.metatype) : inject; - const instances = await Promise.all(args.map(async (param, index) => { - const paramWrapper = await this.resolveSingleParam(wrapper, param, { index, length: args.length }, module); + const instances = await Promise.all(dependencies.map(async (param, index) => { + const paramWrapper = await this.resolveSingleParam(wrapper, param, { index, dependencies }, module); if (!paramWrapper.isResolved && !paramWrapper.forwardRef) { isResolved = false; } @@ -94,12 +94,12 @@ class Injector { reflectSelfParams(type) { return Reflect.getMetadata(constants_1.SELF_DECLARED_DEPS_METADATA, type) || []; } - async resolveSingleParam(wrapper, param, { index, length }, module) { + async resolveSingleParam(wrapper, param, dependencyContext, module) { if (shared_utils_1.isUndefined(param)) { - throw new undefined_dependency_exception_1.UndefinedDependencyException(wrapper.name, index, length); + throw new undefined_dependency_exception_1.UndefinedDependencyException(wrapper.name, dependencyContext); } const token = this.resolveParamToken(wrapper, param); - return await this.resolveComponentInstance(module, shared_utils_1.isFunction(token) ? token.name : token, { index, length }, wrapper); + return await this.resolveComponentInstance(module, shared_utils_1.isFunction(token) ? token.name : token, dependencyContext, wrapper); } resolveParamToken(wrapper, param) { if (!param.forwardRef) { @@ -108,9 +108,9 @@ class Injector { wrapper.forwardRef = true; return param.forwardRef(); } - async resolveComponentInstance(module, name, { index, length }, wrapper) { + async resolveComponentInstance(module, name, dependencyContext, wrapper) { const components = module.components; - const instanceWrapper = await this.lookupComponent(components, module, { name, index, length }, wrapper); + const instanceWrapper = await this.lookupComponent(components, module, Object.assign({ name }, dependencyContext), wrapper); if (!instanceWrapper.isResolved && !instanceWrapper.forwardRef) { await this.loadInstanceOfComponent(instanceWrapper, module); } @@ -119,14 +119,15 @@ class Injector { } return instanceWrapper; } - async lookupComponent(components, module, { name, index, length }, wrapper) { - const scanInExports = () => this.lookupComponentInExports(components, { name, index, length }, module, wrapper); + async lookupComponent(components, module, dependencyContext, wrapper) { + const { name } = dependencyContext; + const scanInExports = () => this.lookupComponentInExports(components, dependencyContext, module, wrapper); return components.has(name) ? components.get(name) : await scanInExports(); } - async lookupComponentInExports(components, { name, index, length }, module, wrapper) { - const instanceWrapper = await this.lookupComponentInRelatedModules(module, name); + async lookupComponentInExports(components, dependencyContext, module, wrapper) { + const instanceWrapper = await this.lookupComponentInRelatedModules(module, dependencyContext.name); if (shared_utils_1.isNil(instanceWrapper)) { - throw new unknown_dependencies_exception_1.UnknownDependenciesException(wrapper.name, index, length); + throw new unknown_dependencies_exception_1.UnknownDependenciesException(wrapper.name, dependencyContext); } return instanceWrapper; } diff --git a/bundle/core/injector/module.js b/bundle/core/injector/module.js index f2347236792..fae02157d42 100644 --- a/bundle/core/injector/module.js +++ b/bundle/core/injector/module.js @@ -214,12 +214,13 @@ class Module { if (this._components.has(token)) { return token; } - const relatedModules = [...this._relatedModules.values()]; - const modulesTokens = relatedModules + const importedArray = [...this._relatedModules.values()]; + const importedRefNames = importedArray + .filter(item => item) .map(({ metatype }) => metatype) .filter(metatype => metatype) .map(({ name }) => name); - if (modulesTokens.indexOf(token) < 0) { + if (importedRefNames.indexOf(token) < 0) { const { name } = this.metatype; throw new unknown_export_exception_1.UnknownExportException(name); } diff --git a/bundle/core/nest-factory.d.ts b/bundle/core/nest-factory.d.ts index eb2c5aa709f..50ae21c6388 100644 --- a/bundle/core/nest-factory.d.ts +++ b/bundle/core/nest-factory.d.ts @@ -12,11 +12,9 @@ export declare class NestFactoryStatic { * Creates an instance of the NestApplication * @returns {Promise} */ - create(module: any): Promise; - create(module: any, options: NestApplicationOptions): Promise; + create(module: any, options?: NestApplicationOptions): Promise; create(module: any, httpServer: FastifyAdapter, options?: NestApplicationOptions): Promise; - create(module: any, httpServer: HttpServer, options?: NestApplicationOptions): Promise; - create(module: any, httpServer: any, options?: NestApplicationOptions): Promise; + create(module: any, httpServer: HttpServer | any, options?: NestApplicationOptions): Promise; /** * Creates an instance of the NestMicroservice * diff --git a/bundle/core/scanner.d.ts b/bundle/core/scanner.d.ts index 86605f1bf77..f7cd884714e 100644 --- a/bundle/core/scanner.d.ts +++ b/bundle/core/scanner.d.ts @@ -36,4 +36,5 @@ export declare class DependenciesScanner { getApplyProvidersMap(): { [type: string]: Function; }; + isDynamicModule(module: Type | DynamicModule): module is DynamicModule; } diff --git a/bundle/core/scanner.js b/bundle/core/scanner.js index d5777749e9d..f8145f8dac6 100644 --- a/bundle/core/scanner.js +++ b/bundle/core/scanner.js @@ -1,6 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("@nestjs/common/constants"); +const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util"); const shared_utils_1 = require("@nestjs/common/utils/shared.utils"); require("reflect-metadata"); const application_config_1 = require("./application-config"); @@ -20,7 +21,12 @@ class DependenciesScanner { } async scanForModules(module, scope = []) { await this.storeModule(module, scope); - const modules = this.reflectMetadata(module, constants_1.metadata.MODULES); + const modules = !this.isDynamicModule(module) + ? this.reflectMetadata(module, constants_1.metadata.MODULES) + : [ + ...this.reflectMetadata(module.module, constants_1.metadata.MODULES), + ...(module.imports || []), + ]; for (const innerModule of modules) { await this.scanForModules(innerModule, [].concat(scope, module)); } @@ -136,9 +142,7 @@ class DependenciesScanner { if (providersKeys.indexOf(type) < 0) { return this.container.addComponent(component, token); } - const providerToken = Math.random() - .toString(36) - .substring(2, 32); + const providerToken = random_string_generator_util_1.randomStringGenerator(); this.applicationProvidersApplyMap.push({ type, moduleKey: token, @@ -175,5 +179,8 @@ class DependenciesScanner { [constants_2.APP_FILTER]: filter => this.applicationConfig.addGlobalFilter(filter), }; } + isDynamicModule(module) { + return module && !!module.module; + } } exports.DependenciesScanner = DependenciesScanner; diff --git a/gulpfile.js b/gulpfile.js index 67bc7f250f1..9bb182491a4 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,7 +2,6 @@ const fs = require('fs'); const path = require('path'); const gulp = require('gulp'); const ts = require('gulp-typescript'); -const gulpSequence = require('gulp-sequence'); const sourcemaps = require('gulp-sourcemaps'); const clean = require('gulp-clean'); @@ -22,18 +21,18 @@ gulp.task('default', function() { modules.forEach(module => { gulp.watch( [`${source}/${module}/**/*.ts`, `${source}/${module}/*.ts`], - [module] + [module], ); }); }); gulp.task('copy:ts', function() { - return gulp.packages(['packages/**/*.ts']).pipe(gulp.dest('./bundle')); + return gulp.src(['packages/**/*.ts']).pipe(gulp.dest('./bundle')); }); - gulp.task('copy-docs', function() { - return gulp.src('Readme.md') + return gulp + .src('Readme.md') .pipe(gulp.dest('bundle/common')) .pipe(gulp.dest('bundle/core')) .pipe(gulp.dest('bundle/microservices')) @@ -43,7 +42,9 @@ gulp.task('copy-docs', function() { gulp.task('clean:bundle', function() { return gulp - .packages(['bundle/**/*.js.map', 'bundle/**/*.ts', '!bundle/**/*.d.ts'], { read: false }) + .src(['bundle/**/*.js.map', 'bundle/**/*.ts', '!bundle/**/*.d.ts'], { + read: false, + }) .pipe(clean()); }); @@ -63,27 +64,23 @@ modules.forEach(module => { .pipe(sourcemaps.init()) .pipe(packages[module]()) .pipe( - sourcemaps.mapSources(sourcePath => './' + sourcePath.split('/').pop()) + sourcemaps.mapSources(sourcePath => './' + sourcePath.split('/').pop()), ) .pipe(sourcemaps.write('.')) .pipe(gulp.dest(`${dist}/${module}`)); }); }); -gulp.task('build', function(cb) { - gulpSequence('common', modules.filter(module => module !== 'common'), cb); -}); +gulp.task('common', gulp.series(modules)); -gulp.task('build:dev', function(cb) { - gulpSequence( - 'common:dev', - modules - .filter(module => module !== 'common') - .map(module => module + ':dev'), - 'copy:ts', - cb - ); -}); +gulp.task( + 'common:dev', + gulp.series(modules.map(module => module + ':dev'), 'copy:ts'), +); + +gulp.task('build', gulp.series('common')); + +gulp.task('build:dev', gulp.series('common:dev')); function getFolders(dir) { return fs.readdirSync(dir).filter(function(file) { @@ -91,17 +88,16 @@ function getFolders(dir) { }); } gulp.task('move', function() { - const getDirs = (base) => getFolders(base) - .map((path) => `${base}/${path}`); + const getDirs = base => getFolders(base).map(path => `${base}/${path}`); const examplesDirs = getDirs('sample'); const integrationDirs = getDirs('integration'); const directories = examplesDirs.concat(integrationDirs); - let stream = gulp - .src(['node_modules/@nestjs/**/*']); + let stream = gulp.src(['node_modules/@nestjs/**/*']); - directories.forEach((dir) => { + directories.forEach(dir => { stream = stream.pipe(gulp.dest(dir + '/node_modules/@nestjs')); }); + return stream; }); diff --git a/integration/microservices/e2e/sum-nats.spec.ts b/integration/microservices/e2e/sum-nats.spec.ts index 474a872137c..fb20fc7d33e 100644 --- a/integration/microservices/e2e/sum-nats.spec.ts +++ b/integration/microservices/e2e/sum-nats.spec.ts @@ -1,8 +1,8 @@ -import * as express from 'express'; -import * as request from 'supertest'; -import { Test } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; import { Transport } from '@nestjs/microservices'; +import { Test } from '@nestjs/testing'; +import * as express from 'express'; +import * as request from 'supertest'; import { NatsController } from '../src/nats/nats.controller'; describe('NATS transport', () => { @@ -19,7 +19,7 @@ describe('NATS transport', () => { app.connectMicroservice({ transport: Transport.NATS, options: { - url: 'nats://localhost:4222' + url: 'nats://localhost:4222', }, }); await app.startAllMicroservicesAsync(); @@ -28,14 +28,14 @@ describe('NATS transport', () => { it(`/POST`, () => { return request(server) - .post('/?command=sum') + .post('/?command=math.sum') .send([1, 2, 3, 4, 5]) .expect(200, '15'); }); it(`/POST (Promise/async)`, () => { return request(server) - .post('/?command=asyncSum') + .post('/?command=async.sum') .send([1, 2, 3, 4, 5]) .expect(200) .expect(200, '15'); @@ -43,7 +43,7 @@ describe('NATS transport', () => { it(`/POST (Observable stream)`, () => { return request(server) - .post('/?command=streamSum') + .post('/?command=stream.sum') .send([1, 2, 3, 4, 5]) .expect(200, '15'); }); diff --git a/integration/microservices/src/nats/nats-broadcast.controller.ts b/integration/microservices/src/nats/nats-broadcast.controller.ts index b9f04f444ab..21e36fd7725 100644 --- a/integration/microservices/src/nats/nats-broadcast.controller.ts +++ b/integration/microservices/src/nats/nats-broadcast.controller.ts @@ -1,8 +1,8 @@ import { Controller, Get } from '@nestjs/common'; import { Client, - MessagePattern, ClientProxy, + MessagePattern, Transport, } from '@nestjs/microservices'; import { Observable } from 'rxjs'; @@ -16,11 +16,11 @@ export class NatsBroadcastController { @Get('broadcast') multicats() { return this.client - .send({ cmd: 'broadcast' }, {}) + .send('broadcast.test', {}) .pipe(scan((a, b) => a + b), take(2)); } - @MessagePattern({ cmd: 'broadcast' }) + @MessagePattern('broadcast.*') replyBroadcast(): Observable { return new Observable(observer => observer.next(1)); } diff --git a/integration/microservices/src/nats/nats.controller.ts b/integration/microservices/src/nats/nats.controller.ts index 8b3d4fc6f76..8695404e7a2 100644 --- a/integration/microservices/src/nats/nats.controller.ts +++ b/integration/microservices/src/nats/nats.controller.ts @@ -1,11 +1,11 @@ -import { Controller, Get, Post, Body, Query, HttpCode } from '@nestjs/common'; +import { Body, Controller, HttpCode, Post, Query } from '@nestjs/common'; import { Client, - MessagePattern, ClientProxy, + MessagePattern, Transport, } from '@nestjs/microservices'; -import { Observable, of, from } from 'rxjs'; +import { from, Observable, of } from 'rxjs'; import { scan } from 'rxjs/operators'; @Controller() @@ -21,14 +21,14 @@ export class NatsController { @Post() @HttpCode(200) call(@Query('command') cmd, @Body() data: number[]): Observable { - return this.client.send({ cmd }, data); + return this.client.send(cmd, data); } @Post('stream') @HttpCode(200) stream(@Body() data: number[]): Observable { return this.client - .send({ cmd: 'streaming' }, data) + .send('streaming.sum', data) .pipe(scan((a, b) => a + b)); } @@ -38,7 +38,7 @@ export class NatsController { const send = async (tab: number[]) => { const expected = tab.reduce((a, b) => a + b); const result = await this.client - .send({ cmd: 'sum' }, tab) + .send('math.sum', tab) .toPromise(); return result === expected; @@ -48,22 +48,22 @@ export class NatsController { .reduce(async (a, b) => (await a) && (await b)); } - @MessagePattern({ cmd: 'sum' }) + @MessagePattern('math.*') sum(data: number[]): number { return (data || []).reduce((a, b) => a + b); } - @MessagePattern({ cmd: 'asyncSum' }) + @MessagePattern('async.*') async asyncSum(data: number[]): Promise { return (data || []).reduce((a, b) => a + b); } - @MessagePattern({ cmd: 'streamSum' }) + @MessagePattern('stream.*') streamSum(data: number[]): Observable { return of((data || []).reduce((a, b) => a + b)); } - @MessagePattern({ cmd: 'streaming' }) + @MessagePattern('streaming.*') streaming(data: number[]): Observable { return from(data); } diff --git a/package-lock.json b/package-lock.json index 3c89a5e4f8b..22d796479c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -101,9 +101,9 @@ } }, "@nestjs/common": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-5.0.0.tgz", - "integrity": "sha512-6TXXAp6s1gQ7P1Wuu9Njb7vZymRvVvT+ao/4BZETHp2gebk6RZJO1SPLBf4U81dTnm0LRFxupkIWu6mXEDnalg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-5.1.0.tgz", + "integrity": "sha512-JAZFqdU+f4DRE4yOvpfWDtwgmCavyfE2Vu7mSwYsklU9TlBBE9XBygN2J38aQC83dmCJ1H889shd+hBIiVyEXA==", "requires": { "axios": "0.17.1", "cli-color": "1.2.0", @@ -112,14 +112,15 @@ } }, "@nestjs/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-5.0.0.tgz", - "integrity": "sha512-O7uvX8NlsP+wg55wlDbMprLOqYDypQepOb3RWpBL2Y7b59eZK6hMJfJIRKHAUzs28C87gIISmYfjrMt2QNr+rA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-5.1.0.tgz", + "integrity": "sha512-gg5/nOdAEV+zHeTXEiU/5RnxBPyLH/n+51vj19k8IcSedP7wD3G2fbwp5Q2xOVx6ghKhhzdav+ED0ZitkR6uMA==", "requires": { "body-parser": "1.18.2", "cors": "2.8.4", "express": "4.16.3", "iterare": "0.0.8", + "object-hash": "1.3.0", "optional": "0.1.4" }, "dependencies": { @@ -209,11 +210,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -245,30 +241,35 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.35.0" } }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "ipaddr.js": "1.8.0" } }, "qs": { @@ -333,9 +334,9 @@ } }, "@nestjs/microservices": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-5.0.0.tgz", - "integrity": "sha512-3n38wJskyRWZIPkFolEXF6DwrClGymhPupshgbQCr4A/TN0vQxAIkpLM+zfwqZB6M9FETS/5SMEIvbX4QI3wTA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-5.1.0.tgz", + "integrity": "sha512-g9ez7N+QgjlJSSak27KhUHXi1YMnk/DuGpAn/TWlm5rSmcsrArdTSvinGBMyb0mL3CMJJz8y0/CZwAUdy9HQzA==", "requires": { "iterare": "0.0.8", "json-socket": "^0.2.1", @@ -343,18 +344,18 @@ } }, "@nestjs/testing": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-5.0.0.tgz", - "integrity": "sha512-Zz+vZwLl7ZFKanMvWXO81mzcTpJvqMcktSTxR70xVMU0kcilcwO0ung/5KtUuNSZLilEZUboNX5SEBljzv/YWA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-5.1.0.tgz", + "integrity": "sha512-pLhsDmshfKKwpDkklMpn+7YAnSxe1n8RgTfb54N6jDlCTDb9VFiHwp41tTCzR7AAckGFZT0BhwoNKyb3gB5JDg==", "requires": { "deprecate": "1.0.0", "optional": "0.1.4" } }, "@nestjs/websockets": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-5.0.0.tgz", - "integrity": "sha512-O+yie2lokDR2aarCDw3pfTBNjEZOt9fEz6CfYwusVDy2YLcK/dHk0gZizRIzdXo4XI3gd3CCPCINSWkKlH8YGw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-5.1.0.tgz", + "integrity": "sha512-9NDtV+LraSvJ/I3d6SBhk+ikF1ljXkV9vRiEdds1iFYR9MM/UEMTEOdCGt138nJcv356vzPUb59KAHXL0vVxLA==", "requires": { "iterare": "0.0.8", "socket.io": "^2.0.3" @@ -611,6 +612,15 @@ "string-width": "^2.0.0" } }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, "ansi-cyan": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", @@ -757,6 +767,15 @@ "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", "dev": true }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, "append-field": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", @@ -799,12 +818,30 @@ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -846,12 +883,66 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -923,6 +1014,18 @@ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, + "async-done": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", + "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^1.0.7", + "stream-exhaust": "^1.0.1" + } + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -934,6 +1037,15 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -1047,6 +1159,23 @@ } } }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -1273,6 +1402,12 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", @@ -1796,6 +1931,28 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -2572,6 +2729,16 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "copy-props": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", + "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "dev": true, + "requires": { + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" + } + }, "core-js": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", @@ -2762,6 +2929,15 @@ "array-find-index": "^1.0.1" } }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, "dargs": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", @@ -2934,6 +3110,29 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.1.tgz", "integrity": "sha512-urQxA1smbLZ2cBbXbaYObM1dJ82aJ2H57A1C/Kklfh/ZN1bgH4G/n5KWhdNfOK11W98gqZfyYj7W4frJJRwA2w==" }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", @@ -2943,6 +3142,16 @@ "clone": "^1.0.2" } }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", @@ -2974,25 +3183,16 @@ "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true }, "detect-indent": { "version": "5.0.0", @@ -3143,6 +3343,16 @@ } } }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", @@ -3184,12 +3394,23 @@ } }, "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "~1.3.0" + "once": "^1.4.0" + }, + "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + } } }, "engine.io": { @@ -3340,6 +3561,18 @@ } } }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3565,12 +3798,12 @@ } }, "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "os-homedir": "^1.0.1" + "homedir-polyfill": "^1.0.1" } }, "expect": { @@ -3974,12 +4207,6 @@ } } }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, "find-my-way": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.10.4.tgz", @@ -4001,89 +4228,30 @@ } }, "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "is-extglob": "^2.1.0" } } } @@ -4099,17 +4267,6 @@ "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - } } }, "first-chunk-stream": { @@ -4119,9 +4276,9 @@ "dev": true }, "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", + "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", "dev": true }, "flatstr": { @@ -4129,6 +4286,16 @@ "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.5.tgz", "integrity": "sha1-W0UbCMvUji6sVKK74L9GFlqhS+M=" }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, "follow-redirects": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", @@ -4162,6 +4329,12 @@ "for-in": "^1.0.1" } }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -4219,12 +4392,6 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, "fs-extra": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", @@ -4236,6 +4403,16 @@ "universalify": "^0.1.0" } }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5259,6 +5436,12 @@ } } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -5297,15 +5480,6 @@ } } }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "~0.1.0" - } - }, "generate-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", @@ -5459,15 +5633,28 @@ } }, "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { + "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "glob-base": { @@ -5490,73 +5677,743 @@ } }, "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", "dev": true, "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "is-extglob": "^2.1.0" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.1.tgz", + "integrity": "sha512-fK92r2COMC199WCyGUblrZKhjra3cyVMDiypDdqg1vsSDmexnbYivK1kNR4QItiNXLKmGlqan469ks67RtNa2g==", + "dev": true, + "requires": { + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "is-extglob": "^2.1.1" } + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true } } }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "^0.5.1" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "^0.1.1" - } - }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -5567,25 +6424,27 @@ } }, "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "homedir-polyfill": "^1.0.0", + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globby": { @@ -5626,58 +6485,6 @@ } } }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, "glogg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", @@ -5737,19 +6544,23 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true + "resolved": false, + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "resolved": false, + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "aproba": { "version": "1.2.0", - "bundled": true + "resolved": false, + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -5757,11 +6568,13 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5769,57 +6582,69 @@ }, "chownr": { "version": "1.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "code-point-at": { "version": "1.1.0", - "bundled": true + "resolved": false, + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "concat-map": { "version": "0.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "resolved": false, + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "core-util-is": { "version": "1.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": false, + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "deep-extend": { "version": "0.5.1", - "bundled": true + "resolved": false, + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" }, "delegates": { "version": "1.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "detect-libc": { "version": "1.0.3", - "bundled": true + "resolved": false, + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -5833,7 +6658,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5845,22 +6671,26 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "iconv-lite": { "version": "0.4.19", - "bundled": true + "resolved": false, + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "requires": { "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5868,37 +6698,44 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "resolved": false, + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.5", - "bundled": true + "resolved": false, + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" } }, "isarray": { "version": "1.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.0", - "bundled": true + "resolved": false, + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minipass": { "version": "2.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5906,31 +6743,36 @@ }, "minizlib": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { "minipass": "^2.2.1" } }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", - "bundled": true + "resolved": false, + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "ms": { "version": "2.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "needle": { "version": "2.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", "requires": { "debug": "^2.1.2", "iconv-lite": "^0.4.4", @@ -5939,7 +6781,8 @@ }, "node-pre-gyp": { "version": "0.10.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -5955,7 +6798,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -5963,11 +6807,13 @@ }, "npm-bundled": { "version": "1.0.3", - "bundled": true + "resolved": false, + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" }, "npm-packlist": { "version": "1.1.10", - "bundled": true, + "resolved": false, + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -5975,7 +6821,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -5985,30 +6832,36 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "object-assign": { "version": "4.1.1", - "bundled": true + "resolved": false, + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { "version": "1.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -6016,15 +6869,18 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "process-nextick-args": { "version": "2.0.0", - "bundled": true + "resolved": false, + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "rc": { "version": "1.2.7", - "bundled": true, + "resolved": false, + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "requires": { "deep-extend": "^0.5.1", "ini": "~1.3.0", @@ -6034,7 +6890,8 @@ }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6047,34 +6904,41 @@ }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.1.1", - "bundled": true + "resolved": false, + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "sax": { "version": "1.2.4", - "bundled": true + "resolved": false, + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { "version": "5.5.0", - "bundled": true + "resolved": false, + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "set-blocking": { "version": "2.0.0", - "bundled": true + "resolved": false, + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "signal-exit": { "version": "3.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6083,25 +6947,29 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true + "resolved": false, + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "tar": { "version": "4.4.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-BfkE9CciGGgDsATqkikUHrQrraBCO+ke/1f6SFAEMnxyyfN9lxC+nW1NFWMpqH865DhHIy9vQi682gk1X7friw==", "requires": { "chownr": "^1.0.1", "fs-minipass": "^1.2.5", @@ -6114,50 +6982,167 @@ "dependencies": { "safe-buffer": { "version": "5.1.2", - "bundled": true + "resolved": false, + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "yallist": { "version": "3.0.2", - "bundled": true + "resolved": false, + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", + "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", "dev": true, "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" + "glob-watcher": "^5.0.0", + "gulp-cli": "^2.0.0", + "undertaker": "^1.0.0", + "vinyl-fs": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "fancy-log": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" + } + }, + "gulp-cli": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz", + "integrity": "sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^2.5.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } } }, "gulp-clang-format": { @@ -6290,16 +7275,6 @@ } } }, - "gulp-sequence": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/gulp-sequence/-/gulp-sequence-0.4.6.tgz", - "integrity": "sha1-44jWQxEEbgVUevQwNTUtlJVQHFA=", - "dev": true, - "requires": { - "gulp-util": ">=3.0.0", - "thunks": "^4.5.1" - } - }, "gulp-sourcemaps": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz", @@ -6794,6 +7769,12 @@ "sparkles": "^1.0.0" } }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -7144,9 +8125,9 @@ } }, "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, "invert-kv": { @@ -7161,13 +8142,13 @@ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" }, "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -7474,12 +8455,12 @@ "dev": true }, "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "^0.1.1" + "is-unc-path": "^1.0.0" } }, "is-retry-allowed": { @@ -7515,12 +8496,12 @@ "dev": true }, "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "^0.1.0" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { @@ -7536,9 +8517,9 @@ "dev": true }, "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "isarray": { @@ -8612,12 +9593,28 @@ } } }, + "just-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "dev": true + }, "kind-of": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.1.tgz", "integrity": "sha512-y/15y6w31q9eVnXhVLPQkI7MD6JyuPNqEnetl8bZEc+mngLuonHQJ0x/6BD1WX6ml0Ig/psUlyKZJxz8uUo1xQ==", "dev": true }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", @@ -8660,6 +9657,15 @@ "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, "left-pad": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", @@ -8947,18 +9953,17 @@ } }, "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { "extend": "^3.0.0", - "findup-sync": "^0.4.2", + "findup-sync": "^2.0.0", "fined": "^1.0.1", - "flagged-respawn": "^0.3.2", - "lodash.isplainobject": "^4.0.4", - "lodash.isstring": "^4.0.1", - "lodash.mapvalues": "^4.4.0", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", "rechoir": "^0.6.2", "resolve": "^1.1.7" } @@ -9643,6 +10648,12 @@ "lodash._isiterateecall": "^3.0.0" } }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, "lodash.defaults": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", @@ -9680,18 +10691,6 @@ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", "dev": true }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", @@ -9703,12 +10702,6 @@ "lodash.isarray": "^3.0.0" } }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", @@ -9869,12 +10862,6 @@ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, "lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", @@ -9900,12 +10887,29 @@ } } }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", - "dev": true - }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -9933,6 +10937,18 @@ "object-visit": "^1.0.0" } }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + } + }, "matchit": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.0.5.tgz", @@ -10322,6 +11338,12 @@ "duplexer2": "0.0.2" } }, + "mute-stdout": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.0.tgz", + "integrity": "sha1-WzLqB+tDyd7WEwQ0z5JvRrKn/U0=", + "dev": true + }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -10365,12 +11387,6 @@ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", "dev": true }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, "nats": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/nats/-/nats-0.8.4.tgz", @@ -10467,6 +11483,15 @@ "remove-trailing-separator": "^1.0.1" } }, + "now-and-later": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", + "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, "npm-path": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", @@ -12176,6 +13201,12 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==" }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -12185,6 +13216,18 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -12208,6 +13251,27 @@ } } }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", @@ -12227,6 +13291,27 @@ "isobject": "^3.0.1" } }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -12360,29 +13445,15 @@ } } }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" + "readable-stream": "^2.0.1" } }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", @@ -12464,12 +13535,12 @@ } }, "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "^0.2.3", + "is-absolute": "^1.0.0", "map-cache": "^0.2.0", "path-root": "^0.1.1" } @@ -13305,6 +14376,27 @@ "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=" }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -13336,6 +14428,17 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, "request": { "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", @@ -13420,13 +14523,22 @@ } }, "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "dev": true, "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" + "value-or-function": "^3.0.0" } }, "resolve-url": { @@ -13587,6 +14699,15 @@ } } }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.0" + } + }, "send": { "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", @@ -13622,12 +14743,6 @@ } } }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, "serve-static": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", @@ -13692,12 +14807,6 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -14054,6 +15163,12 @@ } } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, "stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", @@ -14145,18 +15260,18 @@ } } }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, "stream-equal": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/stream-equal/-/stream-equal-0.1.6.tgz", "integrity": "sha1-zFIvqzhRYBLk1O5HUTsUe3I1kBk=", "dev": true }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", @@ -14233,16 +15348,6 @@ "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "is-utf8": "^0.2.0" - } - }, "strip-bom-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", @@ -14382,6 +15487,16 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, "symbol-observable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", @@ -14499,21 +15614,6 @@ "xtend": "~4.0.0" } }, - "thunks": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/thunks/-/thunks-4.9.0.tgz", - "integrity": "sha1-RsANuZaFg7OkIeDJKF6si5/dsxo=", - "dev": true - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -14638,6 +15738,15 @@ "repeat-string": "^1.6.1" } }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -14984,6 +16093,29 @@ "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", "dev": true }, + "undertaker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", + "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -15011,10 +16143,14 @@ } }, "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" + } }, "unique-string": { "version": "1.0.0", @@ -15088,6 +16224,12 @@ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, "update-notifier": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", @@ -15211,12 +16353,6 @@ } } }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15240,12 +16376,12 @@ "optional": true }, "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.1.tgz", + "integrity": "sha512-iw/1ViSEaff8NJ3HLyEjawk/8hjJib3E7pvG4pddVXfUg1983s3VGsiClDjhK64MQVDGqc1Q8r18S4VKQZS9EQ==", "dev": true, "requires": { - "user-home": "^1.1.1" + "homedir-polyfill": "^1.0.1" } }, "vali-date": { @@ -15264,6 +16400,12 @@ "spdx-expression-parse": "~1.0.0" } }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -15355,78 +16497,115 @@ } }, "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "requires": { - "defaults": "^1.0.0", - "glob-stream": "^3.1.5", - "glob-watcher": "^0.0.6", - "graceful-fs": "^3.0.0", - "mkdirp": "^0.5.0", - "strip-bom": "^1.0.0", - "through2": "^0.6.1", - "vinyl": "^0.4.0" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" }, "dependencies": { "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", "dev": true }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "^1.1.0" - } + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true }, "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } diff --git a/package.json b/package.json index 48a02108cec..7424c01b02d 100644 --- a/package.json +++ b/package.json @@ -12,10 +12,10 @@ "build": "gulp build && gulp move", "build:lib": "gulp build --dist bundle", "copy-docs": "gulp copy-docs", - "prepublish": "npm run build:lib && npm run copy-docs", - "prepublish:rc": "npm run build:lib && npm run copy-docs", - "prepublish:next": "npm run build:lib && npm run copy-docs", - "prepublish:beta": "npm run build:lib && npm run copy-docs", + "prepare": "npm run build:lib && npm run copy-docs", + "prepare:rc": "npm run build:lib && npm run copy-docs", + "prepare:next": "npm run build:lib && npm run copy-docs", + "prepare:beta": "npm run build:lib && npm run copy-docs", "publish": "./node_modules/.bin/lerna publish --exact -m \"chore(@nestjs) publish %s release\"", "publish:rc": "./node_modules/.bin/lerna publish --npm-tag=rc -m \"chore(@nestjs) publish %s release\"", "publish:next": "./node_modules/.bin/lerna publish --npm-tag=next --skip-git -m \"chore(@nestjs) publish %s release\"", @@ -31,11 +31,11 @@ "author": "Kamil Mysliwiec", "license": "MIT", "dependencies": { - "@nestjs/common": "5.0.0", - "@nestjs/core": "5.0.0", - "@nestjs/microservices": "5.0.0", - "@nestjs/testing": "5.0.0", - "@nestjs/websockets": "5.0.0", + "@nestjs/common": "5.1.0", + "@nestjs/core": "5.1.0", + "@nestjs/microservices": "5.1.0", + "@nestjs/testing": "5.1.0", + "@nestjs/websockets": "5.1.0", "axios": "^0.17.1", "class-transformer": "^0.1.8", "class-validator": "^0.8.1", @@ -91,10 +91,9 @@ "core-js": "^2.4.1", "coveralls": "^2.11.16", "fastify-static": "^0.8.0", - "gulp": "^3.9.1", + "gulp": "^4.0.0", "gulp-clang-format": "^1.0.23", "gulp-clean": "^0.4.0", - "gulp-sequence": "^0.4.6", "gulp-sourcemaps": "^2.6.4", "gulp-typescript": "^3.1.6", "gulp-watch": "^4.3.11", diff --git a/packages/common/constants.ts b/packages/common/constants.ts index 5a9d1ecf2c7..bbdc7cdaa94 100644 --- a/packages/common/constants.ts +++ b/packages/common/constants.ts @@ -12,6 +12,7 @@ export const GLOBAL_MODULE_METADATA = '__globalModule__'; export const PATH_METADATA = 'path'; export const PARAMTYPES_METADATA = 'design:paramtypes'; export const SELF_DECLARED_DEPS_METADATA = 'self:paramtypes'; +export const OPTIONAL_DEPS_METADATA = 'optional:paramtypes'; export const METHOD_METADATA = 'method'; export const ROUTE_ARGS_METADATA = '__routeArguments__'; export const CUSTOM_ROUTE_AGRS_METADATA = '__customRouteArgs__'; diff --git a/packages/common/decorators/core/catch.decorator.ts b/packages/common/decorators/core/catch.decorator.ts index 675d1bdd96b..7a95013ab27 100644 --- a/packages/common/decorators/core/catch.decorator.ts +++ b/packages/common/decorators/core/catch.decorator.ts @@ -1,11 +1,12 @@ import 'reflect-metadata'; import { FILTER_CATCH_EXCEPTIONS } from '../../constants'; +import { Type } from '../../interfaces'; /** * Defines the Exceptions Filter. Takes set of exception types as an argument which has to be caught by this Filter. * The class should implement the `ExceptionFilter` interface. */ -export function Catch(...exceptions: any[]): ClassDecorator { +export function Catch(...exceptions: Type[]): ClassDecorator { return (target: object) => { Reflect.defineMetadata(FILTER_CATCH_EXCEPTIONS, exceptions, target); }; diff --git a/packages/common/decorators/core/component.decorator.ts b/packages/common/decorators/core/component.decorator.ts index 108c1c57670..f64fed71125 100644 --- a/packages/common/decorators/core/component.decorator.ts +++ b/packages/common/decorators/core/component.decorator.ts @@ -64,10 +64,10 @@ export function Interceptor(): ClassDecorator { return (target: object) => {}; } +let offset = Math.random() * 100; export function mixin(mixinClass) { - this.offset = this.offset ? ++this.offset : Math.random() * 100; Object.defineProperty(mixinClass, 'name', { - value: JSON.stringify(this.offset), + value: JSON.stringify(offset++), }); Injectable()(mixinClass); return mixinClass; diff --git a/packages/common/decorators/core/index.ts b/packages/common/decorators/core/index.ts index b40b25d662f..b899b38e0e7 100644 --- a/packages/common/decorators/core/index.ts +++ b/packages/common/decorators/core/index.ts @@ -1,11 +1,12 @@ -export * from './controller.decorator'; +export * from './bind.decorator'; +export * from './catch.decorator'; export * from './component.decorator'; +export * from './controller.decorator'; export * from './dependencies.decorator'; -export * from './inject.decorator'; -export * from './catch.decorator'; export * from './exception-filters.decorator'; -export * from './use-pipes.decorator'; -export * from './use-guards.decorator'; +export * from './inject.decorator'; +export * from './optional.decorator'; export * from './reflect-metadata.decorator'; +export * from './use-guards.decorator'; export * from './use-interceptors.decorator'; -export * from './bind.decorator'; +export * from './use-pipes.decorator'; diff --git a/packages/common/decorators/core/inject.decorator.ts b/packages/common/decorators/core/inject.decorator.ts index 9e40dd5b428..678196b6c2b 100644 --- a/packages/common/decorators/core/inject.decorator.ts +++ b/packages/common/decorators/core/inject.decorator.ts @@ -6,10 +6,10 @@ import { isFunction } from '../../utils/shared.utils'; * Injects provider which has to be available in the current injector (module) scope. * Providers are recognized by types or tokens. */ -export function Inject(token: any): ParameterDecorator { +export function Inject(token: T): ParameterDecorator { return (target, key, index) => { const args = Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, target) || []; - const type = isFunction(token) ? token.name : token; + const type = isFunction(token) ? (token as any as Function).name : token; args.push({ index, param: type }); Reflect.defineMetadata(SELF_DECLARED_DEPS_METADATA, args, target); diff --git a/packages/common/decorators/core/optional.decorator.ts b/packages/common/decorators/core/optional.decorator.ts new file mode 100644 index 00000000000..736e60a90d8 --- /dev/null +++ b/packages/common/decorators/core/optional.decorator.ts @@ -0,0 +1,12 @@ +import 'reflect-metadata'; +import { OPTIONAL_DEPS_METADATA } from '../../constants'; + +/** + * Sets dependency as an optional one. + */ +export function Optional(): ParameterDecorator { + return (target, key, index) => { + const args = Reflect.getMetadata(OPTIONAL_DEPS_METADATA, target) || []; + Reflect.defineMetadata(OPTIONAL_DEPS_METADATA, [...args, index], target); + }; +} diff --git a/packages/common/decorators/core/reflect-metadata.decorator.ts b/packages/common/decorators/core/reflect-metadata.decorator.ts index aa5c7abfc11..7b6a1873332 100644 --- a/packages/common/decorators/core/reflect-metadata.decorator.ts +++ b/packages/common/decorators/core/reflect-metadata.decorator.ts @@ -2,7 +2,7 @@ * Assigns the metadata to the class/function under specified `key`. * This metadata can be reflected using `Reflector` class. */ -export const ReflectMetadata = (metadataKey, metadataValue) => ( +export const ReflectMetadata = (metadataKey: K, metadataValue: V) => ( target: object, key?, descriptor?, diff --git a/packages/common/decorators/http/create-route-param-metadata.decorator.ts b/packages/common/decorators/http/create-route-param-metadata.decorator.ts index 2fc763a5b03..aa9392c6936 100644 --- a/packages/common/decorators/http/create-route-param-metadata.decorator.ts +++ b/packages/common/decorators/http/create-route-param-metadata.decorator.ts @@ -3,6 +3,7 @@ import { CUSTOM_ROUTE_AGRS_METADATA, ROUTE_ARGS_METADATA } from '../../constants import { PipeTransform } from '../../index'; import { Type } from '../../interfaces'; import { CustomParamFactory } from '../../interfaces/features/custom-route-param-factory.interface'; +import { isNil, isString } from '../../utils/shared.utils'; import { ParamData, RouteParamsMetadata } from './route-params.decorator'; const assignCustomMetadata = ( @@ -33,18 +34,29 @@ const randomString = () => */ export function createParamDecorator( factory: CustomParamFactory, -): (data?: any, ...pipes: (Type | PipeTransform)[]) => ParameterDecorator { +): (...dataOrPipes: (Type | PipeTransform | string)[]) => ParameterDecorator { const paramtype = randomString() + randomString(); - return (data?, ...pipes: (Type | PipeTransform)[]): ParameterDecorator => ( - target, - key, - index, - ) => { + return ( + data?, + ...pipes: (Type | PipeTransform)[], + ): ParameterDecorator => (target, key, index) => { const args = Reflect.getMetadata(ROUTE_ARGS_METADATA, target.constructor, key) || {}; + + const hasParamData = isNil(data) || isString(data); + const paramData = hasParamData ? data : undefined; + const paramPipes = hasParamData ? pipes : [data, ...pipes]; + Reflect.defineMetadata( ROUTE_ARGS_METADATA, - assignCustomMetadata(args, paramtype, index, factory, data, ...pipes), + assignCustomMetadata( + args, + paramtype, + index, + factory, + paramData, + ...paramPipes as any as PipeTransform[], + ), target.constructor, key, ); @@ -58,7 +70,10 @@ export function createParamDecorator( */ export function createRouteParamDecorator( factory: CustomParamFactory, -): (data?: any, ...pipes: (Type | PipeTransform)[]) => ParameterDecorator { +): ( + data?: any, + ...pipes: (Type | PipeTransform)[], +) => ParameterDecorator { deprecate( 'The "createRouteParamDecorator" function is deprecated and will be removed within next major release. Use "createParamDecorator" instead.', ); diff --git a/packages/common/index.ts b/packages/common/index.ts index 27e0b77ddbc..61f76437d2e 100644 --- a/packages/common/index.ts +++ b/packages/common/index.ts @@ -7,39 +7,39 @@ export * from './decorators'; export * from './enums'; +export * from './exceptions'; +export * from './http'; +export * from './interceptors'; export { - NestModule, - INestApplication, - INestMicroservice, - NestMiddleware, - MiddlewareFunction, - MiddlewareConsumer, - OnModuleInit, - ExceptionFilter, - WebSocketAdapter, - PipeTransform, - Paramtype, ArgumentMetadata, - OnModuleDestroy, - ExecutionContext, + ArgumentsHost, CanActivate, - RpcExceptionFilter, - WsExceptionFilter, - NestInterceptor, DynamicModule, - INestApplicationContext, + ExceptionFilter, + ExecutionContext, + ForwardReference, HttpServer, - Provider, - Type, HttpServerFactory, - ArgumentsHost, + INestApplication, + INestApplicationContext, INestExpressApplication, INestFastifyApplication, - ForwardReference, + INestMicroservice, + MiddlewareConsumer, + MiddlewareFunction, + NestInterceptor, + NestMiddleware, + NestModule, + OnModuleDestroy, + OnModuleInit, + Paramtype, + PipeTransform, + Provider, + RpcExceptionFilter, + Type, + WebSocketAdapter, + WsExceptionFilter, } from './interfaces'; -export * from './interceptors'; -export * from './services/logger.service'; export * from './pipes'; +export * from './services/logger.service'; export * from './utils'; -export * from './exceptions'; -export * from './http'; diff --git a/packages/common/interfaces/nest-application-context.interface.ts b/packages/common/interfaces/nest-application-context.interface.ts index 42b4a690387..4874c575030 100644 --- a/packages/common/interfaces/nest-application-context.interface.ts +++ b/packages/common/interfaces/nest-application-context.interface.ts @@ -1,3 +1,4 @@ +import { LoggerService } from './../services/logger.service'; import { Type } from './type.interface'; export interface INestApplicationContext { @@ -18,8 +19,13 @@ export interface INestApplicationContext { /** * Terminates the application - * * @returns {Promise} */ close(): Promise; + + /** + * Sets custom logger service + * @returns {void} + */ + useLogger(logger: LoggerService); } diff --git a/packages/common/pipes/validation.pipe.ts b/packages/common/pipes/validation.pipe.ts index b82380d13f1..a1286499e10 100644 --- a/packages/common/pipes/validation.pipe.ts +++ b/packages/common/pipes/validation.pipe.ts @@ -1,3 +1,4 @@ +import { Optional } from '../decorators'; import { ArgumentMetadata, BadRequestException } from '../index'; import { ValidatorOptions } from '../interfaces/external/validator-options.interface'; import { PipeTransform } from '../interfaces/features/pipe-transform.interface'; @@ -19,7 +20,7 @@ export class ValidationPipe implements PipeTransform { protected isDetailedOutputDisabled: boolean; protected validatorOptions: ValidatorOptions; - constructor(options?: ValidationPipeOptions) { + constructor(@Optional() options?: ValidationPipeOptions) { options = options || {}; const { transform, disableErrorMessages, ...validatorOptions } = options; this.isTransformEnabled = !!transform; diff --git a/packages/common/services/logger.service.ts b/packages/common/services/logger.service.ts index 8e5becabb99..7ea390fae3e 100644 --- a/packages/common/services/logger.service.ts +++ b/packages/common/services/logger.service.ts @@ -1,49 +1,77 @@ import * as clc from 'cli-color'; +import { Injectable, Optional } from '../decorators'; import { NestEnvironment } from '../enums/nest-environment.enum'; -import { Constructor } from '../utils/merge-with-values.util'; +import { isObject } from '../utils/shared.utils'; declare const process; export interface LoggerService { - log(message: string); - error(message: string, trace: string); - warn(message: string); + log(message: any, context?: string); + error(message: any, trace?: string, context?: string); + warn(message: any, context?: string); } +@Injectable() export class Logger implements LoggerService { private static prevTimestamp = null; - private static contextEnv = NestEnvironment.RUN; + private static contextEnvironment = NestEnvironment.RUN; private static logger: typeof Logger | LoggerService = Logger; - private static readonly yellow = clc.xterm(3); constructor( - private readonly context: string, - private readonly isTimeDiffEnabled = false, + @Optional() private readonly context: string, + @Optional() private readonly isTimeDiffEnabled = false, ) {} - log(message: string) { + log(message: any, context?: string) { const { logger } = Logger; + if (logger === this) { + Logger.log(message, context || this.context, this.isTimeDiffEnabled); + return; + } logger && - logger.log.call(logger, message, this.context, this.isTimeDiffEnabled); + logger.log.call( + logger, + message, + context || this.context, + this.isTimeDiffEnabled, + ); } - error(message: string, trace = '') { + error(message: any, trace = '', context?: string) { const { logger } = Logger; + if (logger === this) { + Logger.error( + message, + trace, + context || this.context, + this.isTimeDiffEnabled, + ); + return; + } logger && logger.error.call( logger, message, trace, - this.context, + context || this.context, this.isTimeDiffEnabled, ); } - warn(message: string) { + warn(message: any, context?: string) { const { logger } = Logger; + if (logger === this) { + Logger.warn(message, context || this.context, this.isTimeDiffEnabled); + return; + } logger && - logger.warn.call(logger, message, this.context, this.isTimeDiffEnabled); + logger.warn.call( + logger, + message, + context || this.context, + this.isTimeDiffEnabled, + ); } static overrideLogger(logger: LoggerService | boolean) { @@ -51,15 +79,15 @@ export class Logger implements LoggerService { } static setMode(mode: NestEnvironment) { - this.contextEnv = mode; + this.contextEnvironment = mode; } - static log(message: string, context = '', isTimeDiffEnabled = true) { + static log(message: any, context = '', isTimeDiffEnabled = true) { this.printMessage(message, clc.green, context, isTimeDiffEnabled); } static error( - message: string, + message: any, trace = '', context = '', isTimeDiffEnabled = true, @@ -68,22 +96,26 @@ export class Logger implements LoggerService { this.printStackTrace(trace); } - static warn(message: string, context = '', isTimeDiffEnabled = true) { + static warn(message: any, context = '', isTimeDiffEnabled = true) { this.printMessage(message, clc.yellow, context, isTimeDiffEnabled); } private static printMessage( - message: string, - color: (msg: string) => string, + message: any, + color: (message: string) => string, context: string = '', isTimeDiffEnabled?: boolean, ) { - if (Logger.contextEnv === NestEnvironment.TEST) return; - + if (Logger.contextEnvironment === NestEnvironment.TEST) { + return void 0; + } + const output = + message && isObject(message) ? JSON.stringify(message, null, 2) : message; process.stdout.write(color(`[Nest] ${process.pid} - `)); process.stdout.write(`${new Date(Date.now()).toLocaleString()} `); - process.stdout.write(this.yellow(`[${context}] `)); - process.stdout.write(color(message)); + + context && process.stdout.write(this.yellow(`[${context}] `)); + process.stdout.write(color(output)); this.printTimestamp(isTimeDiffEnabled); process.stdout.write(`\n`); @@ -100,8 +132,9 @@ export class Logger implements LoggerService { } private static printStackTrace(trace: string) { - if (this.contextEnv === NestEnvironment.TEST || !trace) return; - + if (this.contextEnvironment === NestEnvironment.TEST || !trace) { + return void 0; + } process.stdout.write(trace); process.stdout.write(`\n`); } diff --git a/packages/common/test/decorators/catch.decorator.spec.ts b/packages/common/test/decorators/catch.decorator.spec.ts index dec7df0a44f..c586750101e 100644 --- a/packages/common/test/decorators/catch.decorator.spec.ts +++ b/packages/common/test/decorators/catch.decorator.spec.ts @@ -1,10 +1,10 @@ -import 'reflect-metadata'; import { expect } from 'chai'; -import { Catch } from '../../decorators/core/catch.decorator'; +import 'reflect-metadata'; import { FILTER_CATCH_EXCEPTIONS } from '../../constants'; +import { Catch } from '../../decorators/core/catch.decorator'; describe('@Catch', () => { - const exceptions = ['exception', 'exception2']; + const exceptions: any = ['exception', 'exception2']; @Catch(...exceptions) class Test {} diff --git a/packages/common/utils/random-string-generator.util.ts b/packages/common/utils/random-string-generator.util.ts new file mode 100644 index 00000000000..52c5b311698 --- /dev/null +++ b/packages/common/utils/random-string-generator.util.ts @@ -0,0 +1,4 @@ +export const randomStringGenerator = () => + Math.random() + .toString(36) + .substring(2, 32); diff --git a/packages/core/adapters/fastify-adapter.ts b/packages/core/adapters/fastify-adapter.ts index b1aac279d4f..4b30af18c26 100644 --- a/packages/core/adapters/fastify-adapter.ts +++ b/packages/core/adapters/fastify-adapter.ts @@ -137,7 +137,9 @@ export class FastifyAdapter { ): (path: string, callback: Function) => any { return (path: string, callback: Function) => { const re = pathToRegexp(path); - this.instance.use(path, (req, res, next) => { + const normalizedPath = path === '/*' ? '' : path; + + this.instance.use(normalizedPath, (req, res, next) => { if (!re.exec(req.originalUrl + '/')) { return next(); } diff --git a/packages/core/errors/exceptions/undefined-dependency.exception.ts b/packages/core/errors/exceptions/undefined-dependency.exception.ts index 99dac6b2e4e..ac439d08dd5 100644 --- a/packages/core/errors/exceptions/undefined-dependency.exception.ts +++ b/packages/core/errors/exceptions/undefined-dependency.exception.ts @@ -1,8 +1,9 @@ import { RuntimeException } from './runtime.exception'; import { UnknownDependenciesMessage } from '../messages'; +import { InjectorDependencyContext } from '../../injector/injector'; export class UndefinedDependencyException extends RuntimeException { - constructor(type: string, index: number, length: number) { - super(UnknownDependenciesMessage(type, index, length)); + constructor(type: string, undefinedDependencyContext: InjectorDependencyContext) { + super(UnknownDependenciesMessage(type, undefinedDependencyContext)); } } diff --git a/packages/core/errors/exceptions/unknown-dependencies.exception.ts b/packages/core/errors/exceptions/unknown-dependencies.exception.ts index 28b3d438237..ec4dec1388d 100644 --- a/packages/core/errors/exceptions/unknown-dependencies.exception.ts +++ b/packages/core/errors/exceptions/unknown-dependencies.exception.ts @@ -1,8 +1,9 @@ import { RuntimeException } from './runtime.exception'; import { UnknownDependenciesMessage } from '../messages'; +import { InjectorDependencyContext } from '../../injector/injector'; export class UnknownDependenciesException extends RuntimeException { - constructor(type: string, index: number, length: number) { - super(UnknownDependenciesMessage(type, index, length)); + constructor(type: string, unknownDependencyContext: InjectorDependencyContext) { + super(UnknownDependenciesMessage(type, unknownDependencyContext)); } } diff --git a/packages/core/errors/messages.ts b/packages/core/errors/messages.ts index a3c0697fb49..f8026efcb6b 100644 --- a/packages/core/errors/messages.ts +++ b/packages/core/errors/messages.ts @@ -1,14 +1,26 @@ +import { Type } from '@nestjs/common'; +import { InjectorDependencyContext, InjectorDependency } from '../injector/injector'; + +/** + * Returns the name of the dependency + * Tries to get the class name, otherwise the string value + * (= injection token). As fallback it returns '+' + * @param dependency The dependency whichs name shoul get displayed + */ +const getDependencyName = (dependency: InjectorDependency) => + (dependency && (dependency as Type).name) || dependency || '+'; + export const UnknownDependenciesMessage = ( type: string, - index: number, - length: number, + unknownDependencyContext: InjectorDependencyContext, ) => { + const { index, dependencies } = unknownDependencyContext; let message = `Nest can't resolve dependencies of the ${type}`; message += ` (`; - const args = new Array(length).fill('+'); - args[index] = '?'; - message += args.join(', '); + const dependenciesName = dependencies.map(getDependencyName); + dependenciesName[index] = '?'; + message += dependenciesName.join(', '); message += `). Please make sure that the argument at index [${index}] is available in the current context.`; return message; diff --git a/packages/core/injector/injector.ts b/packages/core/injector/injector.ts index 07dd8dfba5d..46d5f2e57ed 100644 --- a/packages/core/injector/injector.ts +++ b/packages/core/injector/injector.ts @@ -1,4 +1,4 @@ -import { PARAMTYPES_METADATA, SELF_DECLARED_DEPS_METADATA } from '@nestjs/common/constants'; +import { OPTIONAL_DEPS_METADATA, PARAMTYPES_METADATA, SELF_DECLARED_DEPS_METADATA } from '@nestjs/common/constants'; import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface'; import { Injectable } from '@nestjs/common/interfaces/injectable.interface'; import { Type } from '@nestjs/common/interfaces/type.interface'; @@ -11,6 +11,31 @@ import { MiddlewareWrapper } from '../middleware/container'; import { InstanceWrapper } from './container'; import { Module } from './module'; +/** + * The type of an injectable dependency + */ +export type InjectorDependency = Type | Function | string; + +/** + * Context of a dependency which gets injected by + * the injector + */ +export interface InjectorDependencyContext { + /** + * The name of the function or injection token + */ + name?: string; + /** + * The index of the dependency which gets injected + * from the dependencies array + */ + index: number; + /** + * The dependency array which gets injected + */ + dependencies: InjectorDependency[]; +} + export class Injector { public async loadInstanceOfMiddleware( wrapper: MiddlewareWrapper, @@ -74,7 +99,7 @@ export class Injector { await this.loadInstance(wrapper, components, module); } - public applyDoneSubject(wrapper: InstanceWrapper): () => void { + public applyDoneHook(wrapper: InstanceWrapper): () => void { let done: () => void; wrapper.done$ = new Promise((resolve, reject) => { done = resolve; @@ -91,13 +116,15 @@ export class Injector { if (wrapper.isPending) { return await wrapper.done$; } - const done = this.applyDoneSubject(wrapper); + const done = this.applyDoneHook(wrapper); const { metatype, name, inject } = wrapper; const currentMetatype = collection.get(name); if (isUndefined(currentMetatype)) { throw new RuntimeException(); } - if (currentMetatype.isResolved) return null; + if (currentMetatype.isResolved) { + return void 0; + } await this.resolveConstructorParams( wrapper, @@ -124,26 +151,38 @@ export class Injector { public async resolveConstructorParams( wrapper: InstanceWrapper, module: Module, - inject: any[], + inject: InjectorDependency[], callback: (args) => void, ) { let isResolved = true; - const args = isNil(inject) + + const dependencies = isNil(inject) ? this.reflectConstructorParams(wrapper.metatype) : inject; + const optionalDependenciesIds = isNil(inject) + ? this.reflectOptionalParams(wrapper.metatype) + : []; const instances = await Promise.all( - args.map(async (param, index) => { - const paramWrapper = await this.resolveSingleParam( - wrapper, - param, - { index, length: args.length }, - module, - ); - if (!paramWrapper.isResolved && !paramWrapper.forwardRef) { - isResolved = false; + dependencies.map(async (param, index) => { + try { + const paramWrapper = await this.resolveSingleParam( + wrapper, + param, + { index, dependencies }, + module, + ); + if (!paramWrapper.isResolved && !paramWrapper.forwardRef) { + isResolved = false; + } + return paramWrapper.instance; + } catch (err) { + const isOptional = optionalDependenciesIds.includes(index); + if (!isOptional) { + throw err; + } + return null; } - return paramWrapper.instance; }), ); isResolved && (await callback(instances)); @@ -157,6 +196,10 @@ export class Injector { return paramtypes; } + public reflectOptionalParams(type: Type): any[] { + return Reflect.getMetadata(OPTIONAL_DEPS_METADATA, type) || []; + } + public reflectSelfParams(type: Type): any[] { return Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, type) || []; } @@ -164,17 +207,17 @@ export class Injector { public async resolveSingleParam( wrapper: InstanceWrapper, param: Type | string | symbol | any, - { index, length }: { index: number; length: number }, + dependencyContext: InjectorDependencyContext, module: Module, ) { if (isUndefined(param)) { - throw new UndefinedDependencyException(wrapper.name, index, length); + throw new UndefinedDependencyException(wrapper.name, dependencyContext); } const token = this.resolveParamToken(wrapper, param); return await this.resolveComponentInstance( module, isFunction(token) ? (token as Type).name : token, - { index, length }, + dependencyContext, wrapper, ); } @@ -193,14 +236,14 @@ export class Injector { public async resolveComponentInstance( module: Module, name: any, - { index, length }: { index: number; length: number }, + dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper, ) { const components = module.components; const instanceWrapper = await this.lookupComponent( components, module, - { name, index, length }, + { name, ...dependencyContext }, wrapper, ); if (!instanceWrapper.isResolved && !instanceWrapper.forwardRef) { @@ -215,13 +258,14 @@ export class Injector { public async lookupComponent( components: Map, module: Module, - { name, index, length }: { name: any; index: number; length: number }, + dependencyContext: InjectorDependencyContext, wrapper: InstanceWrapper, ) { + const { name } = dependencyContext; const scanInExports = () => this.lookupComponentInExports( components, - { name, index, length }, + dependencyContext, module, wrapper, ); @@ -230,16 +274,16 @@ export class Injector { public async lookupComponentInExports( components: Map, - { name, index, length }: { name: any; index: number; length: number }, + dependencyContext: InjectorDependencyContext, module: Module, wrapper: InstanceWrapper, ) { const instanceWrapper = await this.lookupComponentInRelatedModules( module, - name, + dependencyContext.name, ); if (isNil(instanceWrapper)) { - throw new UnknownDependenciesException(wrapper.name, index, length); + throw new UnknownDependenciesException(wrapper.name, dependencyContext); } return instanceWrapper; } diff --git a/packages/core/injector/module.ts b/packages/core/injector/module.ts index 22090911d20..7dc358760c8 100644 --- a/packages/core/injector/module.ts +++ b/packages/core/injector/module.ts @@ -1,6 +1,17 @@ -import { Controller, DynamicModule, Injectable, NestModule } from '@nestjs/common/interfaces'; +import { + Controller, + DynamicModule, + Injectable, + NestModule, +} from '@nestjs/common/interfaces'; import { Type } from '@nestjs/common/interfaces/type.interface'; -import { isFunction, isNil, isString, isSymbol, isUndefined } from '@nestjs/common/utils/shared.utils'; +import { + isFunction, + isNil, + isString, + isSymbol, + isUndefined, +} from '@nestjs/common/utils/shared.utils'; import { RuntimeException } from '../errors/exceptions/runtime.exception'; import { UnknownExportException } from '../errors/exceptions/unknown-export.exception'; import { GuardsConsumer } from '../guards/guards-consumer'; @@ -83,8 +94,8 @@ export class Module { } public addCoreInjectables(container: NestContainer) { - this.addModuleRef(); this.addModuleAsComponent(); + this.addModuleRef(); this.addReflector(); this.addApplicationRef(container.getApplicationRef()); this.addExternalContextCreator(container); diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index f313fd5dd7a..b2f4e7b18b5 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -1,5 +1,7 @@ import { INestApplicationContext, + Logger, + LoggerService, OnModuleDestroy, OnModuleInit, } from '@nestjs/common'; @@ -64,24 +66,34 @@ export class NestApplicationContext extends ModuleRef await this.callDestroyHook(); } + public useLogger(logger: LoggerService) { + Logger.overrideLogger(logger); + } + protected async callInitHook(): Promise { - const modules = this.container.getModules(); - await Promise.all( - iterate(modules.values()).map( - async module => await this.callModuleInitHook(module), - ), - ); + const modulesContainer = this.container.getModules(); + for (const module of [...modulesContainer.values()].reverse()) { + await this.callModuleInitHook(module); + } } protected async callModuleInitHook(module: Module): Promise { - const components = [...module.routes, ...module.components]; + const components = [...module.components]; + // The Module (class) instance is the first element of the components array + // Lifecycle hook has to be called once all classes are properly initialized + const [_, { instance: moduleClassInstance }] = components.shift(); + const instances = [...module.routes, ...components]; + await Promise.all( - iterate(components) + iterate(instances) .map(([key, { instance }]) => instance) .filter(instance => !isNil(instance)) .filter(this.hasOnModuleInitHook) .map(async instance => await (instance as OnModuleInit).onModuleInit()), ); + if (moduleClassInstance && this.hasOnModuleInitHook(moduleClassInstance)) { + await (moduleClassInstance as OnModuleInit).onModuleInit(); + } } protected hasOnModuleInitHook(instance: any): instance is OnModuleInit { @@ -89,18 +101,21 @@ export class NestApplicationContext extends ModuleRef } protected async callDestroyHook(): Promise { - const modules = this.container.getModules(); - await Promise.all( - iterate(modules.values()).map( - async module => await this.callModuleDestroyHook(module), - ), - ); + const modulesContainer = this.container.getModules(); + for (const module of modulesContainer.values()) { + await this.callModuleDestroyHook(module); + } } protected async callModuleDestroyHook(module: Module): Promise { - const components = [...module.routes, ...module.components]; + const components = [...module.components]; + // The Module (class) instance is the first element of the components array + // Lifecycle hook has to be called once all classes are properly destroyed + const [_, { instance: moduleClassInstance }] = components.shift(); + const instances = [...module.routes, ...components]; + await Promise.all( - iterate(components) + iterate(instances) .map(([key, { instance }]) => instance) .filter(instance => !isNil(instance)) .filter(this.hasOnModuleDestroyHook) @@ -109,6 +124,12 @@ export class NestApplicationContext extends ModuleRef await (instance as OnModuleDestroy).onModuleDestroy(), ), ); + if ( + moduleClassInstance && + this.hasOnModuleDestroyHook(moduleClassInstance) + ) { + await (moduleClassInstance as OnModuleDestroy).onModuleDestroy(); + } } protected hasOnModuleDestroyHook(instance): instance is OnModuleDestroy { diff --git a/packages/core/nest-factory.ts b/packages/core/nest-factory.ts index ebc1af35e49..c7fdaa9615e 100644 --- a/packages/core/nest-factory.ts +++ b/packages/core/nest-factory.ts @@ -34,10 +34,7 @@ export class NestFactoryStatic { */ public async create( module: any, - ): Promise; - public async create( - module: any, - options: NestApplicationOptions, + options?: NestApplicationOptions, ): Promise; public async create( module: any, @@ -46,12 +43,7 @@ export class NestFactoryStatic { ): Promise; public async create( module: any, - httpServer: HttpServer, - options?: NestApplicationOptions, - ): Promise; - public async create( - module: any, - httpServer: any, + httpServer: HttpServer | any, options?: NestApplicationOptions, ): Promise; public async create( @@ -183,7 +175,7 @@ export class NestFactoryStatic { } private applyLogger(options: NestApplicationContextOptions | undefined) { - if (!options || !options.logger) { + if (!options) { return; } Logger.overrideLogger(options.logger); diff --git a/packages/core/router/router-explorer.ts b/packages/core/router/router-explorer.ts index ad5a291541d..4806ff6f316 100644 --- a/packages/core/router/router-explorer.ts +++ b/packages/core/router/router-explorer.ts @@ -22,6 +22,13 @@ import { RouteParamsFactory } from './route-params-factory'; import { RouterExecutionContext } from './router-execution-context'; import { RouterProxy, RouterProxyCallback } from './router-proxy'; +export interface RoutePathProperties { + path: string; + requestMethod: RequestMethod; + targetCallback: RouterProxyCallback; + methodName: string; +} + export class RouterExplorer { private readonly executionContextCreator: RouterExecutionContext; private readonly routerMethodFactory = new RouterMethodFactory(); @@ -180,10 +187,3 @@ export class RouterExplorer { return this.routerProxy.createProxy(executionContext, exceptionFilter); } } - -export interface RoutePathProperties { - path: string; - requestMethod: RequestMethod; - targetCallback: RouterProxyCallback; - methodName: string; -} diff --git a/packages/core/scanner.ts b/packages/core/scanner.ts index 26bc1c42087..f0eba95f89a 100644 --- a/packages/core/scanner.ts +++ b/packages/core/scanner.ts @@ -11,6 +11,7 @@ import { import { Controller } from '@nestjs/common/interfaces/controllers/controller.interface'; import { Injectable } from '@nestjs/common/interfaces/injectable.interface'; import { Type } from '@nestjs/common/interfaces/type.interface'; +import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util'; import { isFunction, isNil, @@ -49,7 +50,13 @@ export class DependenciesScanner { ) { await this.storeModule(module, scope); - const modules = this.reflectMetadata(module, metadata.MODULES); + const modules = !this.isDynamicModule(module) + ? this.reflectMetadata(module, metadata.MODULES) + : [ + ...this.reflectMetadata(module.module, metadata.MODULES), + ...(module.imports || []), + ]; + for (const innerModule of modules) { await this.scanForModules(innerModule, [].concat(scope, module)); } @@ -248,13 +255,11 @@ export class DependenciesScanner { const applyProvidersMap = this.getApplyProvidersMap(); const providersKeys = Object.keys(applyProvidersMap); const type = component.provide; + if (providersKeys.indexOf(type) < 0) { return this.container.addComponent(component, token); } - const providerToken = Math.random() - .toString(36) - .substring(2, 32); - + const providerToken = randomStringGenerator(); this.applicationProvidersApplyMap.push({ type, moduleKey: token, @@ -310,4 +315,10 @@ export class DependenciesScanner { [APP_FILTER]: filter => this.applicationConfig.addGlobalFilter(filter), }; } + + public isDynamicModule( + module: Type | DynamicModule, + ): module is DynamicModule { + return module && !!(module as DynamicModule).module; + } } diff --git a/packages/core/test/errors/test/messages.spec.ts b/packages/core/test/errors/test/messages.spec.ts new file mode 100644 index 00000000000..872d2df574d --- /dev/null +++ b/packages/core/test/errors/test/messages.spec.ts @@ -0,0 +1,32 @@ +import { expect } from 'chai'; +import { UnknownDependenciesException } from '../../../errors/exceptions/unknown-dependencies.exception'; + +describe('UnknownDependenciesMessage', () => { + const index = 0; + it('should display class', () => { + class CatService { } + const expectedResult = + 'Nest can\'t resolve dependencies of the CatService (?, CatService). ' + + 'Please make sure that the argument at index [0] is available in the current context.'; + expect(new UnknownDependenciesException('CatService', { index, dependencies: ['', CatService] }).message).to.equal(expectedResult); + }); + it('should display the provide token', () => { + const expectedResult = + 'Nest can\'t resolve dependencies of the CatService (?, MY_TOKEN). ' + + 'Please make sure that the argument at index [0] is available in the current context.'; + expect(new UnknownDependenciesException('CatService', { index, dependencies: ['', 'MY_TOKEN'] }).message).to.equal(expectedResult); + }); + it('should display the function name', () => { + function CatFunction() { } + const expectedResult = + 'Nest can\'t resolve dependencies of the CatService (?, CatFunction). ' + + 'Please make sure that the argument at index [0] is available in the current context.'; + expect(new UnknownDependenciesException('CatService', { index, dependencies: ['', CatFunction] }).message).to.equal(expectedResult); + }); + it('should use "+" if unknown dependency name', () => { + const expectedResult = + 'Nest can\'t resolve dependencies of the CatService (?, +). ' + + 'Please make sure that the argument at index [0] is available in the current context.'; + expect(new UnknownDependenciesException('CatService', { index, dependencies: ['', undefined] }).message).to.equal(expectedResult); + }); +}); diff --git a/packages/core/test/injector/injector.spec.ts b/packages/core/test/injector/injector.spec.ts index 74e1fdd528a..43263601bf3 100644 --- a/packages/core/test/injector/injector.spec.ts +++ b/packages/core/test/injector/injector.spec.ts @@ -101,7 +101,7 @@ describe('Injector', () => { expect(result).to.be.eql(value); }); - it('should return null when metatype is resolved', async () => { + it('should return undefined when metatype is resolved', async () => { const value = 'test'; const result = await injector.loadInstance( { @@ -113,7 +113,7 @@ describe('Injector', () => { moduleDeps.components, moduleDeps, ); - expect(result).to.be.null; + expect(result).to.be.undefined; }); }); @@ -174,7 +174,7 @@ describe('Injector', () => { injector.resolveSingleParam( null, undefined, - { index: 0, length: 5 }, + { index: 0, dependencies: [] }, null, ), ).to.eventually.be.rejected; @@ -296,7 +296,7 @@ describe('Injector', () => { const result = await injector.lookupComponent( collection as any, null, - { name: metatype.name, index: 0, length: 10 }, + { name: metatype.name, index: 0, dependencies: [] }, wrapper, ); expect(result).to.be.equal(instance); @@ -310,7 +310,7 @@ describe('Injector', () => { await injector.lookupComponent( collection as any, null, - { name: metatype.name, index: 0, length: 10 }, + { name: metatype.name, index: 0, dependencies: [] }, wrapper, ); expect(lookupComponentInRelatedModules.called).to.be.true; @@ -326,7 +326,7 @@ describe('Injector', () => { injector.lookupComponent( collection as any, module as any, - { name: metatype.name, index: 0, length: 10 }, + { name: metatype.name, index: 0, dependencies: [] }, wrapper, ), ).to.eventually.be.rejected; @@ -342,7 +342,7 @@ describe('Injector', () => { injector.lookupComponent( collection as any, module as any, - { name: metatype.name, index: 0, length: 10 }, + { name: metatype.name, index: 0, dependencies: [] }, wrapper, ), ).to.eventually.be.not.rejected; @@ -416,7 +416,7 @@ describe('Injector', () => { }); it('should call "loadInstanceOfComponent" when component is not resolved', async () => { - let module = { + const module = { relatedModules: new Map([ [ 'key', @@ -443,7 +443,7 @@ describe('Injector', () => { }); it('should not call "loadInstanceOfComponent" when component is resolved', async () => { - let module = { + const module = { relatedModules: new Map([ [ 'key', @@ -527,7 +527,7 @@ describe('Injector', () => { await injector.resolveComponentInstance( module, '', - { index: 0, length: 10 }, + { index: 0, dependencies: [] }, {} as any, ); expect(loadStub.called).to.be.true; @@ -541,7 +541,7 @@ describe('Injector', () => { await injector.resolveComponentInstance( module, '', - { index: 0, length: 10 }, + { index: 0, dependencies: [] }, {} as any, ); expect(loadStub.called).to.be.false; @@ -557,7 +557,7 @@ describe('Injector', () => { await injector.resolveComponentInstance( module, '', - { index: 0, length: 10 }, + { index: 0, dependencies: [] }, {} as any, ); expect(loadStub.called).to.be.false; @@ -580,7 +580,7 @@ describe('Injector', () => { const result = await injector.resolveComponentInstance( module, '', - { index: 0, length: 10 }, + { index: 0, dependencies: [] }, {} as any, ); expect(result.instance).to.be.true; diff --git a/packages/microservices/client/client-mqtt.ts b/packages/microservices/client/client-mqtt.ts index 4f39ea18435..d5a0a25fa60 100644 --- a/packages/microservices/client/client-mqtt.ts +++ b/packages/microservices/client/client-mqtt.ts @@ -85,7 +85,7 @@ export class ClientMqtt extends ClientProxy { ): Function { try { const packet = this.assignPacketId(partialPacket); - const pattern = JSON.stringify(partialPacket.pattern); + const pattern = this.normalizePattern(partialPacket.pattern); const responseChannel = this.getResPatternName(pattern); const responseCallback = this.createResponseCallback(packet, callback); diff --git a/packages/microservices/client/client-nats.ts b/packages/microservices/client/client-nats.ts index 90eb2d77fee..32acf02042c 100644 --- a/packages/microservices/client/client-nats.ts +++ b/packages/microservices/client/client-nats.ts @@ -21,14 +21,6 @@ export class ClientNats extends ClientProxy { natsPackage = loadPackage('nats', ClientNats.name); } - public getAckPatternName(pattern: string): string { - return `${pattern}_ack`; - } - - public getResPatternName(pattern: string): string { - return `${pattern}_res`; - } - public close() { this.natsClient && this.natsClient.close(); this.natsClient = null; @@ -81,21 +73,24 @@ export class ClientNats extends ClientProxy { }); }; } + protected publish( partialPacket: ReadPacket, callback: (packet: WritePacket) => any, ): Function { try { const packet = this.assignPacketId(partialPacket); - const pattern = JSON.stringify(partialPacket.pattern); - const responseChannel = this.getResPatternName(pattern); + const channel = this.normalizePattern(partialPacket.pattern); - const subscriptionHandler = this.createSubscriptionHandler(packet, callback); - const subscriptionId = this.natsClient.subscribe( - responseChannel, + const subscriptionHandler = this.createSubscriptionHandler( + packet, + callback, + ); + const subscriptionId = this.natsClient.request( + channel, + packet as any, subscriptionHandler, ); - this.natsClient.publish(this.getAckPatternName(pattern), packet as any); return () => this.natsClient.unsubscribe(subscriptionId); } catch (err) { callback({ err }); diff --git a/packages/microservices/client/client-proxy.ts b/packages/microservices/client/client-proxy.ts index 19bcd73ef08..991324256b0 100644 --- a/packages/microservices/client/client-proxy.ts +++ b/packages/microservices/client/client-proxy.ts @@ -1,9 +1,21 @@ -import { isNil } from '@nestjs/common/utils/shared.utils'; -import { defer, fromEvent, merge, Observable, Observer, throwError as _throw } from 'rxjs'; +import { isNil, isString } from '@nestjs/common/utils/shared.utils'; +import { + defer, + fromEvent, + merge, + Observable, + Observer, + throwError as _throw, +} from 'rxjs'; import { map, mergeMap, take } from 'rxjs/operators'; import { CONNECT_EVENT, ERROR_EVENT } from '../constants'; import { InvalidMessageException } from '../exceptions/errors/invalid-message.exception'; -import { ClientOptions, PacketId, ReadPacket, WritePacket } from '../interfaces'; +import { + ClientOptions, + PacketId, + ReadPacket, + WritePacket, +} from '../interfaces'; export abstract class ClientProxy { public abstract connect(): Promise; @@ -74,4 +86,8 @@ export abstract class ClientProxy { ) { return obj && obj.options ? obj.options[prop as any] : defaultValue; } + + protected normalizePattern(pattern: T): string { + return pattern && isString(pattern) ? pattern : JSON.stringify(pattern); + } } diff --git a/packages/microservices/client/client-redis.ts b/packages/microservices/client/client-redis.ts index 35aa388f6f9..8f8b53d1dc8 100644 --- a/packages/microservices/client/client-redis.ts +++ b/packages/microservices/client/client-redis.ts @@ -2,8 +2,18 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { fromEvent, merge, Subject, zip } from 'rxjs'; import { take } from 'rxjs/operators'; -import { CONNECT_EVENT, ERROR_EVENT, MESSAGE_EVENT, REDIS_DEFAULT_URL, SUBSCRIBE } from '../constants'; -import { ClientOpts, RedisClient, RetryStrategyOptions } from '../external/redis.interface'; +import { + CONNECT_EVENT, + ERROR_EVENT, + MESSAGE_EVENT, + REDIS_DEFAULT_URL, + SUBSCRIBE, +} from '../constants'; +import { + ClientOpts, + RedisClient, + RetryStrategyOptions, +} from '../external/redis.interface'; import { PacketId, ReadPacket, RedisOptions, WritePacket } from '../interfaces'; import { ClientOptions } from '../interfaces/client-metadata.interface'; import { ClientProxy } from './client-proxy'; @@ -129,7 +139,7 @@ export class ClientRedis extends ClientProxy { ): Function { try { const packet = this.assignPacketId(partialPacket); - const pattern = JSON.stringify(partialPacket.pattern); + const pattern = this.normalizePattern(partialPacket.pattern); const responseChannel = this.getResPatternName(pattern); const responseCallback = this.createResponseCallback(packet, callback); @@ -152,8 +162,7 @@ export class ClientRedis extends ClientProxy { this.subClient.unsubscribe(responseChannel); this.subClient.removeListener(MESSAGE_EVENT, responseCallback); }; - } - catch (err) { + } catch (err) { callback({ err }); } } diff --git a/packages/microservices/server/server-nats.ts b/packages/microservices/server/server-nats.ts index 6e2a607449c..80795731431 100644 --- a/packages/microservices/server/server-nats.ts +++ b/packages/microservices/server/server-nats.ts @@ -1,8 +1,16 @@ import { Observable } from 'rxjs'; -import { CONNECT_EVENT, ERROR_EVENT, NATS_DEFAULT_URL, NO_PATTERN_MESSAGE } from '../constants'; +import { + CONNECT_EVENT, + ERROR_EVENT, + NATS_DEFAULT_URL, + NO_PATTERN_MESSAGE, +} from '../constants'; import { Client } from '../external/nats-client.interface'; import { CustomTransportStrategy, PacketId } from '../interfaces'; -import { MicroserviceOptions, NatsOptions } from '../interfaces/microservice-configuration.interface'; +import { + MicroserviceOptions, + NatsOptions, +} from '../interfaces/microservice-configuration.interface'; import { ReadPacket } from '../interfaces/packet.interface'; import { Server } from './server'; @@ -33,8 +41,7 @@ export class ServerNats extends Server implements CustomTransportStrategy { public bindEvents(client: Client) { const registeredPatterns = Object.keys(this.messageHandlers); - registeredPatterns.forEach(pattern => { - const channel = this.getAckQueueName(pattern); + registeredPatterns.forEach(channel => { client.subscribe( channel, this.getMessageHandler(channel, client).bind(this), @@ -57,43 +64,36 @@ export class ServerNats extends Server implements CustomTransportStrategy { } public getMessageHandler(channel: string, client: Client) { - return async buffer => await this.handleMessage(channel, buffer, client); + return async (buffer, replyTo: string) => + await this.handleMessage(channel, buffer, client, replyTo); } public async handleMessage( channel: string, message: ReadPacket & PacketId, client: Client, + replyTo: string, ) { - const pattern = channel.replace(/_ack$/, ''); - const publish = this.getPublisher(client, pattern, message.id); + const publish = this.getPublisher(client, replyTo, message.id); const status = 'error'; - if (!this.messageHandlers[pattern]) { + if (!this.messageHandlers[channel]) { return publish({ id: message.id, status, err: NO_PATTERN_MESSAGE }); } - const handler = this.messageHandlers[pattern]; + const handler = this.messageHandlers[channel]; const response$ = this.transformToObservable( await handler(message.data), ) as Observable; response$ && this.send(response$, publish); } - public getPublisher(publisher: Client, pattern: any, id: string) { + public getPublisher(publisher: Client, replyTo: string, id: string) { return response => - publisher.publish(this.getResQueueName(pattern), Object.assign(response, { + publisher.publish(replyTo, Object.assign(response, { id, }) as any); } - public getAckQueueName(pattern: string): string { - return `${pattern}_ack`; - } - - public getResQueueName(pattern: string): string { - return `${pattern}_res`; - } - public handleError(stream) { stream.on(ERROR_EVENT, err => this.logger.error(err)); } diff --git a/packages/microservices/server/server.ts b/packages/microservices/server/server.ts index 9e5a1269957..c495732672c 100644 --- a/packages/microservices/server/server.ts +++ b/packages/microservices/server/server.ts @@ -1,7 +1,13 @@ import { Logger } from '@nestjs/common/services/logger.service'; import { loadPackage } from '@nestjs/common/utils/load-package.util'; import { isFunction, isString } from '@nestjs/common/utils/shared.utils'; -import { EMPTY as empty, from as fromPromise, Observable, of, Subscription } from 'rxjs'; +import { + EMPTY as empty, + from as fromPromise, + Observable, + of, + Subscription, +} from 'rxjs'; import { catchError, finalize } from 'rxjs/operators'; import { MicroserviceOptions, WritePacket } from '../interfaces'; import { MessageHandlers } from '../interfaces/message-handlers.interface'; diff --git a/packages/microservices/test/client/client-mqtt.spec.ts b/packages/microservices/test/client/client-mqtt.spec.ts index fbb791cfec4..eec26eef152 100644 --- a/packages/microservices/test/client/client-mqtt.spec.ts +++ b/packages/microservices/test/client/client-mqtt.spec.ts @@ -54,12 +54,12 @@ describe('ClientMqtt', () => { }); it('should subscribe to response pattern name', async () => { await client['publish'](msg, () => {}); - expect(subscribeSpy.calledWith(`"${pattern}"_res`)).to.be.true; + expect(subscribeSpy.calledWith(`${pattern}_res`)).to.be.true; }); it('should publish stringified message to acknowledge pattern name', async () => { await client['publish'](msg, () => {}); - expect(publishSpy.calledWith(`"${pattern}"_ack`, JSON.stringify(msg))).to - .be.true; + expect(publishSpy.calledWith(`${pattern}_ack`, JSON.stringify(msg))).to.be + .true; }); it('should listen on messages', async () => { await client['publish'](msg, () => {}); @@ -68,9 +68,11 @@ describe('ClientMqtt', () => { describe('on error', () => { let assignPacketIdStub: sinon.SinonStub; beforeEach(() => { - assignPacketIdStub = sinon.stub(client, 'assignPacketId').callsFake(() => { - throw new Error(); - }); + assignPacketIdStub = sinon + .stub(client, 'assignPacketId') + .callsFake(() => { + throw new Error(); + }); }); afterEach(() => { assignPacketIdStub.restore(); @@ -146,10 +148,15 @@ describe('ClientMqtt', () => { beforeEach(async () => { callback = sinon.spy(); subscription = client.createResponseCallback(msg, callback); - subscription('channel', new Buffer(JSON.stringify({ - ...responseMessage, - isDisposed: true, - }))); + subscription( + 'channel', + new Buffer( + JSON.stringify({ + ...responseMessage, + isDisposed: true, + }), + ), + ); }); it('should call callback with dispose param', () => { @@ -166,10 +173,13 @@ describe('ClientMqtt', () => { describe('disposed and "id" is incorrect', () => { beforeEach(async () => { callback = sinon.spy(); - subscription = client.createResponseCallback({ - ...msg, - id: '2', - }, callback); + subscription = client.createResponseCallback( + { + ...msg, + id: '2', + }, + callback, + ); subscription('channel', new Buffer(JSON.stringify(responseMessage))); }); diff --git a/packages/microservices/test/client/client-nats.spec.ts b/packages/microservices/test/client/client-nats.spec.ts index 883f376935a..59cbc1a066e 100644 --- a/packages/microservices/test/client/client-nats.spec.ts +++ b/packages/microservices/test/client/client-nats.spec.ts @@ -5,21 +5,8 @@ import { ERROR_EVENT } from '../../constants'; // tslint:disable:no-string-literal describe('ClientNats', () => { - const test = 'test'; const client = new ClientNats({}); - describe('getAckPatternName', () => { - it(`should append _ack to string`, () => { - const expectedResult = test + '_ack'; - expect(client.getAckPatternName(test)).to.equal(expectedResult); - }); - }); - describe('getResPatternName', () => { - it(`should append _res to string`, () => { - const expectedResult = test + '_res'; - expect(client.getResPatternName(test)).to.equal(expectedResult); - }); - }); describe('publish', () => { const pattern = 'test'; const msg = { pattern, data: 'data' }; @@ -30,6 +17,7 @@ describe('ClientNats', () => { publishSpy: sinon.SinonSpy, onSpy: sinon.SinonSpy, removeListenerSpy: sinon.SinonSpy, + requestSpy: sinon.SinonSpy, unsubscribeSpy: sinon.SinonSpy, connectSpy: sinon.SinonStub, natsClient, @@ -41,6 +29,7 @@ describe('ClientNats', () => { onSpy = sinon.spy(); removeListenerSpy = sinon.spy(); unsubscribeSpy = sinon.spy(); + requestSpy = sinon.spy(() => subscriptionId); natsClient = { subscribe: subscribeSpy, @@ -49,6 +38,7 @@ describe('ClientNats', () => { unsubscribe: unsubscribeSpy, addListener: () => ({}), publish: publishSpy, + request: requestSpy, }; (client as any).natsClient = natsClient; @@ -61,20 +51,18 @@ describe('ClientNats', () => { connectSpy.restore(); createClient.restore(); }); - it('should subscribe to response pattern name', async () => { + it('should publish stringified message to pattern name', async () => { await client['publish'](msg, () => {}); - expect(subscribeSpy.calledWith(`"${pattern}"_res`)).to.be.true; - }); - it('should publish stringified message to acknowledge pattern name', async () => { - await client['publish'](msg, () => {}); - expect(publishSpy.getCall(0).args[0]).to.be.eql(`"${pattern}"_ack`); + expect(requestSpy.getCall(0).args[0]).to.be.eql(pattern); }); describe('on error', () => { let assignPacketIdStub: sinon.SinonStub; beforeEach(() => { - assignPacketIdStub = sinon.stub(client, 'assignPacketId').callsFake(() => { - throw new Error(); - }); + assignPacketIdStub = sinon + .stub(client, 'assignPacketId') + .callsFake(() => { + throw new Error(); + }); }); afterEach(() => { assignPacketIdStub.restore(); diff --git a/packages/microservices/test/client/client-redis.spec.ts b/packages/microservices/test/client/client-redis.spec.ts index ace7e3e37b6..03cfc4f4ca3 100644 --- a/packages/microservices/test/client/client-redis.spec.ts +++ b/packages/microservices/test/client/client-redis.spec.ts @@ -57,12 +57,12 @@ describe('ClientRedis', () => { }); it('should subscribe to response pattern name', () => { client['publish'](msg, () => {}); - expect(subscribeSpy.calledWith(`"${pattern}"_res`)).to.be.true; + expect(subscribeSpy.calledWith(`${pattern}_res`)).to.be.true; }); it('should publish stringified message to acknowledge pattern name', async () => { await client['publish'](msg, () => {}); - expect(publishSpy.calledWith(`"${pattern}"_ack`, JSON.stringify(msg))).to - .be.true; + expect(publishSpy.calledWith(`${pattern}_ack`, JSON.stringify(msg))).to.be + .true; }); it('should listen on messages', () => { client['publish'](msg, () => {}); @@ -71,9 +71,11 @@ describe('ClientRedis', () => { describe('on error', () => { let assignPacketIdStub: sinon.SinonStub; beforeEach(() => { - assignPacketIdStub = sinon.stub(client, 'assignPacketId').callsFake(() => { - throw new Error(); - }); + assignPacketIdStub = sinon + .stub(client, 'assignPacketId') + .callsFake(() => { + throw new Error(); + }); }); afterEach(() => { assignPacketIdStub.restore(); diff --git a/packages/microservices/test/server/server-nats.spec.ts b/packages/microservices/test/server/server-nats.spec.ts index a440977e761..3077b98236d 100644 --- a/packages/microservices/test/server/server-nats.spec.ts +++ b/packages/microservices/test/server/server-nats.spec.ts @@ -1,8 +1,7 @@ -import * as sinon from 'sinon'; import { expect } from 'chai'; +import * as sinon from 'sinon'; import { NO_PATTERN_MESSAGE } from '../../constants'; import { ServerNats } from '../../server/server-nats'; -import { Observable } from 'rxjs'; describe('ServerNats', () => { let server: ServerNats; @@ -60,9 +59,7 @@ describe('ServerNats', () => { [pattern]: handler, }; server.bindEvents(natsClient); - - const expectedPattern = 'test_ack'; - expect(subscribeSpy.calledWith(expectedPattern)).to.be.true; + expect(subscribeSpy.calledWith(pattern)).to.be.true; }); }); describe('getMessageHandler', () => { @@ -76,7 +73,10 @@ describe('ServerNats', () => { const handleMessageStub = sinon .stub(server, 'handleMessage') .callsFake(() => null); - (await server.getMessageHandler('', (server as any).natsClient))(''); + (await server.getMessageHandler('', (server as any).natsClient))( + '', + '', + ); expect(handleMessageStub.called).to.be.true; }); }); @@ -93,7 +93,7 @@ describe('ServerNats', () => { sinon.stub(server, 'getPublisher').callsFake(() => getPublisherSpy); }); it(`should publish NO_PATTERN_MESSAGE if pattern not exists in messageHandlers object`, () => { - server.handleMessage(channel, { id, pattern: '', data: '' }, null); + server.handleMessage(channel, { id, pattern: '', data: '' }, null, ''); expect( getPublisherSpy.calledWith({ id, @@ -108,7 +108,7 @@ describe('ServerNats', () => { [channel]: handler, }; - server.handleMessage(channel, { pattern: '', data, id: '2' }, null); + server.handleMessage(channel, { pattern: '', data, id: '2' }, null, ''); expect(handler.calledWith(data)).to.be.true; }); }); @@ -117,14 +117,14 @@ describe('ServerNats', () => { let pub, publisher; const id = '1'; - const pattern = 'test'; + const replyTo = 'test'; beforeEach(() => { publisherSpy = sinon.spy(); pub = { publish: publisherSpy, }; - publisher = server.getPublisher(pub, pattern, id); + publisher = server.getPublisher(pub, replyTo, id); }); it(`should return function`, () => { expect(typeof server.getPublisher(null, null, id)).to.be.eql('function'); @@ -132,22 +132,7 @@ describe('ServerNats', () => { it(`should call "publish" with expected arguments`, () => { const respond = 'test'; publisher({ respond, id }); - expect(publisherSpy.calledWith(`${pattern}_res`, { respond, id })).to.be - .true; - }); - }); - describe('getAckPatternName', () => { - const test = 'test'; - it(`should append _ack to string`, () => { - const expectedResult = test + '_ack'; - expect(server.getAckQueueName(test)).to.equal(expectedResult); - }); - }); - describe('getResPatternName', () => { - const test = 'test'; - it(`should append _res to string`, () => { - const expectedResult = test + '_res'; - expect(server.getResQueueName(test)).to.equal(expectedResult); + expect(publisherSpy.calledWith(replyTo, { respond, id })).to.be.true; }); }); }); diff --git a/sample/01-cats-app/src/cats/cats.controller.ts b/sample/01-cats-app/src/cats/cats.controller.ts index c71fbe361f1..62bffd1de34 100644 --- a/sample/01-cats-app/src/cats/cats.controller.ts +++ b/sample/01-cats-app/src/cats/cats.controller.ts @@ -1,21 +1,23 @@ import { + Body, + Catch, Controller, Get, + Param, Post, - Body, UseGuards, UseInterceptors, - Param, } from '@nestjs/common'; -import { CreateCatDto } from './dto/create-cat.dto'; -import { CatsService } from './cats.service'; -import { Cat } from './interfaces/cat.interface'; -import { RolesGuard } from '../common/guards/roles.guard'; import { Roles } from '../common/decorators/roles.decorator'; +import { RolesGuard } from '../common/guards/roles.guard'; import { LoggingInterceptor } from '../common/interceptors/logging.interceptor'; import { TransformInterceptor } from '../common/interceptors/transform.interceptor'; import { ParseIntPipe } from '../common/pipes/parse-int.pipe'; +import { CatsService } from './cats.service'; +import { CreateCatDto } from './dto/create-cat.dto'; +import { Cat } from './interfaces/cat.interface'; +@Catch() @Controller('cats') @UseGuards(RolesGuard) @UseInterceptors(LoggingInterceptor, TransformInterceptor) diff --git a/sample/01-cats-app/src/common/filters/http-exception.filter.ts b/sample/01-cats-app/src/common/filters/http-exception.filter.ts index 3c2bea82e3f..333bc6b310a 100644 --- a/sample/01-cats-app/src/common/filters/http-exception.filter.ts +++ b/sample/01-cats-app/src/common/filters/http-exception.filter.ts @@ -1,7 +1,6 @@ -import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common'; -import { HttpException } from '@nestjs/common'; +import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common'; -@Catch(HttpException) +@Catch(3) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); diff --git a/sample/04-grpc/package-lock.json b/sample/04-grpc/package-lock.json index 63a483adb65..0e6c79677d9 100644 --- a/sample/04-grpc/package-lock.json +++ b/sample/04-grpc/package-lock.json @@ -4,53 +4,311 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@nestjs/common": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-5.1.0.tgz", + "integrity": "sha512-JAZFqdU+f4DRE4yOvpfWDtwgmCavyfE2Vu7mSwYsklU9TlBBE9XBygN2J38aQC83dmCJ1H889shd+hBIiVyEXA==", + "requires": { + "axios": "0.17.1", + "cli-color": "1.2.0", + "deprecate": "1.0.0", + "multer": "1.3.0" + } + }, + "@nestjs/core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-5.1.0.tgz", + "integrity": "sha512-gg5/nOdAEV+zHeTXEiU/5RnxBPyLH/n+51vj19k8IcSedP7wD3G2fbwp5Q2xOVx6ghKhhzdav+ED0ZitkR6uMA==", + "requires": { + "body-parser": "1.18.2", + "cors": "2.8.4", + "express": "4.16.3", + "iterare": "0.0.8", + "object-hash": "1.3.0", + "optional": "0.1.4" + } + }, + "@nestjs/microservices": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-5.1.0.tgz", + "integrity": "sha512-g9ez7N+QgjlJSSak27KhUHXi1YMnk/DuGpAn/TWlm5rSmcsrArdTSvinGBMyb0mL3CMJJz8y0/CZwAUdy9HQzA==", + "requires": { + "iterare": "0.0.8", + "json-socket": "^0.2.1", + "optional": "0.1.4" + } + }, + "@nestjs/testing": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-5.1.0.tgz", + "integrity": "sha512-pLhsDmshfKKwpDkklMpn+7YAnSxe1n8RgTfb54N6jDlCTDb9VFiHwp41tTCzR7AAckGFZT0BhwoNKyb3gB5JDg==", + "requires": { + "deprecate": "1.0.0", + "optional": "0.1.4" + } + }, + "@nestjs/websockets": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-5.1.0.tgz", + "integrity": "sha512-9NDtV+LraSvJ/I3d6SBhk+ikF1ljXkV9vRiEdds1iFYR9MM/UEMTEOdCGt138nJcv356vzPUb59KAHXL0vVxLA==", + "requires": { + "iterare": "0.0.8", + "socket.io": "^2.0.3" + } + }, "@types/node": { "version": "7.0.57", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.57.tgz", "integrity": "sha512-Iikf0IAus1OX++3Jrc1R2bsZggO+m22G5ee56JccYKejx5GNT3nHhY8v6J4OXId1hXXlb0n45hcaVwZwQcZZ6w==", "dev": true }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "append-field": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", + "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "ascli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", "requires": { - "colour": "0.7.1", - "optjs": "3.2.2" + "colour": "~0.7.1", + "optjs": "~3.2.2" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "axios": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "requires": { + "follow-redirects": "^1.2.5", + "is-buffer": "^1.1.5" } }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + } + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, "bytebuffer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", "requires": { - "long": "3.2.0" + "long": "~3" } }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "class-transformer": { "version": "0.1.9", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.1.9.tgz", @@ -61,7 +319,20 @@ "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.7.3.tgz", "integrity": "sha512-aRRlS1WlQ+52aHlmDCDX5dLwtpbg9is7i9yYhzQosTAVs86nX0Um8hb7ChTwMn7jfpyxxjAZpBrlrAc2tqNpYA==", "requires": { - "validator": "7.2.0" + "validator": "^7.0.0" + } + }, + "cli-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", + "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", + "requires": { + "ansi-regex": "^2.1.1", + "d": "1", + "es5-ext": "^0.10.12", + "es6-iterator": "2", + "memoizee": "^0.4.3", + "timers-ext": "0.1" } }, "cliui": { @@ -69,9 +340,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "code-point-at": { @@ -79,21 +350,418 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true + }, "colour": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" }, + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "requires": { + "object-assign": "^4", + "vary": "^1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + } + } + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "^0.10.9" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deprecate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", + "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "~1.0.2" + } + }, + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "follow-redirects": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz", + "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", + "requires": { + "debug": "^3.1.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -104,12 +772,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "grpc": { @@ -117,10 +785,10 @@ "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.10.0.tgz", "integrity": "sha512-g6Na2dgNusGvSM1ud4hwDaajNP4VSPQhGHnRXzbGNbQJIqGpJhRl7GRgYxTP8rYozqCx2NaT74UL37o8nb0GKA==", "requires": { - "lodash": "4.17.5", - "nan": "2.10.0", - "node-pre-gyp": "0.6.39", - "protobufjs": "5.0.2" + "lodash": "^4.15.0", + "nan": "^2.0.0", + "node-pre-gyp": "^0.6.39", + "protobufjs": "^5.0.0" }, "dependencies": { "abbrev": { @@ -131,8 +799,8 @@ "version": "4.11.8", "bundled": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -147,8 +815,8 @@ "version": "1.1.4", "bundled": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -180,28 +848,28 @@ "bundled": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { "version": "0.0.9", "bundled": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { "version": "2.10.1", "bundled": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { "version": "1.1.8", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -221,7 +889,7 @@ "version": "1.0.5", "bundled": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -240,14 +908,14 @@ "version": "2.0.5", "bundled": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { "version": "1.14.1", "bundled": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -284,7 +952,7 @@ "bundled": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -303,9 +971,9 @@ "version": "2.1.4", "bundled": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -316,40 +984,40 @@ "version": "1.0.11", "bundled": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { "version": "1.0.5", "bundled": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { "version": "2.7.4", "bundled": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { "version": "0.1.7", "bundled": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -362,12 +1030,12 @@ "version": "7.1.2", "bundled": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -382,8 +1050,8 @@ "version": "4.2.1", "bundled": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -394,10 +1062,10 @@ "version": "3.1.3", "bundled": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -408,17 +1076,17 @@ "version": "1.1.1", "bundled": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { "version": "1.0.6", "bundled": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -433,7 +1101,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -461,7 +1129,7 @@ "version": "1.0.1", "bundled": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -496,14 +1164,14 @@ "version": "2.1.17", "bundled": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "minimatch": { "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "mkdirp": { @@ -527,35 +1195,35 @@ "version": "0.6.39", "bundled": true, "requires": { - "detect-libc": "1.0.3", + "detect-libc": "^1.0.2", "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.4", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "2.2.1", - "tar-pack": "3.4.1" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { "version": "4.0.1", "bundled": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { "version": "4.1.2", "bundled": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -574,7 +1242,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -589,8 +1257,8 @@ "version": "0.1.4", "bundled": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -617,10 +1285,10 @@ "version": "1.2.4", "bundled": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -633,48 +1301,48 @@ "version": "2.3.3", "bundled": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "request": { "version": "2.81.0", "bundled": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { "version": "2.6.2", "bundled": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -697,21 +1365,21 @@ "version": "1.0.9", "bundled": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { "version": "1.13.1", "bundled": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -724,16 +1392,16 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { "version": "1.0.3", "bundled": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -744,7 +1412,7 @@ "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -755,37 +1423,37 @@ "version": "2.2.1", "bundled": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { "version": "3.4.1", "bundled": true, "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.3", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { "version": "2.3.3", "bundled": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { "version": "0.6.0", "bundled": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -809,9 +1477,9 @@ "version": "1.10.0", "bundled": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -824,7 +1492,7 @@ "version": "1.1.2", "bundled": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -833,13 +1501,69 @@ } } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -852,20 +1576,66 @@ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "iterare": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-0.0.8.tgz", + "integrity": "sha1-qWmoCh+/9rePKHdllNe8K9+raq0=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-socket": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/json-socket/-/json-socket-0.2.1.tgz", + "integrity": "sha1-JuftjMEx8XqgE2wyBo9HO12++yI=" + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "lodash": { @@ -878,12 +1648,107 @@ "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "~0.10.2" + } + }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memoizee": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz", + "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", + "requires": { + "d": "1", + "es5-ext": "^0.10.30", + "es6-weak-map": "^2.0.2", + "event-emitter": "^0.3.5", + "is-promise": "^2.1", + "lru-queue": "0.1", + "next-tick": "1", + "timers-ext": "^0.1.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==" + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "requires": { + "mime-db": "~1.35.0" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", + "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", + "requires": { + "append-field": "^0.1.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.0", + "mkdirp": "^0.5.1", + "object-assign": "^3.0.0", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" } }, "nan": { @@ -891,19 +1756,57 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, + "optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==" + }, "optjs": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", @@ -914,23 +1817,124 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, "protobufjs": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz", "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", "requires": { - "ascli": "1.0.1", - "bytebuffer": "5.0.1", - "glob": "7.1.2", - "yargs": "3.32.0" + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" + } + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "reflect-metadata": { @@ -938,30 +1942,238 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==" }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, "rxjs": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.1.0.tgz", "integrity": "sha512-lMZdl6xbHJCSb5lmnb6nOhsoBVCyoDC5LDJQK9WWyq+tsI7KnlDIZ0r0AZAlBpRPLbwQA9kzSBAZwNIZEZ+hcw==", "requires": { - "tslib": "1.9.0" + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "timers-ext": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", + "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", + "requires": { + "es5-ext": "~0.10.14", + "next-tick": "1" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "ts-node": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-6.2.0.tgz", + "integrity": "sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "tslib": { @@ -969,11 +2181,84 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==" }, + "tslint": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, "validator": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/validator/-/validator-7.2.0.tgz", "integrity": "sha512-c8NGTUYeBEcUIGeMppmNVKHE7wwfm3mYbNZxV+c5mlv9fDHI7Ad3p07qfNrn/CvpdkK2k61fOLRO2sTEhgQXmg==" }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, "window-size": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", @@ -984,8 +2269,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -993,6 +2278,26 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -1003,14 +2308,25 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true } } } diff --git a/sample/17-mvc-fastify/src/main.ts b/sample/17-mvc-fastify/src/main.ts index 45cb4db55fd..ef846f1382e 100644 --- a/sample/17-mvc-fastify/src/main.ts +++ b/sample/17-mvc-fastify/src/main.ts @@ -5,14 +5,14 @@ import { ApplicationModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule, new FastifyAdapter()); app.useStaticAssets({ - root: join(__dirname, './../public'), + root: join(__dirname, '..', 'public'), prefix: '/public/', }); app.setViewEngine({ engine: { handlebars: require('handlebars'), }, - templates: join(__dirname, './../views'), + templates: join(__dirname, '..', 'views'), }); await app.listen(3000); } diff --git a/tsconfig.json b/tsconfig.json index 77fc094f255..b632befdac5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,10 @@ "target": "es6", "sourceMap": true, "allowJs": true, - "outDir": "dist" + "outDir": "dist", + "lib": [ + "es7" + ] }, "include": [ "packages/**/*",