diff --git a/README.md b/README.md index 2681069..b86e048 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ $ yarn add @hapiness/core ```javascript "dependencies": { - "@hapiness/core": "^1.0.0-rc.3", + "@hapiness/core": "^1.0.0-rc.4", //... } //... @@ -95,7 +95,7 @@ $ yarn add @hapiness/core ### Use Hapiness API -Actually, we're in **development** mode: **v1.0.0-rc.3** +Actually, we're in **development** mode: **v1.0.0-rc.4** See [API](https://github.com/hapinessjs/hapiness/blob/master/API.md) Reference to know what's already implemented. @@ -116,6 +116,9 @@ To set up your development environment: ## Change History +* v1.0.0-rc.4 (2017-07-10) + * Bootstrap hooks call order fix + * Hooks and create component errors fix * v1.0.0-rc.3 (2017-07-03) * Boostrap extension loader fix * v1.0.0-rc.2 (2017-06-29) diff --git a/package.json b/package.json index 7550c05..79684b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hapiness/core", - "version": "1.0.0-rc.3", + "version": "1.0.0-rc.4", "description": "Project to have a HapiJS (https://hapijs.com/) based framework to create easier NodeJS back-end with some awesome features", "main": "index.js", "types": "index.d.ts", @@ -76,12 +76,12 @@ "@types/hapi": "^16.1.6", "@types/hoek": "^4.1.3", "@types/joi": "^10.4.0", - "@types/node": "^8.0.7", + "@types/node": "^8.0.9", "@types/websocket": "^0.0.34", "debug": "^2.6.8", "hapi": "^16.4.3", "reflect-metadata": "^0.1.10", - "rxjs": "^5.4.1", + "rxjs": "^5.4.2", "websocket": "^1.0.24" }, "devDependencies": { @@ -90,10 +90,10 @@ "fs-extra": "^3.0.1", "istanbul": "^1.1.0-alpha.1", "mocha": "^3.4.2", - "mocha-typescript": "^1.1.5", + "mocha-typescript": "^1.1.7", "rimraf": "^2.6.1", - "ts-node": "^3.1.0", - "tslint": "^5.4.3", + "ts-node": "^3.2.0", + "tslint": "^5.5.0", "typescript": "^2.4.1", "unit.js": "^2.0.0" }, diff --git a/src/core/bootstrap.ts b/src/core/bootstrap.ts index b6796b3..ba57211 100644 --- a/src/core/bootstrap.ts +++ b/src/core/bootstrap.ts @@ -1,5 +1,5 @@ import 'rxjs/add/observable/forkJoin'; -import { HapinessModule, Type } from './decorators'; +import { Type } from './decorators'; import { ExtentionHooksEnum, ModuleEnum } from './enums'; import { HookManager } from './hook'; import { CoreModule, CoreProvide, ModuleManager } from './module'; @@ -79,25 +79,17 @@ export class Hapiness { .filter(m => !!m.parent) .filter(m => HookManager.hasLifecycleHook(ModuleEnum.OnRegister.toString(), m.token)) .map(m => HookManager.triggerHook(ModuleEnum.OnRegister.toString(), m.token, m.instance)) - .concat( - HookManager.triggerHook(ModuleEnum.OnStart.toString(), this.module.token, - this.module.instance, null, false) - ) .concat(this.extensions.map(ext => this.moduleInstantiated(ext))) - ).subscribe(_ => resolve(), _ => this.handleError(_, reject)); + .concat(Observable.of('')) + ) + .switchMap(_ => HookManager.triggerHook(ModuleEnum.OnStart.toString(), this.module.token, + this.module.instance, null, false)) + .subscribe(_ => resolve(), _ => reject(_)); }, /* istanbul ignore next */ _ => reject(_)); }); }); } - private static handleError(error: Error, reject) { - debug('an error occured', error.message); - ModuleManager.instantiateModule(this.module).subscribe(_ => { - HookManager.triggerHook(ModuleEnum.OnError.toString(), _.token, _.instance, [ error ], false); - reject(error); - }, /* istanbul ignore next */ _ => reject(_)); - } - /** * Convert an extension type to ExtensionWithConfig * diff --git a/src/core/di.ts b/src/core/di.ts index 652bcff..5b32933 100644 --- a/src/core/di.ts +++ b/src/core/di.ts @@ -28,11 +28,15 @@ export class DependencyInjection { * @returns T */ static instantiateComponent(component: Type, di: ReflectiveInjector): T { - const reflectiveDeps: ReflectiveDependency[] = ReflectiveInjector.resolve([component]) - .reduce((a, x: ResolvedReflectiveProvider) => a.concat(x.resolvedFactories), []) - .reduce((a, r: ResolvedReflectiveFactory) => a.concat(r.dependencies), []); - const deps = reflectiveDeps.map(d => di['_getByReflectiveDependency'](d)); - return Reflect.construct(component, deps); + try { + const reflectiveDeps: ReflectiveDependency[] = ReflectiveInjector.resolve([component]) + .reduce((a, x: ResolvedReflectiveProvider) => a.concat(x.resolvedFactories), []) + .reduce((a, r: ResolvedReflectiveFactory) => a.concat(r.dependencies), []); + const deps = reflectiveDeps.map(d => di['_getByReflectiveDependency'](d)); + return Reflect.construct(component, deps); + } catch (e) { + console.error.apply(console, e); + } } } diff --git a/src/core/hook.ts b/src/core/hook.ts index 28dc422..19791b0 100644 --- a/src/core/hook.ts +++ b/src/core/hook.ts @@ -32,6 +32,7 @@ export class HookManager { debug('triggering hook', hook, token ? token.name : null); Hoek.assert((!!token && !!instance), 'Cannot trigger without token/instance'); if (this.hasLifecycleHook(hook, token)) { + try { const result = Reflect.apply(instance[hook], instance, args || []); if (result instanceof Observable) { return result; @@ -41,6 +42,9 @@ export class HookManager { observer.complete(); }); } + } catch (e) { + console.error.apply(console, e); + } } return Observable.create((observer) => { if (throwErr) { diff --git a/src/core/metadata.ts b/src/core/metadata.ts index 7c22476..30f099a 100644 --- a/src/core/metadata.ts +++ b/src/core/metadata.ts @@ -1,5 +1,4 @@ import 'reflect-metadata'; -import * as Boom from 'boom'; import * as Debug from 'debug'; const debug = Debug('hapiness:metadata'); diff --git a/src/core/module.ts b/src/core/module.ts index e3919e2..90d6831 100644 --- a/src/core/module.ts +++ b/src/core/module.ts @@ -1,9 +1,7 @@ import { extractMetadataByDecorator } from './metadata'; import { ReflectiveInjector } from '../externals/injection-js'; -import { reflector } from '../externals/injection-js/reflection/reflection'; import { HapinessModule, Type, InjectionToken } from './decorators'; import { DependencyInjection } from './di'; -import { Server } from 'hapi'; import * as Hoek from 'hoek'; import { Observable } from 'rxjs/Rx'; const debug = require('debug')('hapiness:module'); @@ -136,7 +134,7 @@ export class ModuleManager { const lookup = (_module: CoreModule) => { const els = [].concat((_module[element] && Array.isArray(_module[element])) ? _module[element] : []); return (_module.modules || []).map(m => lookup(m)).reduce((acc, cur) => acc.concat(cur), []).concat(els).filter(_ => !!_); - } + }; return lookup(module); } @@ -149,7 +147,7 @@ export class ModuleManager { public static getModules(module: CoreModule): CoreModule[] { const lookup = (_module: CoreModule) => { return [].concat(_module).concat((_module.modules || []).map(m => lookup(m)).reduce((a, c) => a.concat(c), [])); - } + }; return lookup(module); } @@ -292,11 +290,3 @@ export interface OnRegister { onRegister(): void; } */ export interface OnStart { onStart(): void; } -/** - * Module Lifecycle Hook - * called when error are catched - * - * @param {Error} error - * @returns void - */ -export interface OnError { onError(error: Error): void; } diff --git a/src/extensions/http-server/extension.ts b/src/extensions/http-server/extension.ts index 21b6bdf..ae0142c 100644 --- a/src/extensions/http-server/extension.ts +++ b/src/extensions/http-server/extension.ts @@ -3,9 +3,9 @@ import { Extension, OnExtensionLoad, OnModuleInstantiated } from '../../core/boo import { DependencyInjection } from '../../core/di'; import { HookManager } from '../../core/hook'; import { extractMetadataByDecorator } from '../../core/metadata'; -import { CoreModule, ModuleLevel, ModuleManager } from '../../core/module'; +import { CoreModule, ModuleManager } from '../../core/module'; import { Lifecycle } from './decorators'; -import { enumByMethod, LifecycleComponentEnum, RouteMethodsEnum } from './enums'; +import { enumByMethod, LifecycleComponentEnum } from './enums'; import { LifecycleManager } from './lifecycle'; import { CoreRoute, RouteBuilder } from './route'; import { Observable } from 'rxjs/Observable'; @@ -41,20 +41,12 @@ export class HttpServerExt implements OnExtensionLoad, OnModuleInstantiated { ).subscribe(routes => { debug('routes and plugins registered'); LifecycleManager.routeLifecycle(this.server, routes.reduce((a, c) => a.concat(c), [])); - this.server.start() - .then(() => { - debug('http server started', this.server.info.uri); - observer.next({ - instance: this, - token: HttpServerExt, - value: this.server - }); - observer.complete(); - }) - .catch(err => { - observer.error(err); - observer.complete(); - }); + observer.next({ + instance: this, + token: HttpServerExt, + value: this.server + }); + observer.complete(); }, err => { observer.error(err); observer.complete(); @@ -65,8 +57,16 @@ export class HttpServerExt implements OnExtensionLoad, OnModuleInstantiated { onModuleInstantiated(module: CoreModule) { return Observable.create(observer => { this.instantiateLifecycle(this.server, module); - observer.next(); - observer.complete(); + this.server.start() + .then(() => { + debug('http server started', this.server.info.uri); + observer.next(); + observer.complete(); + }) + .catch(err => { + observer.error(err); + observer.complete(); + }); }); } diff --git a/src/extensions/http-server/lifecycle.ts b/src/extensions/http-server/lifecycle.ts index 9d0e01a..b8c960d 100644 --- a/src/extensions/http-server/lifecycle.ts +++ b/src/extensions/http-server/lifecycle.ts @@ -1,8 +1,6 @@ import { HookManager } from '../../core/hook'; import { LifecycleEventsEnum, LifecycleHooksEnum } from './enums'; import { RouteBuilder, CoreRoute } from './route'; -import { CoreModule, DependencyInjection } from '../../core'; -import { Observable } from 'rxjs/Observable'; import { Request, ReplyWithContinue, Server } from 'hapi'; import * as Debug from 'debug'; const debug = Debug('lifecycle/hook'); diff --git a/src/extensions/socket-server/extension.ts b/src/extensions/socket-server/extension.ts index 46a3236..30af0ec 100644 --- a/src/extensions/socket-server/extension.ts +++ b/src/extensions/socket-server/extension.ts @@ -1,9 +1,7 @@ import { CoreModule, Extension, ExtensionWithConfig, OnExtensionLoad } from '../../core'; import { Observable } from 'rxjs/Observable'; -import { server, connection, request } from 'websocket'; -import { Socket } from './socket'; +import { server } from 'websocket'; import { WebSocketServer } from './server'; -import * as http from 'http'; import * as Debug from 'debug'; const debug = Debug('hapiness:extension:socketserver'); @@ -18,8 +16,6 @@ export interface SocketConfig { export class SocketServerExt implements OnExtensionLoad { private server: server; - private subscribers: Array<(socket: Socket) => void>; - private sockets: Socket[]; public static setConfig(config: SocketConfig): ExtensionWithConfig { return { diff --git a/src/extensions/socket-server/server.ts b/src/extensions/socket-server/server.ts index 3d2a43d..165d2d0 100644 --- a/src/extensions/socket-server/server.ts +++ b/src/extensions/socket-server/server.ts @@ -1,7 +1,4 @@ -import { HookManager } from '../../core/hook'; -import { CoreModule, ModuleLevel, ModuleManager } from '../../core/module'; -import { Observable } from 'rxjs/Observable'; -import { server, connection, request } from 'websocket'; +import { server, request } from 'websocket'; import { Socket } from './socket'; import { SocketConfig } from './extension'; import * as http from 'http'; @@ -15,11 +12,11 @@ export class WebSocketServer { private sockets: Socket[]; constructor(config: SocketConfig) { - const httpServer = http.createServer((request, response) => { + const httpServer = http.createServer((_request, _response) => { /* istanbul ignore next */ - response.writeHead(404); + _response.writeHead(404); /* istanbul ignore next */ - response.end(); + _response.end(); }); httpServer.listen(config.port); delete config.port; @@ -27,8 +24,8 @@ export class WebSocketServer { this.server = new server(_config); this.sockets = []; this.subscribers = []; - this.server.on('request', request => { - this.onRequestHandler(request); + this.server.on('request', _request => { + this.onRequestHandler(_request); }); } @@ -36,11 +33,11 @@ export class WebSocketServer { * Resquest handler * Accept the request * - * @param {request} request + * @param {request} _request */ - private onRequestHandler(request: request) { - const connection = request.accept(null, request.origin); - const socket = new Socket(request, connection); + private onRequestHandler(_request: request) { + const connection = _request.accept(null, _request.origin); + const socket = new Socket(_request, connection); const index = this.sockets.push(socket) - 1; this.subscribers.forEach(sub => sub.apply(this, [ socket ])); connection.on('close', conn => { diff --git a/src/extensions/socket-server/socket.ts b/src/extensions/socket-server/socket.ts index 9cafc13..2e4a9c4 100644 --- a/src/extensions/socket-server/socket.ts +++ b/src/extensions/socket-server/socket.ts @@ -3,8 +3,8 @@ import { connection, request } from 'websocket'; export class Socket { constructor( - private request: request, - private connection: connection + private _request: request, + private _connection: connection ) {} /** @@ -16,16 +16,16 @@ export class Socket { on(event: string, callback: (data: any) => void) { switch (event) { case '*': - this.connection.on('message', callback); + this._connection.on('message', callback); break; case 'close': - this.connection.on(event, callback); + this._connection.on(event, callback); break; case 'error': - this.connection.on(event, callback); + this._connection.on(event, callback); break; default: - this.connection.on('message', message => { + this._connection.on('message', message => { if (message.type === 'utf8') { const parsed = this.getJSON(message.utf8Data); if (parsed.event === event) { callback(parsed.data); } @@ -40,7 +40,7 @@ export class Socket { * @param {(data:Buffer)=>void} callback */ onBytes(callback: (data: Buffer) => void) { - this.connection.on('message', message => { + this._connection.on('message', message => { if (message.type === 'binary') { callback(message.binaryData); } @@ -54,7 +54,7 @@ export class Socket { * @param {any} data */ emit(event: string, data: any) { - this.connection.sendUTF(JSON.stringify({ + this._connection.sendUTF(JSON.stringify({ event, data })); @@ -66,14 +66,14 @@ export class Socket { * @param {Buffer} data */ emitBytes(data: Buffer) { - this.connection.sendBytes(data); + this._connection.sendBytes(data); } /** * Close connection */ close() { - this.connection.close(); + this._connection.close(); } private getJSON(data: string) { diff --git a/src/index.ts b/src/index.ts index 4c33383..3c3dcea 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,9 @@ export { Hapiness, HapinessModule, Inject, Injectable, Optional, Lib, InjectionToken, - CoreModuleWithProviders, OnRegister, OnError, OnStart, CoreModule, CoreDecorator, CoreProvide, + CoreModuleWithProviders, OnRegister, OnStart, CoreModule, CoreDecorator, CoreProvide, Extension, ExtensionWithConfig } from './core'; export { HttpServerExt, HapiConfig, Route, Lifecycle, HttpRequestInfo, OnEvent, OnGet, OnDelete, OnOptions, OnPatch, OnPost, OnPut, OnPreAuth, OnPostAuth, OnPreHandler, OnPostHandler, OnPreResponse, Request, - ReplyWithContinue, ReplyNoContinue } from './extensions/http-server'; + ReplyWithContinue, ReplyNoContinue, Server } from './extensions/http-server'; export { SocketServerExt, Socket, SocketConfig, WebSocketServer } from './extensions/socket-server'; diff --git a/test/integration/core.test.ts b/test/integration/core.test.ts index 3e21e0f..a1b2c6e 100644 --- a/test/integration/core.test.ts +++ b/test/integration/core.test.ts @@ -1,8 +1,7 @@ import { suite, test } from 'mocha-typescript'; -import { Observable, SubscribableOrPromise } from 'rxjs/Observable'; -import { ConsumerType } from 'tslint/lib'; +import { Observable } from 'rxjs/Observable'; import * as unit from 'unit.js'; -import { Hapiness, HapinessModule, Injectable, OnStart, OnRegister, OnError, Lib } from '../../src/core'; +import { Hapiness, HapinessModule, Injectable, OnStart, OnRegister, Lib } from '../../src/core'; @suite('Integration - Core') class CoreIntegration { @@ -154,7 +153,7 @@ class CoreIntegration { @HapinessModule({ version: '1.0.0' }) - class ModuleTest implements OnError { + class ModuleTest { onStart() { return Observable.create(observer => { @@ -162,15 +161,13 @@ class CoreIntegration { observer.complete(); }); } + } - onError(err) { - unit.object(err) + Hapiness.bootstrap(ModuleTest).catch(_ => { + unit.object(_) .isInstanceOf(Error) .hasProperty('message', 'error'); done(); - } - } - - Hapiness.bootstrap(ModuleTest).catch(_ => {}); + }); } } diff --git a/test/integration/http-server.test.ts b/test/integration/http-server.test.ts index 27ad4dc..81b520b 100644 --- a/test/integration/http-server.test.ts +++ b/test/integration/http-server.test.ts @@ -1,8 +1,6 @@ -import { suite, test, only} from 'mocha-typescript'; -import { Observable, SubscribableOrPromise } from 'rxjs/Observable'; -import { ConsumerType } from 'tslint/lib'; +import { suite, test} from 'mocha-typescript'; import * as unit from 'unit.js'; -import { Hapiness, HapinessModule, Injectable, Inject, OnError, OnRegister, OnStart } from '../../src/core'; +import { Hapiness, HapinessModule, Inject, OnRegister, OnStart } from '../../src/core'; import { HttpServerExt, Route, Lifecycle, OnGet, OnEvent, OnPreResponse } from '../../src/extensions/http-server'; import { Server } from 'hapi'; @@ -33,7 +31,7 @@ class HttpServerIntegration { onStart() { this.server.inject('/', res => { unit.must(res.result).equal('test'); - done(); + this.server.stop().then(_ => done()); }); } } @@ -95,12 +93,12 @@ class HttpServerIntegration { this.server.inject('/', res => { unit.string(res.result) .is('toto123456'); - done(); + this.server.stop().then(_ => done()); }); } } - Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4445 }) ]) + Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4444 }) ]) .catch(_ => done(_)); } @@ -139,7 +137,8 @@ class HttpServerIntegration { } } - Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4446 }) ]); + Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4444 }) ]) + .catch(_ => console.log(_.message)); } @test('port already used') @@ -150,11 +149,44 @@ class HttpServerIntegration { }) class ModuleTest {} - Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4446 }) ]).catch(_ => { + Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4444 }) ]).catch(_ => { unit.object(_) .isInstanceOf(Error) - .hasProperty('message', 'listen EADDRINUSE 0.0.0.0:4446'); - done(); + .hasProperty('message', 'listen EADDRINUSE 0.0.0.0:4444'); + Hapiness['extensions'][0].value.stop().then(__ => done()); }); } + + @test('make sure register are done before start hook') + test5(done) { + + @HapinessModule({ + version: '1.0.0' + }) + class SubModuleTest implements OnRegister { + constructor(@Inject(HttpServerExt) private server: Server) {} + onRegister() { + this.server.route({ + path: '/route1', + method: 'GET', + handler: () => {} + }); + } + } + + @HapinessModule({ + version: '1.0.0', + imports: [ SubModuleTest ] + }) + class ModuleTest implements OnStart { + constructor(@Inject(HttpServerExt) private server: Server) {} + onStart() { + unit.object(this.server.table().pop().table.pop()) + .hasProperty('path', '/route1'); + this.server.stop().then(_ => done()); + } + } + + Hapiness.bootstrap(ModuleTest, [ HttpServerExt.setConfig({ host: '0.0.0.0', port: 4445 }) ]); + } } diff --git a/test/integration/socket-server.test.ts b/test/integration/socket-server.test.ts index f1211d8..28ed769 100644 --- a/test/integration/socket-server.test.ts +++ b/test/integration/socket-server.test.ts @@ -1,8 +1,6 @@ -import { suite, test, only} from 'mocha-typescript'; -import { Observable, SubscribableOrPromise } from 'rxjs/Observable'; -import { ConsumerType } from 'tslint/lib'; +import { suite, test } from 'mocha-typescript'; import * as unit from 'unit.js'; -import { Hapiness, HapinessModule, Injectable, Inject, OnError, OnRegister, OnStart } from '../../src/core'; +import { Hapiness, HapinessModule, Inject, OnStart } from '../../src/core'; import { SocketServerExt, WebSocketServer } from '../../src/extensions/socket-server'; @suite('Integration - Socket Server') diff --git a/test/unit/bootstrap.unit.ts b/test/unit/bootstrap.unit.ts index f3f8a4c..4e63903 100644 --- a/test/unit/bootstrap.unit.ts +++ b/test/unit/bootstrap.unit.ts @@ -1,17 +1,10 @@ -import { OnExtensionLoad } from '../../src/core'; import { Hapiness } from '../../src/core/bootstrap'; -import { HapinessModule, Inject, Injectable, InjectionToken } from '../../src/core/decorators'; import { HookManager } from '../../src/core/hook'; -import { CoreModuleWithProviders, ModuleManager } from '../../src/core/module'; -import { HttpServerExt } from '../../src/extensions/http-server'; -import { Lifecycle, Route } from '../../src/extensions/http-server/decorators'; -import { SocketServerExt } from '../../src/extensions/socket-server/extension'; -import { Optional } from '../../src/externals/injection-js'; +import { ModuleManager } from '../../src/core/module'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/throw'; import { only, suite, test } from 'mocha-typescript'; import * as unit from 'unit.js'; -import { RouteConfiguration, Server } from 'hapi'; @only @suite('Unit - Bootstrap') diff --git a/test/unit/http-server/enums.unit.ts b/test/unit/http-server/enums.unit.ts index eb48c1d..dc8f1f9 100644 --- a/test/unit/http-server/enums.unit.ts +++ b/test/unit/http-server/enums.unit.ts @@ -1,5 +1,4 @@ import { suite, test } from 'mocha-typescript'; -import { Observable } from 'rxjs/Observable'; import * as unit from 'unit.js'; import { RouteMethodsEnum, enumByMethod } from '../../../src/extensions/http-server/enums'; diff --git a/test/unit/metadata.unit.ts b/test/unit/metadata.unit.ts index 993570b..5a40747 100644 --- a/test/unit/metadata.unit.ts +++ b/test/unit/metadata.unit.ts @@ -1,5 +1,4 @@ import { suite, test } from 'mocha-typescript'; -import { Observable } from 'rxjs/Observable'; import * as unit from 'unit.js'; import { HapinessModule, extractMetadataByDecorator, extractMetadata } from '../../src/core'; diff --git a/test/unit/module.unit.ts b/test/unit/module.unit.ts index 3ef4622..1a3c892 100644 --- a/test/unit/module.unit.ts +++ b/test/unit/module.unit.ts @@ -1,5 +1,4 @@ import { suite, test } from 'mocha-typescript'; -import { Observable } from 'rxjs/Observable'; import * as unit from 'unit.js'; import { ModuleManager, ModuleLevel, HapinessModule, InjectionToken } from '../../src/core'; diff --git a/yarn.lock b/yarn.lock index f78285e..06f4c5e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -48,9 +48,9 @@ dependencies: "@types/mime-db" "*" -"@types/node@*", "@types/node@^8.0.7": - version "8.0.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.7.tgz#fb0ad04b5b6f6eabe0372a32a8f1fbba5c130cae" +"@types/node@*", "@types/node@^8.0.9": + version "8.0.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.9.tgz#19f44c3b6cb8a70d261d366f73650e3e3891ab2d" "@types/podium@*": version "1.0.0" @@ -110,6 +110,12 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + dependencies: + color-convert "^1.0.0" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -330,6 +336,14 @@ chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -350,6 +364,16 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + colors@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -466,10 +490,14 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@3.2.0, diff@^3.1.0, diff@^3.2.0: +diff@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +diff@^3.1.0, diff@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -482,7 +510,7 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -490,9 +518,9 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" esutils@^2.0.2: version "2.0.2" @@ -676,6 +704,10 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -910,11 +942,11 @@ js-yaml@3.6.1: esprima "^2.6.0" js-yaml@3.x, js-yaml@^3.7.0: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + version "3.9.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce" dependencies: argparse "^1.0.7" - esprima "^3.1.1" + esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" @@ -937,8 +969,8 @@ json3@3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" jsonfile@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" optionalDependencies: graceful-fs "^4.1.6" @@ -1123,9 +1155,9 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mocha-typescript@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/mocha-typescript/-/mocha-typescript-1.1.5.tgz#ad220c9236d514e359baa3f21c8217337ce07454" +mocha-typescript@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/mocha-typescript/-/mocha-typescript-1.1.7.tgz#86bca3d74891beeab99e755f74140a51050a7c77" dependencies: chalk "^1.1.3" yargs "^6.5.0" @@ -1386,9 +1418,9 @@ rimraf@^2.6.1: dependencies: glob "^7.0.5" -rxjs@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.1.tgz#b62f757f279445d265a18a58fb0a70dc90e91626" +rxjs@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" dependencies: symbol-observable "^1.0.1" @@ -1598,6 +1630,12 @@ supports-color@^3.1.2: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.0.tgz#ad986dc7eb2315d009b4d77c8169c2231a684037" + dependencies: + has-flag "^2.0.0" + symbol-observable@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -1622,12 +1660,12 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -ts-node@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.1.0.tgz#a75ec5aeb48f3058b1b945dba765f1150ba88f8c" +ts-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.2.0.tgz#9814f0c0141784900cf12fef1197ad4b7f4d23d1" dependencies: arrify "^1.0.0" - chalk "^1.1.1" + chalk "^2.0.0" diff "^3.1.0" make-error "^1.1.1" minimist "^1.2.0" @@ -1648,9 +1686,9 @@ tslib@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec" -tslint@^5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.4.3.tgz#761c8402b80e347b7733a04390a757b253580467" +tslint@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.5.0.tgz#10e8dab3e3061fa61e9442e8cee3982acf20a6aa" dependencies: babel-code-frame "^6.22.0" colors "^1.1.2" @@ -1661,9 +1699,9 @@ tslint@^5.4.3: resolve "^1.3.2" semver "^5.3.0" tslib "^1.7.1" - tsutils "^2.3.0" + tsutils "^2.5.1" -tsutils@^2.3.0: +tsutils@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.5.1.tgz#c2001390c79eec1a5ccfa7ac12d599639683e0cf" dependencies: