diff --git a/modules/store/spec/integration.spec.ts b/modules/store/spec/integration.spec.ts index c1ff475465..16694a80dd 100644 --- a/modules/store/spec/integration.spec.ts +++ b/modules/store/spec/integration.spec.ts @@ -139,7 +139,7 @@ describe('ngRx Integration spec', () => { return todos.filter(predicate); }; - let currentlyVisibleTodos: any; + let currentlyVisibleTodos: Todo[] = []; Observable.combineLatest( store.select('visibilityFilter'), diff --git a/modules/store/spec/modules.spec.ts b/modules/store/spec/modules.spec.ts index 4a01a25404..798b63ee92 100644 --- a/modules/store/spec/modules.spec.ts +++ b/modules/store/spec/modules.spec.ts @@ -1,9 +1,16 @@ import 'rxjs/add/operator/take'; import { TestBed } from '@angular/core/testing'; import { NgModule, InjectionToken } from '@angular/core'; -import { StoreModule, Store, ActionReducer, ActionReducerMap } from '../'; +import { + StoreModule, + Store, + ActionReducer, + ActionReducerMap, + combineReducers, +} from '../'; +import createSpy = jasmine.createSpy; -describe('Nested Store Modules', () => { +describe(`Store Modules`, () => { type RootState = { fruit: string }; type FeatureAState = number; type FeatureBState = { list: number[]; index: number }; @@ -14,57 +21,144 @@ describe('Nested Store Modules', () => { const reducersToken = new InjectionToken>( 'Root Reducers' ); - const rootFruitReducer: ActionReducer = () => 'apple'; - const featureAReducer: ActionReducer = () => 5; - const featureBListReducer: ActionReducer = () => [1, 2, 3]; - const featureBIndexReducer: ActionReducer = () => 2; + + // Trigger here is basically an action type used to trigger state update + const createDummyReducer = (def: T, trigger: string): ActionReducer => ( + s = def, + { type, payload }: any + ) => (type === trigger ? payload : s); + const rootFruitReducer = createDummyReducer('apple', 'fruit'); + const featureAReducer = createDummyReducer(5, 'a'); + const featureBListReducer = createDummyReducer([1, 2, 3], 'bList'); + const featureBIndexReducer = createDummyReducer(2, 'bIndex'); const featureBReducerMap: ActionReducerMap = { list: featureBListReducer, index: featureBIndexReducer, }; - @NgModule({ - imports: [StoreModule.forFeature('a', featureAReducer)], - }) - class FeatureAModule {} - - @NgModule({ - imports: [StoreModule.forFeature('b', featureBReducerMap)], - }) - class FeatureBModule {} - - @NgModule({ - imports: [ - StoreModule.forRoot(reducersToken), - FeatureAModule, - FeatureBModule, - ], - providers: [ - { - provide: reducersToken, - useValue: { fruit: rootFruitReducer }, - }, - ], - }) - class RootModule {} - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [RootModule], + describe(`: Config`, () => { + let featureAReducerFactory: any; + let rootReducerFactory: any; + + const featureAInitial = () => ({ a: 42 }); + const rootInitial = { fruit: 'orange' }; + + beforeEach(() => { + featureAReducerFactory = createSpy( + 'featureAReducerFactory' + ).and.callFake((rm: any, initialState?: any) => { + return (state: any, action: any) => 4; + }); + rootReducerFactory = createSpy('rootReducerFactory').and.callFake( + combineReducers + ); + + @NgModule({ + imports: [ + StoreModule.forFeature( + 'a', + { a: featureAReducer }, + { + initialState: featureAInitial, + reducerFactory: featureAReducerFactory, + } + ), + ], + }) + class FeatureAModule {} + + @NgModule({ + imports: [ + StoreModule.forRoot(reducersToken, { + initialState: rootInitial, + reducerFactory: rootReducerFactory, + }), + FeatureAModule, + ], + providers: [ + { + provide: reducersToken, + useValue: { fruit: rootFruitReducer }, + }, + ], + }) + class RootModule {} + + TestBed.configureTestingModule({ + imports: [RootModule], + }); + + store = TestBed.get(Store); + }); + + it(`should accept configurations`, () => { + expect(featureAReducerFactory).toHaveBeenCalledWith( + { a: featureAReducer }, + featureAInitial() + ); + expect(rootReducerFactory).toHaveBeenCalledWith( + { fruit: rootFruitReducer }, + rootInitial + ); }); - store = TestBed.get(Store); + it(`should should use config.reducerFactory`, () => { + store.dispatch({ type: 'fruit', payload: 'banana' }); + store.dispatch({ type: 'a', payload: 42 }); + + store.take(1).subscribe((s: any) => { + expect(s).toEqual({ + fruit: 'banana', + a: 4, + }); + }); + }); }); - it('should nest the child module in the root store object', () => { - store.take(1).subscribe((state: State) => { - expect(state).toEqual({ - fruit: 'apple', - a: 5, - b: { - list: [1, 2, 3], - index: 2, + describe(`: Nested`, () => { + @NgModule({ + imports: [StoreModule.forFeature('a', featureAReducer)], + }) + class FeatureAModule {} + + @NgModule({ + imports: [StoreModule.forFeature('b', featureBReducerMap)], + }) + class FeatureBModule {} + + @NgModule({ + imports: [ + StoreModule.forRoot(reducersToken), + FeatureAModule, + FeatureBModule, + ], + providers: [ + { + provide: reducersToken, + useValue: { fruit: rootFruitReducer }, }, + ], + }) + class RootModule {} + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [RootModule], + }); + + store = TestBed.get(Store); + }); + + it('should nest the child module in the root store object', () => { + store.take(1).subscribe((state: State) => { + expect(state).toEqual({ + fruit: 'apple', + a: 5, + b: { + list: [1, 2, 3], + index: 2, + }, + }); }); }); }); diff --git a/modules/store/spec/state.spec.ts b/modules/store/spec/state.spec.ts index 3daaee21f7..34a5821fe1 100644 --- a/modules/store/spec/state.spec.ts +++ b/modules/store/spec/state.spec.ts @@ -2,7 +2,7 @@ import { Observable } from 'rxjs/Observable'; import { Subject } from 'rxjs/Subject'; import { ReflectiveInjector } from '@angular/core'; import { createInjector } from './helpers/injector'; -import { StoreModule, Store } from '../'; +import { StoreModule, Store, INIT } from '../'; describe('ngRx State', () => { const initialState = 123; @@ -22,7 +22,7 @@ describe('ngRx State', () => { injector.get(Store); expect(reducer).toHaveBeenCalledWith(initialState, { - type: '@ngrx/store/init', + type: INIT, }); }); }); diff --git a/modules/store/spec/store.spec.ts b/modules/store/spec/store.spec.ts index d737b432c6..3fe0f11dae 100644 --- a/modules/store/spec/store.spec.ts +++ b/modules/store/spec/store.spec.ts @@ -1,28 +1,22 @@ import 'rxjs/add/operator/take'; -import { Observable } from 'rxjs/Observable'; import { ReflectiveInjector } from '@angular/core'; import { hot } from 'jasmine-marbles'; import { createInjector } from './helpers/injector'; -import { Store, Action, combineReducers, StoreModule } from '../'; -import { ActionsSubject } from '../src/private_export'; +import { ActionsSubject, ReducerManager, Store, StoreModule } from '../'; import { counterReducer, INCREMENT, DECREMENT, RESET, } from './fixtures/counter'; +import Spy = jasmine.Spy; +import any = jasmine.any; interface TestAppSchema { counter1: number; counter2: number; counter3: number; -} - -interface Todo {} - -interface TodoAppSchema { - visibilityFilter: string; - todos: Todo[]; + counter4?: number; } describe('ngRx Store', () => { @@ -68,7 +62,7 @@ describe('ngRx Store', () => { }); }); - describe('basic store actions', function() { + describe('basic store actions', () => { beforeEach(() => setup()); it('should provide an Observable Store', () => { @@ -84,7 +78,7 @@ describe('ngRx Store', () => { e: { type: INCREMENT }, }; - it('should let you select state with a key name', function() { + it('should let you select state with a key name', () => { const counterSteps = hot(actionSequence, actionValues); counterSteps.subscribe(action => store.dispatch(action)); @@ -99,7 +93,7 @@ describe('ngRx Store', () => { ); }); - it('should let you select state with a selector function', function() { + it('should let you select state with a selector function', () => { const counterSteps = hot(actionSequence, actionValues); counterSteps.subscribe(action => store.dispatch(action)); @@ -114,13 +108,13 @@ describe('ngRx Store', () => { ); }); - it('should correctly lift itself', function() { + it('should correctly lift itself', () => { const result = store.select('counter1'); expect(result instanceof Store).toBe(true); }); - it('should increment and decrement counter1', function() { + it('should increment and decrement counter1', () => { const counterSteps = hot(actionSequence, actionValues); counterSteps.subscribe(action => store.dispatch(action)); @@ -133,7 +127,7 @@ describe('ngRx Store', () => { expect(counterState).toBeObservable(hot(stateSequence, counter1Values)); }); - it('should increment and decrement counter1 using the dispatcher', function() { + it('should increment and decrement counter1 using the dispatcher', () => { const counterSteps = hot(actionSequence, actionValues); counterSteps.subscribe(action => dispatcher.next(action)); @@ -146,7 +140,7 @@ describe('ngRx Store', () => { expect(counterState).toBeObservable(hot(stateSequence, counter1Values)); }); - it('should increment and decrement counter2 separately', function() { + it('should increment and decrement counter2 separately', () => { const counterSteps = hot(actionSequence, actionValues); counterSteps.subscribe(action => store.dispatch(action)); @@ -160,7 +154,7 @@ describe('ngRx Store', () => { expect(counter2State).toBeObservable(hot(stateSequence, counter2Values)); }); - it('should implement the observer interface forwarding actions and errors to the dispatcher', function() { + it('should implement the observer interface forwarding actions and errors to the dispatcher', () => { spyOn(dispatcher, 'next'); spyOn(dispatcher, 'error'); @@ -171,7 +165,7 @@ describe('ngRx Store', () => { expect(dispatcher.error).toHaveBeenCalledWith(2); }); - it('should not be completable', function() { + it('should not be completable', () => { const storeSubscription = store.subscribe(); const dispatcherSubscription = dispatcher.subscribe(); @@ -192,4 +186,41 @@ describe('ngRx Store', () => { expect(dispatcherSubscription.closed).toBe(true); }); }); + + describe(`add/remove reducers`, () => { + let addReducerSpy: Spy; + let removeReducerSpy: Spy; + const key = 'counter4'; + + beforeEach(() => { + setup(); + const reducerManager = injector.get(ReducerManager); + addReducerSpy = spyOn(reducerManager, 'addReducer').and.callThrough(); + removeReducerSpy = spyOn( + reducerManager, + 'removeReducer' + ).and.callThrough(); + }); + + it(`should delegate add/remove to ReducerManager`, () => { + store.addReducer(key, counterReducer); + expect(addReducerSpy).toHaveBeenCalledWith(key, counterReducer); + + store.removeReducer(key); + expect(removeReducerSpy).toHaveBeenCalledWith(key); + }); + + it(`should work with added / removed reducers`, () => { + store.addReducer(key, counterReducer); + store.take(1).subscribe(val => { + expect(val.counter4).toBe(0); + }); + + store.removeReducer(key); + store.dispatch({ type: INCREMENT }); + store.take(1).subscribe(val => { + expect(val.counter4).toBeUndefined(); + }); + }); + }); }); diff --git a/modules/store/spec/utils.spec.ts b/modules/store/spec/utils.spec.ts new file mode 100644 index 0000000000..9b2cd7ea28 --- /dev/null +++ b/modules/store/spec/utils.spec.ts @@ -0,0 +1,76 @@ +import { omit } from '../src/utils'; +import { combineReducers, compose } from '@ngrx/store'; + +describe(`Store utils`, () => { + describe(`combineReducers()`, () => { + const state1 = { x: '' }; + const state2 = { y: '' }; + const reducer1 = (state = state1, action: any): typeof state1 => + action.type === 'state1' ? { ...state, x: action.payload } : state; + const reducer2 = (state = state2, action: any): typeof state2 => + action.type === 'state2' ? { ...state, y: action.payload } : state; + const reducers = { reducer1, reducer2, extraneous: true }; + const initialState = { reducer1: { x: 'foo' }, reducer2: { y: 'bar' } }; + + let combination: any; + + beforeEach(() => { + combination = combineReducers(reducers, initialState); + }); + + it(`should ignore extraneous keys`, () => { + expect(combination(undefined, { type: '' }).extraneous).toBeUndefined(); + }); + + it(`should create a function that accepts state and action and returns combined state object`, () => { + const updateAction1 = { type: 'state1', payload: 'baz' }; + expect(combination(initialState, updateAction1)).toEqual({ + ...initialState, + reducer1: { x: updateAction1.payload }, + }); + }); + + it(`should handle initialState`, () => { + expect(combination(undefined, { type: '' })).toEqual(initialState); + }); + + it(`should return original state if nothing changed`, () => { + expect(combination(initialState, { type: '' })).toBe(initialState); + }); + }); + + describe(`omit()`, () => { + let originalObj: { x: string; y: string; z?: string }; + + beforeEach(() => { + originalObj = { x: 'foo', y: 'bar' }; + }); + + it(`should omit a key passed`, () => { + expect(omit(originalObj, 'x')).toEqual({ y: 'bar' }); + }); + + it(`should not modify the original object`, () => { + expect(omit(originalObj, 'y')).not.toBe(originalObj); + }); + }); + + describe(`compose()`, () => { + const cube = (n: number) => Math.pow(n, 3); + const precision = (n: number) => parseFloat(n.toPrecision(12)); + const addPtTwo = (n: number) => n + 0.2; + + it(`should should compose functions`, () => { + const addPrecision = compose(precision, addPtTwo); + const addPrecisionCubed = compose(cube, addPrecision); + + expect(addPrecision(0.1)).toBe(0.3); + expect(addPrecisionCubed(0.1)).toBe(0.027); + }); + + it(`should act as identity if no functions passed`, () => { + const id = compose(); + expect(id(1)).toBe(1); + }); + }); +}); diff --git a/modules/store/src/actions_subject.ts b/modules/store/src/actions_subject.ts index 418af4779c..7885efcad0 100644 --- a/modules/store/src/actions_subject.ts +++ b/modules/store/src/actions_subject.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { Action } from './models'; -export const INIT = '@ngrx/store/init'; +export const INIT = '@ngrx/store/init' as '@ngrx/store/init'; @Injectable() export class ActionsSubject extends BehaviorSubject @@ -15,9 +15,9 @@ export class ActionsSubject extends BehaviorSubject next(action: Action): void { if (typeof action === 'undefined') { - throw new Error(`Actions must be objects`); + throw new TypeError(`Actions must be objects`); } else if (typeof action.type === 'undefined') { - throw new Error(`Actions must have a type property`); + throw new TypeError(`Actions must have a type property`); } super.next(action); diff --git a/modules/store/src/reducer_manager.ts b/modules/store/src/reducer_manager.ts index 66a3dbf301..a3f0ee58f8 100644 --- a/modules/store/src/reducer_manager.ts +++ b/modules/store/src/reducer_manager.ts @@ -16,7 +16,7 @@ export abstract class ReducerObservable extends Observable< ActionReducer > {} export abstract class ReducerManagerDispatcher extends ActionsSubject {} -export const UPDATE = '@ngrx/store/update-reducers'; +export const UPDATE = '@ngrx/store/update-reducers' as '@ngrx/store/update-reducers'; @Injectable() export class ReducerManager extends BehaviorSubject> diff --git a/modules/store/src/state.ts b/modules/store/src/state.ts index db37b7a839..ccf9d9b74b 100644 --- a/modules/store/src/state.ts +++ b/modules/store/src/state.ts @@ -4,10 +4,9 @@ import { Observable } from 'rxjs/Observable'; import { Subscription } from 'rxjs/Subscription'; import { queue } from 'rxjs/scheduler/queue'; import { observeOn } from 'rxjs/operator/observeOn'; -import { startWith } from 'rxjs/operator/startWith'; import { withLatestFrom } from 'rxjs/operator/withLatestFrom'; import { scan } from 'rxjs/operator/scan'; -import { ActionsSubject } from './actions_subject'; +import { ActionsSubject, INIT } from './actions_subject'; import { Action, ActionReducer } from './models'; import { INITIAL_STATE } from './tokens'; import { ReducerObservable } from './reducer_manager'; @@ -17,7 +16,7 @@ export abstract class StateObservable extends Observable {} @Injectable() export class State extends BehaviorSubject implements OnDestroy { - static readonly INIT = '@ngrx/store/init'; + static readonly INIT = INIT; private stateSubscription: Subscription; diff --git a/modules/store/src/store_module.ts b/modules/store/src/store_module.ts index 995aaf960f..0f09af89fc 100644 --- a/modules/store/src/store_module.ts +++ b/modules/store/src/store_module.ts @@ -51,7 +51,13 @@ export class StoreFeatureModule implements OnDestroy { @Inject(STORE_FEATURES) private features: StoreFeature[], private reducerManager: ReducerManager ) { - features.forEach(feature => reducerManager.addFeature(feature)); + features + .map(feature => { + return typeof feature.initialState === 'function' + ? { ...feature, initialState: feature.initialState() } + : feature; + }) + .forEach(feature => reducerManager.addFeature(feature)); } ngOnDestroy() { diff --git a/modules/store/src/tokens.ts b/modules/store/src/tokens.ts index 3601686859..0e7b045887 100644 --- a/modules/store/src/tokens.ts +++ b/modules/store/src/tokens.ts @@ -1,11 +1,15 @@ -import { OpaqueToken } from '@angular/core'; +import { InjectionToken } from '@angular/core'; -export const _INITIAL_STATE = new OpaqueToken('_ngrx/store Initial State'); -export const INITIAL_STATE = new OpaqueToken('@ngrx/store Initial State'); -export const REDUCER_FACTORY = new OpaqueToken('@ngrx/store Reducer Factory'); -export const _REDUCER_FACTORY = new OpaqueToken( +export const _INITIAL_STATE = new InjectionToken('_ngrx/store Initial State'); +export const INITIAL_STATE = new InjectionToken('@ngrx/store Initial State'); +export const REDUCER_FACTORY = new InjectionToken( + '@ngrx/store Reducer Factory' +); +export const _REDUCER_FACTORY = new InjectionToken( '@ngrx/store Reducer Factory Provider' ); -export const INITIAL_REDUCERS = new OpaqueToken('@ngrx/store Initial Reducers'); -export const META_REDUCERS = new OpaqueToken('@ngrx/store Meta Reducers'); -export const STORE_FEATURES = new OpaqueToken('@ngrx/store Store Features'); +export const INITIAL_REDUCERS = new InjectionToken( + '@ngrx/store Initial Reducers' +); +export const META_REDUCERS = new InjectionToken('@ngrx/store Meta Reducers'); +export const STORE_FEATURES = new InjectionToken('@ngrx/store Store Features'); diff --git a/package.json b/package.json index cc49aebf4d..79249ab005 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,12 @@ "clean:ng-tools-ts": "rimraf \"./node_modules/@ngtools/webpack/node_modules/typescript\"", "clean:ts": "yarn run clean:ng-cli-ts && yarn run clean:ng-tools-ts", "cli": "ng", + "coverage:html": "nyc report --reporter=html", "example:start": "yarn run cli -- serve", "example:test": "yarn run cli -- test --code-coverage", - "ci": "npm run build && npm run test && nyc report --reporter=text-lcov | coveralls", + "ci": "yarn run build && yarn run test && nyc report --reporter=text-lcov | coveralls", "prettier": "prettier --parser typescript --single-quote --trailing-comma --write \"./**/*.ts\"", + "watch:tests": "chokidar 'modules/**/*.ts' --initial -c 'nyc --reporter=text --reporter=html yarn run test:unit'", "postinstall": "opencollective postinstall" }, "keywords": [ @@ -61,6 +63,8 @@ "@types/node": "^7.0.5", "@types/ora": "^0.3.31", "@types/rimraf": "^0.0.28", + "chokidar": "^1.7.0", + "chokidar-cli": "^1.2.0", "codelyzer": "^2.1.1", "core-js": "^2.4.1", "coveralls": "^2.13.0", @@ -107,4 +111,4 @@ "url": "https://opencollective.com/ngrx", "logo": "https://opencollective.com/opencollective/logo.txt" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 3dac240b61..cd709d62b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -343,11 +343,7 @@ ansi-styles@^3.1.0: dependencies: color-convert "^1.0.0" -any-promise@^1.0.0, any-promise@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - -anymatch@^1.3.0: +anymatch@^1.1.0, anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" dependencies: @@ -395,6 +391,10 @@ arr-flatten@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -407,6 +407,14 @@ array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + array-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" @@ -539,6 +547,14 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-polyfill@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" @@ -651,6 +667,10 @@ blocking-proxy@0.0.5: dependencies: minimist "^1.2.0" +bluebird@^2.9.24: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + bluebird@^3.3.0, bluebird@^3.4.7: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" @@ -807,6 +827,10 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" +byline@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" @@ -845,7 +869,7 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: +camelcase@^2.0.0, camelcase@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -853,7 +877,7 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -889,7 +913,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -907,7 +931,18 @@ chalk@^2.0.0, chalk@^2.0.1: escape-string-regexp "^1.0.5" supports-color "^4.0.0" -chokidar@^1.4.1, chokidar@^1.4.3, chokidar@^1.6.0: +chokidar-cli@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/chokidar-cli/-/chokidar-cli-1.2.0.tgz#8e7f58442273182018be1868e53c22af65a21948" + dependencies: + anymatch "^1.1.0" + bluebird "^2.9.24" + chokidar "^1.0.1" + lodash "^3.7.0" + shell-quote "^1.4.3" + yargs "^3.7.2" + +chokidar@^1.0.1, chokidar@^1.4.1, chokidar@^1.4.3, chokidar@^1.6.0, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -971,7 +1006,7 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -cliui@^3.2.0: +cliui@^3.0.3, cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: @@ -1752,6 +1787,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" @@ -1849,6 +1888,10 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1893,6 +1936,12 @@ encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + engine.io-client@1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766" @@ -2013,6 +2062,18 @@ evp_bytestokey@^1.0.0: dependencies: create-hash "^1.1.1" +execa@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" + dependencies: + cross-spawn "^4.0.0" + get-stream "^2.2.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" @@ -2217,7 +2278,7 @@ find-up@^1.0.0, find-up@^1.1.2: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -2295,7 +2356,7 @@ fs-extra@^0.23.1: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^2.0.0, fs-extra@^2.1.2: +fs-extra@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" dependencies: @@ -2310,15 +2371,6 @@ fs-extra@^3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-promise@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.2.tgz#cfea45c80f46480a3fd176213fa22abc8c159521" - dependencies: - any-promise "^1.3.0" - fs-extra "^2.0.0" - mz "^2.6.0" - thenify-all "^1.6.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2394,10 +2446,21 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" +get-port@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -2476,7 +2539,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2523,6 +2586,16 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + globule@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" @@ -2801,6 +2874,10 @@ iconv-lite@0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" +iconv-lite@~0.4.13: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -2874,7 +2951,7 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^3.0.0, inquirer@^3.0.6: +inquirer@3.0.6, inquirer@^3.0.0, inquirer@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" dependencies: @@ -3075,7 +3152,7 @@ is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -3498,9 +3575,9 @@ lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" -lerna@^2.0.0-rc.1: - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.0.0-rc.1.tgz#b92b230ea812d43fd23c3d6dae49583fe638d12f" +lerna@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.0.0.tgz#49a72fe70e06aebfd7ea23efb2ab41abe60ebeea" dependencies: async "^1.5.0" chalk "^1.1.1" @@ -3509,27 +3586,34 @@ lerna@^2.0.0-rc.1: command-join "^2.0.0" conventional-changelog-cli "^1.3.1" conventional-recommended-bump "^1.0.0" - cross-spawn "^4.0.0" dedent "^0.7.0" execa "^0.6.3" find-up "^2.1.0" - fs-promise "^2.0.2" - glob "^7.0.6" + fs-extra "^3.0.1" + get-port "^3.1.0" + glob "^7.1.2" + globby "^6.1.0" graceful-fs "^4.1.11" inquirer "^3.0.6" + is-ci "^1.0.10" load-json-file "^2.0.0" lodash "^4.17.4" - meow "^3.7.0" - minimatch "^3.0.0" + minimatch "^3.0.4" + npmlog "^4.1.0" + p-finally "^1.0.0" path-exists "^3.0.0" - progress "^2.0.0" read-cmd-shim "^1.0.1" read-pkg "^2.0.0" rimraf "^2.6.1" + safe-buffer "^5.0.1" semver "^5.1.0" signal-exit "^3.0.2" - write-json-file "^2.0.0" - write-pkg "^2.1.0" + strong-log-transformer "^1.0.6" + temp-write "^3.3.0" + write-file-atomic "^2.1.0" + write-json-file "^2.1.0" + write-pkg "^3.0.1" + yargs "^8.0.1" less-loader@^4.0.2: version "4.0.5" @@ -3654,7 +3738,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^3.8.0: +lodash@^3.7.0, lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -3763,6 +3847,12 @@ media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -3868,6 +3958,10 @@ minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + mixin-object@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" @@ -3889,6 +3983,10 @@ module-alias@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.0.0.tgz#9bff2cba6eb181dac8e379d69fe34b066a970988" +moment@^2.6.0: + version "2.18.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -3905,14 +4003,6 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -mz@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nan@^2.3.0, nan@^2.3.2: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -3945,6 +4035,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-gyp@^3.3.1: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" @@ -4081,7 +4178,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -4189,6 +4286,17 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +opencollective@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" + dependencies: + babel-polyfill "6.23.0" + chalk "1.1.3" + inquirer "3.0.6" + minimist "1.2.0" + node-fetch "1.6.3" + opn "4.0.2" + opn@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" @@ -4242,6 +4350,14 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.0.0.tgz#15918ded510522b81ee7ae5a309d54f639fc39a4" + dependencies: + execa "^0.5.0" + lcid "^1.0.0" + mem "^1.1.0" + os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -4405,7 +4521,7 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4754,10 +4870,6 @@ process@^0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -4911,6 +5023,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -5406,6 +5525,15 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shell-quote@^1.4.3: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + signal-exit@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-2.1.2.tgz#375879b1f92ebc3b334480d038dc546a6d558564" @@ -5501,12 +5629,18 @@ sorcery@^0.10.0: sander "^0.5.0" sourcemap-codec "^1.3.0" -sort-keys@^1.0.0, sort-keys@^1.1.1, sort-keys@^1.1.2: +sort-keys@^1.0.0, sort-keys@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" dependencies: is-plain-obj "^1.0.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" @@ -5728,6 +5862,16 @@ strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +strong-log-transformer@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz#f7fb93758a69a571140181277eea0c2eb1301fa3" + dependencies: + byline "^5.0.0" + duplexer "^0.1.1" + minimist "^0.1.0" + moment "^2.6.0" + through "^2.3.4" + style-loader@^0.13.1: version "0.13.2" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" @@ -5810,6 +5954,21 @@ tar@^2.0.0, tar@^2.2.1: fstream "^1.0.2" inherits "2" +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + +temp-write@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.3.0.tgz#c1a96de2b36061342eae81f44ff001aec8f615a9" + dependencies: + graceful-fs "^4.1.2" + is-stream "^1.1.0" + make-dir "^1.0.0" + pify "^2.2.0" + temp-dir "^1.0.0" + uuid "^3.0.1" + temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -5844,18 +6003,6 @@ text-extensions@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.4.0.tgz#c385d2e80879fe6ef97893e1709d88d9453726e9" -thenify-all@^1.0.0, thenify-all@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.2.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" - dependencies: - any-promise "^1.0.0" - through2@^2.0.0, through2@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -5863,7 +6010,7 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@X.X.X, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@X.X.X, through@^2.3.4, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -6187,6 +6334,10 @@ uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +uuid@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + v8flags@^2.0.11: version "2.0.11" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" @@ -6377,6 +6528,10 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + which@1, which@^1.2.1, which@^1.2.4, which@^1.2.9: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" @@ -6399,6 +6554,10 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +window-size@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + wordwrap@0.0.2, wordwrap@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -6414,7 +6573,7 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.2, write-file-atomic@^1.1.4: +write-file-atomic@^1.1.4: version "1.3.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" dependencies: @@ -6422,7 +6581,7 @@ write-file-atomic@^1.1.2, write-file-atomic@^1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write-file-atomic@^2.0.0: +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37" dependencies: @@ -6430,22 +6589,23 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" slide "^1.1.5" -write-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.0.0.tgz#0eaec981fcf9288dbc2806cbd26e06ab9bdca4ed" +write-json-file@^2.1.0, write-json-file@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.2.0.tgz#51862506bbb3b619eefab7859f1fd6c6d0530876" dependencies: + detect-indent "^5.0.0" graceful-fs "^4.1.2" - mkdirp "^0.5.1" + make-dir "^1.0.0" pify "^2.0.0" sort-keys "^1.1.1" - write-file-atomic "^1.1.2" + write-file-atomic "^2.0.0" -write-pkg@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-2.1.0.tgz#353aa44c39c48c21440f5c08ce6abd46141c9c08" +write-pkg@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.1.0.tgz#030a9994cc9993d25b4e75a9f1a1923607291ce9" dependencies: - sort-keys "^1.1.2" - write-json-file "^2.0.0" + sort-keys "^2.0.0" + write-json-file "^2.2.0" ws@1.1.1: version "1.1.1" @@ -6509,7 +6669,7 @@ xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -y18n@^3.2.1: +y18n@^3.2.0, y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -6529,6 +6689,24 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@^3.7.2: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + dependencies: + 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" + yargs@^6.0.0, yargs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -6565,6 +6743,24 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yargs@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"