From 998b2e6686785038efad8229cf2e15a3de906507 Mon Sep 17 00:00:00 2001 From: Simeon Cheeseman Date: Mon, 7 May 2018 10:55:44 +0900 Subject: [PATCH 01/46] fixes HOC displayName for observer and inject Uses the convention for HOC display names as outlined in the React documentation. Closes #466 --- src/inject.js | 15 ++++++------ src/observer.js | 8 ++++++- test/inject.test.js | 56 ++++++++++++++++++++++++++++++++++++++++++- test/observer.test.js | 15 ++++++++++++ 4 files changed, 85 insertions(+), 9 deletions(-) diff --git a/src/inject.js b/src/inject.js index 34d9d4ed..80acc83c 100644 --- a/src/inject.js +++ b/src/inject.js @@ -34,13 +34,14 @@ const proxiedInjectorProps = { * Store Injection */ function createStoreInjector(grabStoresFn, component, injectNames) { - let displayName = - "inject-" + - (component.displayName || - component.name || - (component.constructor && component.constructor.name) || - "Unknown") - if (injectNames) displayName += "-with-" + injectNames + let displayName + const componentName = + component.displayName || + component.name || + (component.constructor && component.constructor.name) || + "Component" + if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")" + else displayName = "inject(" + componentName + ")" class Injector extends Component { static displayName = displayName diff --git a/src/observer.js b/src/observer.js index 5b348d42..e855faa9 100644 --- a/src/observer.js +++ b/src/observer.js @@ -317,7 +317,9 @@ export function observer(arg1, arg2) { ) { const observerComponent = observer( class extends Component { - static displayName = componentClass.displayName || componentClass.name + static displayName = "observer(" + + (componentClass.displayName || componentClass.name) + + ")" static contextTypes = componentClass.contextTypes static propTypes = componentClass.propTypes static defaultProps = componentClass.defaultProps @@ -335,6 +337,10 @@ export function observer(arg1, arg2) { } const target = componentClass.prototype || componentClass + if (!componentClass.displayName || !componentClass.displayName.match(/observer\(/)) { + componentClass.displayName = + "observer(" + (componentClass.displayName || componentClass.name) + ")" + } mixinLifecycleEvents(target) componentClass.isMobXReactObserver = true const baseRender = target.render diff --git a/test/inject.test.js b/test/inject.test.js index 0961612f..383638ea 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -51,6 +51,60 @@ describe("inject based context", () => { expect(wrapper.find("div").text()).toEqual("context:42") }) + test("wraps displayName of original component", () => { + const A = inject("foo")( + createClass({ + displayName: "ComponentA", + render() { + return
context:{this.props.foo}
+ } + }) + ) + const B = inject()( + createClass({ + displayName: "ComponentB", + render() { + return
context:{this.props.foo}
+ } + }) + ) + const C = inject(() => ({}))( + createClass({ + displayName: "ComponentC", + render() { + return
context:{this.props.foo}
+ } + }) + ) + expect( + mount( + + + + ) + .children() + .get(0).type.displayName + ).toEqual("inject-with-foo(ComponentA)") + expect( + mount( + + + + ) + .children() + .get(0).type.displayName + ).toEqual("inject(ComponentB)") + expect( + mount( + + + + ) + .children() + .get(0).type.displayName + ).toEqual("observer(inject(ComponentC))") + }) + test("overriding stores is supported", () => { const C = inject("foo", "bar")( observer( @@ -315,7 +369,7 @@ describe("inject based context", () => { mount() expect(msg.length).toBe(2) expect(msg[0].split("\n")[0]).toBe( - "Warning: Failed prop type: The prop `x` is marked as required in `inject-C-with-foo`, but its value is `undefined`." + "Warning: Failed prop type: The prop `x` is marked as required in `inject-with-foo(C)`, but its value is `undefined`." ) expect(msg[1].split("\n")[0]).toBe( "Warning: Failed prop type: The prop `a` is marked as required in `C`, but its value is `undefined`." diff --git a/test/observer.test.js b/test/observer.test.js index 0b973988..64ee7ec1 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -14,6 +14,7 @@ import { asyncRender } from "./" import ErrorCatcher from "./ErrorCatcher" +import { mount } from "enzyme" /** * some test suite is too tedious @@ -323,6 +324,20 @@ test("observer component can be injected", () => { console.warn = baseWarn }) +test("correctly wraps display name of child component", () => { + const A = observer( + createClass({ + displayName: "ObserverClass", + render: () => null + }) + ) + const B = observer(function StatelessObserver() { + return null + }) + expect(mount().get(0).type.displayName).toEqual("observer(ObserverClass)") + expect(mount().get(0).type.displayName).toEqual("observer(StatelessObserver)") +}) + describe("124 - react to changes in this.props via computed", () => { const Comp = observer( createClass({ From 6f8138c4f10014f9052623523c5f1385263d0f6f Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 09:29:07 +0100 Subject: [PATCH 02/46] Started V6 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 979568d2..d0e1f328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # MobX-React Changelog +### 6.0.0 + +**Breaking changes** + +**Improvements** + +**Migration guide** + ### 5.4.3 * Fixed [#612](/~https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case. From b2664420a92dcbaf04a8b7c93f8ffe21e083f816 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 09:31:57 +0100 Subject: [PATCH 03/46] Upgraded React to 16.8.0 --- CHANGELOG.md | 2 ++ package.json | 4 ++-- yarn.lock | 28 ++++++++++++++++++---------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0e1f328..340c949d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ **Breaking changes** +* The minimum support version of React is 16.8.0 + **Improvements** **Migration guide** diff --git a/package.json b/package.json index 636541fe..0fd38d85 100644 --- a/package.json +++ b/package.json @@ -54,8 +54,8 @@ "opn-cli": "^3.1.0", "prettier": "^1.7.2", "prop-types": "^15.6.0", - "react": "^16.6.3", - "react-dom": "^16.6.3", + "react": "^16.8.0", + "react-dom": "^16.8.0", "react-test-renderer": "^16.6.3", "regenerator-runtime": "^0.12.1", "request": "^2.83.0", diff --git a/yarn.lock b/yarn.lock index b83ebfcb..1d80b6a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4549,15 +4549,15 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0" - integrity sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ== +react-dom@^16.8.0: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" + integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.2" + scheduler "^0.13.1" react-is@^16.3.2, react-is@^16.6.3: version "16.6.3" @@ -4594,15 +4594,15 @@ react-test-renderer@^16.6.3: react-is "^16.6.3" scheduler "^0.11.2" -react@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c" - integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw== +react@^16.8.0: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" + integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.2" + scheduler "^0.13.1" read-pkg-up@^1.0.1: version "1.0.1" @@ -5016,6 +5016,14 @@ scheduler@^0.11.2: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.1.tgz#1a217df1bfaabaf4f1b92a9127d5d732d85a9591" + integrity sha512-VJKOkiKIN2/6NOoexuypwSrybx13MY7NSy9RNt8wPvZDMRT1CW6qlpF5jXRToXNHz3uWzbm2elNpZfXfGPqP9A== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" From ac24719852784847dd3b473a54eb9f82ef4882bd Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 10:19:03 +0100 Subject: [PATCH 04/46] Killed the `observer` overload that accepts store names` for auto inject --- CHANGELOG.md | 1 + src/index.d.ts | 4 - src/observer.js | 23 +---- test/context.test.js | 194 +++++++++++++++++++++---------------------- 4 files changed, 95 insertions(+), 127 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 340c949d..ff3447be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ **Breaking changes** * The minimum support version of React is 16.8.0 +* Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. **Improvements** diff --git a/src/index.d.ts b/src/index.d.ts index 62a2284b..41ab6570 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -12,10 +12,6 @@ export type IReactComponent

= * Observer */ -// Deprecated: observer with with stores (as decorator) -export function observer(stores: string[]): (clazz: T) => void -// Deprecated: observer with with stores -export function observer(stores: string[], clazz: T): T export function observer(target: T): T /** diff --git a/src/observer.js b/src/observer.js index 43810aa5..d990dd19 100644 --- a/src/observer.js +++ b/src/observer.js @@ -290,28 +290,7 @@ function makeObservableProp(target, propName) { /** * Observer function / decorator */ -export function observer(arg1, arg2) { - if (typeof arg1 === "string") { - throw new Error("Store names should be provided as array") - } - if (Array.isArray(arg1)) { - // TODO: remove in next major - // component needs stores - if (!warnedAboutObserverInjectDeprecation) { - warnedAboutObserverInjectDeprecation = true - console.warn( - 'Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject("store1", "store2") @observer ComponentClass` or `inject("store1", "store2")(observer(componentClass))` instead of `@observer(["store1", "store2"]) ComponentClass`' - ) - } - if (!arg2) { - // invoked as decorator - return componentClass => observer(arg1, componentClass) - } else { - return inject.apply(null, arg1)(observer(arg2)) - } - } - const componentClass = arg1 - +export function observer(componentClass) { if (componentClass.isMobxInjector === true) { console.warn( "Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'" diff --git a/test/context.test.js b/test/context.test.js index a4c0664d..b2c300bf 100644 --- a/test/context.test.js +++ b/test/context.test.js @@ -14,35 +14,20 @@ describe("observer based context", () => { expect(sum).toBe(3) }) - test("using observer to inject throws warning", done => { - const w = console.warn - const warns = [] - console.warn = msg => warns.push(msg) - - observer(["test"], () => null) - - expect(warns.length).toBe(1) - expect(warns[0]).toBe( - 'Mobx observer: Using observer to inject stores is deprecated since 4.0. Use `@inject("store1", "store2") @observer ComponentClass` or `inject("store1", "store2")(observer(componentClass))` instead of `@observer(["store1", "store2"]) ComponentClass`' - ) - - console.warn = w - done() - }) - test("basic context", done => { - const C = observer( - ["foo"], - createClass({ - render() { - return ( -

- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = () => const A = () => ( @@ -56,18 +41,19 @@ describe("observer based context", () => { }) test("props override context", done => { - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = () => const A = () => ( @@ -81,19 +67,20 @@ describe("observer based context", () => { }) test("overriding stores is supported", done => { - const C = observer( - ["foo", "bar"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} - {this.props.bar} -
- ) - } - }) + const C = inject("foo", "bar")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} + {this.props.bar} +
+ ) + } + }) + ) ) const B = () => const A = () => ( @@ -137,18 +124,19 @@ describe("observer based context", () => { }) test("store should be available", done => { - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = () => ( @@ -172,18 +160,19 @@ describe("observer based context", () => { }) test("store is not required if prop is available", done => { - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = () => const wrapper = mount() @@ -196,18 +185,19 @@ describe("observer based context", () => { const baseWarn = console.warn console.warn = m => (msg = m) const a = mobx.observable.box(3) - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = observer( createClass({ @@ -244,18 +234,19 @@ describe("observer based context", () => { const baseWarn = console.warn console.warn = m => (msg = m) const a = mobx.observable.box(3) - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = observer( createClass({ @@ -300,6 +291,7 @@ test.skip("no warnings in modern react", () => { return (
{this.props.store} + {box.get()} + ["foo"],
) } From 61ae046635fd068d0363f2de2f13959262e1cbf4 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 10:24:36 +0100 Subject: [PATCH 05/46] Make sure reactions / components stof if a component throws exception (if it needs to be brought back alive use error boundaries) --- CHANGELOG.md | 1 + src/observer.js | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff3447be..aa6d61e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * The minimum support version of React is 16.8.0 * Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. +* `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. **Improvements** diff --git a/src/observer.js b/src/observer.js index d990dd19..9443d55a 100644 --- a/src/observer.js +++ b/src/observer.js @@ -147,6 +147,7 @@ function makeComponentReactive(render) { } }) if (exception) { + reaction.dispose() errorsReporter.emit(exception) throw exception } From 886cb96a5c372493de697b8e35dfc53b5aeaa9a2 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 10:27:37 +0100 Subject: [PATCH 06/46] Fixed broken inject test --- test/inject.test.js | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/test/inject.test.js b/test/inject.test.js index a934a282..2ed20e98 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -171,18 +171,19 @@ describe("inject based context", () => { const baseWarn = console.warn console.warn = m => (msg = m) const a = mobx.observable.box(3) - const C = observer( - ["foo"], - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) + const C = inject("foo")( + observer( + createClass({ + render() { + return ( +
+ context: + {this.props.foo} +
+ ) + } + }) + ) ) const B = observer( createClass({ From bf54f75f28cbd471f96155de6e9b7cc5f7eaf4a7 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 11:37:00 +0100 Subject: [PATCH 07/46] Implemented forwardRefs. Fixes #616 / #619 --- CHANGELOG.md | 1 + src/index.d.ts | 1 - src/inject.js | 74 ++++++++++++++++++------------------------- test/inject.test.js | 49 ++++++++++++++++++++++------ test/observer.test.js | 24 -------------- 5 files changed, 72 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa6d61e3..b4fc8394 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * The minimum support version of React is 16.8.0 * Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. * `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. +* `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. **Improvements** diff --git a/src/index.d.ts b/src/index.d.ts index 41ab6570..fae93079 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -27,7 +27,6 @@ export type IStoresToProps< export type IWrappedComponent

= { wrappedComponent: IReactComponent

- wrappedInstance: React.ReactInstance | undefined } // Ideally we would want to return React.ComponentClass>, diff --git a/src/inject.js b/src/inject.js index 34d9d4ed..d1f70842 100644 --- a/src/inject.js +++ b/src/inject.js @@ -1,4 +1,4 @@ -import { Component, createElement } from "react" +import React, { Component, createElement } from "react" import hoistStatics from "hoist-non-react-statics" import * as PropTypes from "./propTypes" import { observer } from "./observer" @@ -33,7 +33,7 @@ const proxiedInjectorProps = { /** * Store Injection */ -function createStoreInjector(grabStoresFn, component, injectNames) { +function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) { let displayName = "inject-" + (component.displayName || @@ -43,42 +43,36 @@ function createStoreInjector(grabStoresFn, component, injectNames) { if (injectNames) displayName += "-with-" + injectNames class Injector extends Component { - static displayName = displayName - - storeRef = instance => { - this.wrappedInstance = instance - } - render() { // Optimization: it might be more efficient to apply the mapper function *outside* the render method // (if the mapper is a function), that could avoid expensive(?) re-rendering of the injector component // See this test: 'using a custom injector is not too reactive' in inject.js - let newProps = {} - for (let key in this.props) - if (this.props.hasOwnProperty(key)) { - newProps[key] = this.props[key] - } - var additionalProps = - grabStoresFn(this.context.mobxStores || {}, newProps, this.context) || {} - for (let key in additionalProps) { - newProps[key] = additionalProps[key] - } + const { forwardRef, ...props } = this.props - if (!isStateless(component)) { - newProps.ref = this.storeRef + Object.assign( + props, + grabStoresFn(this.context.mobxStores || {}, props, this.context) || {} + ) + + if (forwardRef && !isStateless(component)) { + props.ref = this.props.forwardRef } - return createElement(component, newProps) + return createElement(component, props) } } - - // Static fields from component should be visible on the generated Injector - hoistStatics(Injector, component) - - Injector.wrappedComponent = component + if (makeReactive) Injector = observer(Injector) Object.defineProperties(Injector, proxiedInjectorProps) - return Injector + // Support forward refs + const InjectHocRef = React.forwardRef((props, ref) => + React.createElement(Injector, { ...props, forwardRef: ref }) + ) + // Static fields from component should be visible on the generated Injector + hoistStatics(InjectHocRef, component) + InjectHocRef.wrappedComponent = component + InjectHocRef.displayName = displayName + return InjectHocRef } function grabStoresByName(storeNames) { @@ -106,25 +100,19 @@ function grabStoresByName(storeNames) { * or a function that manually maps the available stores from the context to props: * storesToProps(mobxStores, props, context) => newProps */ -export default function inject(/* fn(stores, nextProps) or ...storeNames */) { +export default function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames) { let grabStoresFn if (typeof arguments[0] === "function") { grabStoresFn = arguments[0] - return function(componentClass) { - let injected = createStoreInjector(grabStoresFn, componentClass) - injected.isMobxInjector = false // supress warning - // mark the Injector as observer, to make it react to expressions in `grabStoresFn`, - // see #111 - injected = observer(injected) - injected.isMobxInjector = true // restore warning - return injected - } + return componentClass => + createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true) } else { - const storeNames = [] - for (let i = 0; i < arguments.length; i++) storeNames[i] = arguments[i] - grabStoresFn = grabStoresByName(storeNames) - return function(componentClass) { - return createStoreInjector(grabStoresFn, componentClass, storeNames.join("-")) - } + return componentClass => + createStoreInjector( + grabStoresByName(storeNames), + componentClass, + storeNames.join("-"), + false + ) } } diff --git a/test/inject.test.js b/test/inject.test.js index 2ed20e98..8f68918e 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -7,6 +7,7 @@ import * as mobx from "mobx" import { action, observable, computed } from "mobx" import { observer, inject, Provider } from "../src" import { createTestRoot, sleepHelper, withConsole } from "./index" +import renderer from "react-test-renderer" const testRoot = createTestRoot() @@ -14,7 +15,7 @@ describe("inject based context", () => { test("basic context", () => { const C = inject("foo")( observer( - createClass({ + class X extends React.Component { render() { return (

@@ -23,7 +24,7 @@ describe("inject based context", () => {
) } - }) + } ) ) const B = () => @@ -254,7 +255,34 @@ describe("inject based context", () => { expect(wrapper.find("div").text()).toBe("context:bar84") }) - test("support static hoisting, wrappedComponent and wrappedInstance", async () => { + test("inject forwards ref", async () => { + class FancyComp extends React.Component { + render() { + this.didRender = true + return null + } + + doSomething() {} + } + + const ref = React.createRef() + const component = renderer.create() + expect(typeof ref.current.doSomething).toBe("function") + expect(ref.current.didRender).toBe(true) + + const InjectedFancyComp = inject("bla")(FancyComp) + const ref2 = React.createRef() + + const component2 = renderer.create( + + + + ) + expect(typeof ref2.current.doSomething).toBe("function") + expect(ref2.current.didRender).toBe(true) + }) + + test("support static hoisting, wrappedComponent and ref forwarding", async () => { class B extends React.Component { render() { this.testField = 1 @@ -273,16 +301,18 @@ describe("inject based context", () => { expect(C.bla2 === B.bla2).toBeTruthy() expect(Object.keys(C.wrappedComponent.propTypes)).toEqual(["x"]) - const wrapper = mount() - await sleepHelper(10) - expect(wrapper.instance().wrappedInstance.testField).toBe(1) + const ref = React.createRef() + + const wrapper = renderer.create() + expect(ref.current.testField).toBe(1) }) - test("warning is printed when attaching contextTypes to HOC", () => { + test.skip("warning is printed when attaching contextTypes to HOC", () => { + // TODO: can be removed once using modern context? const msg = [] const baseWarn = console.warn console.warn = m => msg.push(m) - const C = inject(["foo"])( + const C = inject("foo")( createClass({ displayName: "C", render() { @@ -324,6 +354,7 @@ describe("inject based context", () => { displayName: "C", render() { expect(this.props.y).toEqual(3) + expect(this.props.x).toBeUndefined() return null } @@ -398,7 +429,7 @@ describe("inject based context", () => { console.warn = baseWarn }) - test("using a custom injector is reactive", () => { + test("using a custom injector is reactive", async () => { const user = mobx.observable({ name: "Noa" }) const mapper = stores => ({ name: stores.user.name }) const DisplayName = props =>

{props.name}

diff --git a/test/observer.test.js b/test/observer.test.js index 52f30d56..74ed29e7 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -276,30 +276,6 @@ test("changing state in render should fail", () => { mobx._resetGlobalState() }) -test("component should not be inject", () => { - const msg = [] - const baseWarn = console.warn - console.warn = m => msg.push(m) - - observer( - inject("foo")( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - - expect(msg.length).toBe(1) - console.warn = baseWarn -}) - test("observer component can be injected", () => { const msg = [] const baseWarn = console.warn From 825056c9365bf7547980c2db08e9d5b093454267 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 11:45:59 +0100 Subject: [PATCH 08/46] Better links in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4fc8394..e1f766fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ * The minimum support version of React is 16.8.0 * Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. * `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. -* `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. +* `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) **Improvements** From cd9977ec568c35e716e9f78fc8266c30f59f1f7e Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 11:50:25 +0100 Subject: [PATCH 09/46] Killed life-cycle compat --- package.json | 3 +-- src/Provider.js | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 0fd38d85..b350235a 100644 --- a/package.json +++ b/package.json @@ -72,8 +72,7 @@ "typescript": "^2.6.0" }, "dependencies": { - "hoist-non-react-statics": "^3.0.0", - "react-lifecycles-compat": "^3.0.2" + "hoist-non-react-statics": "^3.0.0" }, "keywords": [ "mobx", diff --git a/src/Provider.js b/src/Provider.js index 3443ec2b..54d4cb84 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -1,5 +1,4 @@ import { Children, Component } from "react" -import { polyfill } from "react-lifecycles-compat" import * as PropTypes from "./propTypes" const specialReactKeys = { children: true, key: true, ref: true } @@ -68,7 +67,4 @@ function validStoreName(key) { return !specialReactKeys[key] && key !== "suppressChangedStoreWarning" } -// TODO: kill in next major -polyfill(Provider) - export default Provider From 5cd7b53da1083abc2168334fbc7b052f08d40357 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:04:58 +0100 Subject: [PATCH 10/46] Basic implementation for modern context --- src/Provider.js | 38 ++++++++++++++++++-------------------- src/inject.js | 10 +++++----- 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/Provider.js b/src/Provider.js index 54d4cb84..58ad7fdd 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -1,17 +1,11 @@ -import { Children, Component } from "react" +import { Children, Component, createContext, createElement } from "react" import * as PropTypes from "./propTypes" const specialReactKeys = { children: true, key: true, ref: true } -class Provider extends Component { - static contextTypes = { - mobxStores: PropTypes.objectOrObservableObject - } - - static childContextTypes = { - mobxStores: PropTypes.objectOrObservableObject.isRequired - } +export const MobXProviderContext = createContext({}) +class Provider extends Component { constructor(props, context) { super(props, context) this.state = {} @@ -19,19 +13,23 @@ class Provider extends Component { } render() { - return Children.only(this.props.children) + return createElement( + MobXProviderContext.Provider, + { value: this.state }, + Children.only(this.props.children) + ) } - getChildContext() { - const stores = {} - // inherit stores - copyStores(this.context.mobxStores, stores) - // add own stores - copyStores(this.props, stores) - return { - mobxStores: stores - } - } + // getChildContext() { + // const stores = {} + // // inherit stores + // copyStores(this.context.mobxStores, stores) + // // add own stores + // copyStores(this.props, stores) + // return { + // mobxStores: stores + // } + // } static getDerivedStateFromProps(nextProps, prevState) { if (!nextProps) return null diff --git a/src/inject.js b/src/inject.js index d1f70842..e029c0c2 100644 --- a/src/inject.js +++ b/src/inject.js @@ -3,6 +3,7 @@ import hoistStatics from "hoist-non-react-statics" import * as PropTypes from "./propTypes" import { observer } from "./observer" import { isStateless } from "./utils/utils" +import { MobXProviderContext } from "./Provider" const injectorContextTypes = { mobxStores: PropTypes.objectOrObservableObject @@ -43,16 +44,15 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) if (injectNames) displayName += "-with-" + injectNames class Injector extends Component { + static contextType = MobXProviderContext + render() { // Optimization: it might be more efficient to apply the mapper function *outside* the render method - // (if the mapper is a function), that could avoid expensive(?) re-rendering of the injector component + // (if the mapper is a function), that could avMobXProviderContextoid expensive(?) re-rendering of the injector component // See this test: 'using a custom injector is not too reactive' in inject.js const { forwardRef, ...props } = this.props - Object.assign( - props, - grabStoresFn(this.context.mobxStores || {}, props, this.context) || {} - ) + Object.assign(props, grabStoresFn(this.context || {}, props, this.context) || {}) if (forwardRef && !isStateless(component)) { props.ref = this.props.forwardRef From 840a2f173232d53f69458bb13cf05bf00babe3ab Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:10:11 +0100 Subject: [PATCH 11/46] moved `shallowEqual` and `is` utilities --- src/inject.js | 28 +--------------------------- src/observer.js | 28 +--------------------------- src/utils/utils.js | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 54 deletions(-) diff --git a/src/inject.js b/src/inject.js index e029c0c2..9dd5ee02 100644 --- a/src/inject.js +++ b/src/inject.js @@ -5,32 +5,6 @@ import { observer } from "./observer" import { isStateless } from "./utils/utils" import { MobXProviderContext } from "./Provider" -const injectorContextTypes = { - mobxStores: PropTypes.objectOrObservableObject -} -Object.seal(injectorContextTypes) - -const proxiedInjectorProps = { - contextTypes: { - get: function() { - return injectorContextTypes - }, - set: function(_) { - console.warn( - "Mobx Injector: you are trying to attach `contextTypes` on an component decorated with `inject` (or `observer`) HOC. Please specify the contextTypes on the wrapped component instead. It is accessible through the `wrappedComponent`" - ) - }, - configurable: true, - enumerable: false - }, - isMobxInjector: { - value: true, - writable: true, - configurable: true, - enumerable: true - } -} - /** * Store Injection */ @@ -45,6 +19,7 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) class Injector extends Component { static contextType = MobXProviderContext + static isMobxInjector = true render() { // Optimization: it might be more efficient to apply the mapper function *outside* the render method @@ -62,7 +37,6 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) } } if (makeReactive) Injector = observer(Injector) - Object.defineProperties(Injector, proxiedInjectorProps) // Support forward refs const InjectHocRef = React.forwardRef((props, ref) => diff --git a/src/observer.js b/src/observer.js index 9443d55a..32682ab4 100644 --- a/src/observer.js +++ b/src/observer.js @@ -5,7 +5,7 @@ import { findDOMNode as baseFindDOMNode } from "react-dom" import EventEmitter from "./utils/EventEmitter" import inject from "./inject" -import { patch as newPatch, newSymbol } from "./utils/utils" +import { patch as newPatch, newSymbol, shallowEqual } from "./utils/utils" const mobxAdminProperty = $mobx || "$mobx" const mobxIsUnmounted = newSymbol("isUnmounted") @@ -100,32 +100,6 @@ function patch(target, funcName) { newPatch(target, funcName, reactiveMixin[funcName]) } -function shallowEqual(objA, objB) { - //From: /~https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js - if (is(objA, objB)) return true - if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { - return false - } - const keysA = Object.keys(objA) - const keysB = Object.keys(objB) - if (keysA.length !== keysB.length) return false - for (let i = 0; i < keysA.length; i++) { - if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { - return false - } - } - return true -} - -function is(x, y) { - // From: /~https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js - if (x === y) { - return x !== 0 || 1 / x === 1 / y - } else { - return x !== x && y !== y - } -} - function makeComponentReactive(render) { if (isUsingStaticRendering === true) return render.call(this) diff --git a/src/utils/utils.js b/src/utils/utils.js index 72509f4e..33231a13 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -112,3 +112,29 @@ function createDefinition(target, methodName, enumerable, mixins, originalMethod enumerable: enumerable } } + +export function shallowEqual(objA, objB) { + //From: /~https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js + if (is(objA, objB)) return true + if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { + return false + } + const keysA = Object.keys(objA) + const keysB = Object.keys(objB) + if (keysA.length !== keysB.length) return false + for (let i = 0; i < keysA.length; i++) { + if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { + return false + } + } + return true +} + +function is(x, y) { + // From: /~https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js + if (x === y) { + return x !== 0 || 1 / x === 1 / y + } else { + return x !== x && y !== y + } +} From a64c2d365300f669463c0f7d9fcde42337207807 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:27:16 +0100 Subject: [PATCH 12/46] `Provider`: Forbid changing stores --- CHANGELOG.md | 1 + src/Provider.js | 22 +++++----------------- test/__snapshots__/inject.test.js.snap | 8 ++++++++ test/inject.test.js | 19 +++++++++---------- 4 files changed, 23 insertions(+), 27 deletions(-) create mode 100644 test/__snapshots__/inject.test.js.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index e1f766fe..f0fc4480 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. * `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. * `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) +* Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. **Improvements** diff --git a/src/Provider.js b/src/Provider.js index 58ad7fdd..aba5c115 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -1,5 +1,5 @@ import { Children, Component, createContext, createElement } from "react" -import * as PropTypes from "./propTypes" +import { shallowEqual } from "./utils/utils" const specialReactKeys = { children: true, key: true, ref: true } @@ -35,23 +35,12 @@ class Provider extends Component { if (!nextProps) return null if (!prevState) return nextProps - // Maybe this warning is too aggressive? - if ( - Object.keys(nextProps).filter(validStoreName).length !== - Object.keys(prevState).filter(validStoreName).length - ) - console.warn( + const baseStores = { ...prevState, ...specialReactKeys } // mix in specialReactKeys, so that they are ignored in the diff + const newStores = { ...nextProps, ...specialReactKeys } + if (!shallowEqual(baseStores, newStores)) + throw new Error( "MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" ) - if (!nextProps.suppressChangedStoreWarning) - for (let key in nextProps) - if (validStoreName(key) && prevState[key] !== nextProps[key]) - console.warn( - "MobX Provider: Provided store '" + - key + - "' has changed. Please avoid replacing stores as the change might not propagate to all children" - ) - return nextProps } } @@ -64,5 +53,4 @@ function copyStores(from, to) { function validStoreName(key) { return !specialReactKeys[key] && key !== "suppressChangedStoreWarning" } - export default Provider diff --git a/test/__snapshots__/inject.test.js.snap b/test/__snapshots__/inject.test.js.snap new file mode 100644 index 00000000..995c3992 --- /dev/null +++ b/test/__snapshots__/inject.test.js.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`inject based context warning is printed when changing stores 1`] = ` +Array [ + "Error: Uncaught [Error: MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children]", + "The above error occurred in the component:", +] +`; diff --git a/test/inject.test.js b/test/inject.test.js index 8f68918e..541c9fc0 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -168,9 +168,9 @@ describe("inject based context", () => { }) test("warning is printed when changing stores", () => { - let msg - const baseWarn = console.warn - console.warn = m => (msg = m) + let msgs = [] + const baseError = console.error + console.error = m => msgs.push(m.split("\n")[0]) // drop stacktraces to avoid line number issues const a = mobx.observable.box(3) const C = inject("foo")( observer( @@ -208,15 +208,14 @@ describe("inject based context", () => { expect(wrapper.find("span").text()).toBe("3") expect(wrapper.find("div").text()).toBe("context:3") - a.set(42) - - expect(wrapper.find("span").text()).toBe("42") - expect(wrapper.find("div").text()).toBe("context:3") - expect(msg).toBe( - "MobX Provider: Provided store 'foo' has changed. Please avoid replacing stores as the change might not propagate to all children" + expect(() => { + a.set(42) + }).toThrow( + "The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" ) + expect(msgs).toMatchSnapshot() // nobody caught the error of the rendering - console.warn = baseWarn + console.error = baseError }) test("custom storesToProps", () => { From 69574680190685c0fe210fe2fc4e8e5b796236d1 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:39:28 +0100 Subject: [PATCH 13/46] Some provider / inject cleanup --- CHANGELOG.md | 1 + src/Provider.js | 26 ++++++++++---------------- src/inject.js | 2 +- test/inject.test.js | 3 +-- 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f0fc4480..6140b5a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. * `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) * Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. +* The third argument of custom `storesToProps` functions passed to `inject` is no longer available. **Improvements** diff --git a/src/Provider.js b/src/Provider.js index aba5c115..00197c1e 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -6,13 +6,8 @@ const specialReactKeys = { children: true, key: true, ref: true } export const MobXProviderContext = createContext({}) class Provider extends Component { - constructor(props, context) { - super(props, context) - this.state = {} - copyStores(props, this.state) - } - render() { + console.log("Provide " + Object.keys(this.state)) return createElement( MobXProviderContext.Provider, { value: this.state }, @@ -32,22 +27,21 @@ class Provider extends Component { // } static getDerivedStateFromProps(nextProps, prevState) { - if (!nextProps) return null - if (!prevState) return nextProps - - const baseStores = { ...prevState, ...specialReactKeys } // mix in specialReactKeys, so that they are ignored in the diff - const newStores = { ...nextProps, ...specialReactKeys } - if (!shallowEqual(baseStores, newStores)) + const newStores = grabStores(nextProps) + if (!prevState) return newStores + if (!shallowEqual(prevState, newStores)) throw new Error( "MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" ) - return nextProps + return newStores } } -function copyStores(from, to) { - if (!from) return - for (let key in from) if (validStoreName(key)) to[key] = from[key] +function grabStores(from) { + const res = {} + if (!from) return res + for (let key in from) if (validStoreName(key)) res[key] = from[key] + return res } function validStoreName(key) { diff --git a/src/inject.js b/src/inject.js index 9dd5ee02..69a4c503 100644 --- a/src/inject.js +++ b/src/inject.js @@ -27,7 +27,7 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) // See this test: 'using a custom injector is not too reactive' in inject.js const { forwardRef, ...props } = this.props - Object.assign(props, grabStoresFn(this.context || {}, props, this.context) || {}) + Object.assign(props, grabStoresFn(this.context || {}, props) || {}) if (forwardRef && !isStateless(component)) { props.ref = this.props.forwardRef diff --git a/test/inject.test.js b/test/inject.test.js index 541c9fc0..2b2b42c6 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -219,8 +219,7 @@ describe("inject based context", () => { }) test("custom storesToProps", () => { - const C = inject((stores, props, context) => { - expect(context).toEqual({ mobxStores: { foo: "bar" } }) + const C = inject((stores, props) => { expect(stores).toEqual({ foo: "bar" }) expect(props).toEqual({ baz: 42 }) return { From b015cd34e14760b7adee5403c3a79a9b4523d385 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:51:31 +0100 Subject: [PATCH 14/46] Removed duplicate context/inject tests --- test/context.test.js | 277 +------------------------------------------ 1 file changed, 1 insertion(+), 276 deletions(-) diff --git a/test/context.test.js b/test/context.test.js index b2c300bf..b9efcd56 100644 --- a/test/context.test.js +++ b/test/context.test.js @@ -8,281 +8,7 @@ import { Provider, observer, inject } from "../src" import { sleepHelper, withConsole } from "./" import TestRenderer from "react-test-renderer" -describe("observer based context", () => { - test("jest test", () => { - const sum = 1 + 2 - expect(sum).toBe(3) - }) - - test("basic context", done => { - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = () => - const A = () => ( - - - - ) - const wrapper = mount(
) - expect(wrapper.find("div").text()).toEqual("context:bar") - done() - }) - - test("props override context", done => { - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = () => - const A = () => ( - - - - ) - const wrapper = mount(
) - expect(wrapper.find("div").text()).toEqual("context:42") - done() - }) - - test("overriding stores is supported", done => { - const C = inject("foo", "bar")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} - {this.props.bar} -
- ) - } - }) - ) - ) - const B = () => - const A = () => ( - -
- - - -
- - - -
-
-
- ) - const wrapper = mount(
) - expect(wrapper.find("span").text()).toEqual("context:bar1337") - expect(wrapper.find("section").text()).toEqual("context:421337") - done() - }) - - //FIXME: this test works correct, but since React in dev always rethrows exception, it is impossible to prevent tape-run from dying on the uncaught exception - // See: /~https://github.com/facebook/react/issues/10474#issuecomment-332810203 - test("ErrorCatcher should work", async () => { - const C = createClass({ - render() { - throw new Error("Oops") - } - }) - const B = () => ( - - - - ) - withConsole(() => { - mount() - }) - await sleepHelper(10) - expect(/Oops/.test(ErrorCatcher.getError())).toBeTruthy() - }) - - test("store should be available", done => { - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = () => ( - - - - ) - const A = () => ( - - - - ) - withConsole(() => { - mount(
) - }) - expect( - /Store 'foo' is not available! Make sure it is provided by some Provider/.test( - ErrorCatcher.getError() - ) - ).toBeTruthy() - done() - }) - - test("store is not required if prop is available", done => { - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = () => - const wrapper = mount() - expect(wrapper.find("div").text()).toEqual("context:bar") - done() - }) - - test("warning is printed when changing stores", done => { - let msg = null - const baseWarn = console.warn - console.warn = m => (msg = m) - const a = mobx.observable.box(3) - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = observer( - createClass({ - render: () => - }) - ) - const A = observer( - createClass({ - render: () => ( -
- {a.get()}, - - - -
- ) - }) - ) - const wrapper = mount(
) - expect(wrapper.find("span").text()).toEqual("3") - expect(wrapper.find("div").text()).toEqual("context:3") - a.set(42) - expect(wrapper.find("span").text()).toEqual("42") - expect(wrapper.find("div").text()).toEqual("context:3") - expect(msg).toEqual( - "MobX Provider: Provided store 'foo' has changed. Please avoid replacing stores as the change might not propagate to all children" - ) - console.warn = baseWarn - done() - }) - - test("warning is not printed when changing stores, but suppressed explicitly", done => { - let msg = null - const baseWarn = console.warn - console.warn = m => (msg = m) - const a = mobx.observable.box(3) - const C = inject("foo")( - observer( - createClass({ - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - ) - const B = observer( - createClass({ - render: () => - }) - ) - const A = observer( - createClass({ - render: () => ( -
- {a.get()}, - - - -
- ) - }) - ) - const wrapper = mount(
) - expect(wrapper.find("span").text()).toEqual("3") - expect(wrapper.find("div").text()).toEqual("context:3") - a.set(42) - expect(wrapper.find("span").text()).toEqual("42") - expect(wrapper.find("div").text()).toEqual("context:3") - expect(msg).toBeNull() - console.warn = baseWarn - done() - }) -}) - -test.skip("no warnings in modern react", () => { - // MWE: 12-12-2018, disabled this test, the premise doesn't really make sense, - // To use Provider / inject in strict-mode: Instead, just leverage React's own - // Context mechanism, and don't use Provider / inject from mobx-react, if you want idiomatic React. - // Provider / inject is just a stop-gap when Context wasn't standardized - // (despite having a really convenient api :)) +test("no warnings in modern react", () => { const box = mobx.observable.box(3) const Child = inject("store")( observer( @@ -291,7 +17,6 @@ test.skip("no warnings in modern react", () => { return (
{this.props.store} + {box.get()} - ["foo"],
) } From bc098c6b62c5e830527e193a6f7fae40282f1fc4 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:52:24 +0100 Subject: [PATCH 15/46] Fixed warning generated by inject --- src/inject.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inject.js b/src/inject.js index 69a4c503..57ee30b6 100644 --- a/src/inject.js +++ b/src/inject.js @@ -19,7 +19,6 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) class Injector extends Component { static contextType = MobXProviderContext - static isMobxInjector = true render() { // Optimization: it might be more efficient to apply the mapper function *outside* the render method @@ -37,6 +36,7 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) } } if (makeReactive) Injector = observer(Injector) + Injector.isMobxInjector = true // assigned late to suppress observer warning // Support forward refs const InjectHocRef = React.forwardRef((props, ref) => From 7e32fc0b3b10bd166d4201f4a45e1b0c4d4daaf2 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 12:52:51 +0100 Subject: [PATCH 16/46] Provider can now redefine / combine stores --- src/Provider.js | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/Provider.js b/src/Provider.js index 00197c1e..a21fc7ad 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -6,8 +6,17 @@ const specialReactKeys = { children: true, key: true, ref: true } export const MobXProviderContext = createContext({}) class Provider extends Component { + static contextType = MobXProviderContext + + constructor(props, context) { + super(props, context) + this.state = { + ...context, + ...grabStores(props) + } + } + render() { - console.log("Provide " + Object.keys(this.state)) return createElement( MobXProviderContext.Provider, { value: this.state }, @@ -15,25 +24,13 @@ class Provider extends Component { ) } - // getChildContext() { - // const stores = {} - // // inherit stores - // copyStores(this.context.mobxStores, stores) - // // add own stores - // copyStores(this.props, stores) - // return { - // mobxStores: stores - // } - // } - static getDerivedStateFromProps(nextProps, prevState) { - const newStores = grabStores(nextProps) - if (!prevState) return newStores + const newStores = { ...prevState, ...grabStores(nextProps) } // spread in prevState for the context based stores if (!shallowEqual(prevState, newStores)) throw new Error( "MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" ) - return newStores + return prevState // because they didn't change, remember! } } From 3327e0f6b9362838597e7d9f451b66bf27696e8c Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Mon, 11 Feb 2019 13:30:23 +0100 Subject: [PATCH 17/46] Some random cleanup --- src/inject.js | 3 -- test/__snapshots__/observer.test.js.snap | 12 +++++++ test/inject.test.js | 39 +------------------- test/observer.test.js | 46 +++++++++++++++++++----- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/inject.js b/src/inject.js index 57ee30b6..2128f36e 100644 --- a/src/inject.js +++ b/src/inject.js @@ -21,9 +21,6 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) static contextType = MobXProviderContext render() { - // Optimization: it might be more efficient to apply the mapper function *outside* the render method - // (if the mapper is a function), that could avMobXProviderContextoid expensive(?) re-rendering of the injector component - // See this test: 'using a custom injector is not too reactive' in inject.js const { forwardRef, ...props } = this.props Object.assign(props, grabStoresFn(this.context || {}, props) || {}) diff --git a/test/__snapshots__/observer.test.js.snap b/test/__snapshots__/observer.test.js.snap index b497e0d4..69ad80c4 100644 --- a/test/__snapshots__/observer.test.js.snap +++ b/test/__snapshots__/observer.test.js.snap @@ -1,5 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`should stop updating if error was thrown in render (#134) 1`] = ` +Array [ + "Error: Hello", + Object { + "componentStack": " + in X + in div (created by Outer) + in Outer", + }, +] +`; + exports[`use Observer inject and render sugar should work use children with inject should be correct 1`] = ` Object { "errors": Array [], diff --git a/test/inject.test.js b/test/inject.test.js index 2b2b42c6..511cee6a 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -305,43 +305,6 @@ describe("inject based context", () => { expect(ref.current.testField).toBe(1) }) - test.skip("warning is printed when attaching contextTypes to HOC", () => { - // TODO: can be removed once using modern context? - const msg = [] - const baseWarn = console.warn - console.warn = m => msg.push(m) - const C = inject("foo")( - createClass({ - displayName: "C", - render() { - return ( -
- context: - {this.props.foo} -
- ) - } - }) - ) - C.propTypes = {} - C.defaultProps = {} - C.contextTypes = {} - - const B = () => - const A = () => ( - - - - ) - mount(
) - expect(msg.length).toBe(1) - expect(msg[0]).toBe( - "Mobx Injector: you are trying to attach `contextTypes` on an component decorated with `inject` (or `observer`) HOC. Please specify the contextTypes on the wrapped component instead. It is accessible through the `wrappedComponent`" - ) - - console.warn = baseWarn - }) - test("propTypes and defaultProps are forwarded", () => { const msg = [] const baseError = console.error @@ -427,7 +390,7 @@ describe("inject based context", () => { console.warn = baseWarn }) - test("using a custom injector is reactive", async () => { + test("using a custom injector is reactive", () => { const user = mobx.observable({ name: "Noa" }) const mapper = stores => ({ name: stores.user.name }) const DisplayName = props =>

{props.name}

diff --git a/test/observer.test.js b/test/observer.test.js index 74ed29e7..dbe1615c 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -357,24 +357,52 @@ describe("124 - react to changes in this.props via computed", () => { test.skip("should stop updating if error was thrown in render (#134)", () => { const data = mobx.observable.box(0) let renderingsCount = 0 + let lastOwnRenderCount = 0 + const errors = [] - const Comp = observer(function() { - renderingsCount += 1 - if (data.get() === 2) { - throw new Error("Hello") + class Outer extends React.Component { + render() { + return
{this.props.children}
} - return
- }) - TestUtils.renderIntoDocument() + componentDidCatch(error, info) { + errors.push(error.toString().split("\n")[0], info) + } + } + + const Comp = observer( + class X extends React.Component { + ownRenderCount = 0 + + render() { + lastOwnRenderCount = ++this.ownRenderCount + renderingsCount++ + if (data.get() === 2) { + throw new Error("Hello") + } + return
+ } + } + ) + + TestUtils.renderIntoDocument( + + + + ) expect(data.observers.size).toBe(1) data.set(1) - expect(data.set(2)).toThrow("Hello") + expect(renderingsCount).toBe(2) + expect(lastOwnRenderCount).toBe(2) + data.set(2) expect(data.observers.size).toBe(0) data.set(3) data.set(4) + data.set(2) data.set(5) - expect(renderingsCount).toBe(3) + expect(errors).toMatchSnapshot() + expect(lastOwnRenderCount).toBe(4) + expect(renderingsCount).toBe(4) }) describe("should render component even if setState called with exactly the same props", () => { From c8212aae83978f56b5bfebb179609942d7d81ff6 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 13 Feb 2019 21:55:35 +0100 Subject: [PATCH 18/46] no longer supports property --- CHANGELOG.md | 1 + src/observer.js | 36 ++++++++++------------- test/observer.test.js | 67 ++++++++++--------------------------------- 3 files changed, 31 insertions(+), 73 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6140b5a3..f727ef02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) * Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. * The third argument of custom `storesToProps` functions passed to `inject` is no longer available. +* `` no longer supports the deprecated `inject` property. **Improvements** diff --git a/src/observer.js b/src/observer.js index 32682ab4..eb162c19 100644 --- a/src/observer.js +++ b/src/observer.js @@ -2,6 +2,7 @@ import React, { Component, PureComponent, forwardRef } from "react" import hoistStatics from "hoist-non-react-statics" import { createAtom, Reaction, _allowStateChanges, $mobx } from "mobx" import { findDOMNode as baseFindDOMNode } from "react-dom" +import { observer as observerLite } from "mobx-react-lite" import EventEmitter from "./utils/EventEmitter" import inject from "./inject" @@ -299,17 +300,18 @@ export function observer(componentClass) { !componentClass.isReactClass && !Component.isPrototypeOf(componentClass) ) { - const observerComponent = observer( - class extends Component { - static displayName = componentClass.displayName || componentClass.name - static contextTypes = componentClass.contextTypes - static propTypes = componentClass.propTypes - static defaultProps = componentClass.defaultProps - render() { - return componentClass.call(this, this.props, this.context) - } - } - ) + const observerComponent = observerLite(componentClass) + // const observerComponent = observer( + // class extends Component { + // static displayName = componentClass.displayName || componentClass.name + // static contextTypes = componentClass.contextTypes + // static propTypes = componentClass.propTypes + // static defaultProps = componentClass.defaultProps + // render() { + // return componentClass.call(this, this.props, this.context) + // } + // } + // ) hoistStatics(observerComponent, componentClass) return observerComponent } @@ -348,20 +350,12 @@ function mixinLifecycleEvents(target) { } } -export const Observer = observer(({ children, inject: observerInject, render }) => { +export const Observer = observer(({ children, render }) => { const component = children || render if (typeof component === "undefined") { return null } - if (!observerInject) { - return component() - } - // TODO: remove in next major - console.warn( - " is no longer supported. Please use inject on the enclosing component instead" - ) - const InjectComponent = inject(observerInject)(component) - return + return component() }) Observer.displayName = "Observer" diff --git a/test/observer.test.js b/test/observer.test.js index dbe1615c..ce785872 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -150,21 +150,25 @@ describe("keep views alive", () => {
) }) - const element = TestUtils.renderIntoDocument() + + beforeAll(async () => { + await asyncReactDOMRender(, testRoot) + }) test("init state", () => { expect(yCalcCount).toBe(1) - expect(TestUtils.findRenderedDOMComponentWithTag(element, "div").innerHTML).toBe("hi6") + expect(testRoot.querySelector("div").innerHTML).toBe("hi6") }) test("rerender should not need a recomputation of data.y", () => { data.z = "hello" expect(yCalcCount).toBe(1) - expect(TestUtils.findRenderedDOMComponentWithTag(element, "div").innerHTML).toBe("hello6") + expect(testRoot.querySelector("div").innerHTML).toBe("hello6") }) }) -describe("does not views alive when using static rendering", () => { +// TODO: fix! `observer` from lite doesn't support static rendering yet +describe.skip("does not views alive when using static rendering", () => { useStaticRendering(true) let renderCount = 0 const data = mobx.observable({ @@ -175,7 +179,10 @@ describe("does not views alive when using static rendering", () => { renderCount++ return
{data.z}
}) - const element = TestUtils.renderIntoDocument() + + beforeAll(async () => { + await asyncReactDOMRender(, testRoot) + }) afterAll(() => { useStaticRendering(false) @@ -183,14 +190,14 @@ describe("does not views alive when using static rendering", () => { test("init state is correct", () => { expect(renderCount).toBe(1) - expect(TestUtils.findRenderedDOMComponentWithTag(element, "div").innerHTML).toBe("hi") + expect(testRoot.querySelector("div").innerHTML).toBe("hi") }) test("no re-rendering on static rendering", () => { data.z = "hello" - expect(renderCount).toBe(1) - expect(TestUtils.findRenderedDOMComponentWithTag(element, "div").innerHTML).toBe("hi") expect(getDNode(data, "z").observers.size).toBe(0) + expect(renderCount).toBe(1) + expect(testRoot.querySelector("div").innerHTML).toBe("hi") }) }) @@ -791,50 +798,6 @@ describe("use Observer inject and render sugar should work ", () => { expect(testRoot.querySelector("span").innerHTML).toBe("123") }) - test("use render with inject should be correct", async () => { - const Comp = () => ( -
- ({ h: store.h, w: store.w })} - render={props => {`${props.h} ${props.w}`}} - /> -
- ) - const A = () => ( - - - - ) - - expect( - await withAsyncConsole(async () => { - await asyncReactDOMRender(
, testRoot) - expect(testRoot.querySelector("span").innerHTML).toBe("hello world") - }) - ).toMatchSnapshot() - }) - - test("use children with inject should be correct", async () => { - const Comp = () => ( -
- ({ h: store.h, w: store.w })}> - {props => {`${props.h} ${props.w}`}} - -
- ) - const A = () => ( - - - - ) - expect( - await withAsyncConsole(async () => { - await asyncReactDOMRender(
, testRoot) - expect(testRoot.querySelector("span").innerHTML).toBe("hello world") - }) - ).toMatchSnapshot() - }) - test("show error when using children and render at same time ", async () => { const msg = [] const baseError = console.error From 2ea0f1504ea498db392b2321aee72bd597b9c9fb Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 08:49:51 +0100 Subject: [PATCH 19/46] WIP: use observer from mobx-react-lite for function components --- package.json | 5 ++-- src/index.js | 2 ++ src/observer.js | 25 ++++++++----------- test/__snapshots__/observer.test.js.snap | 24 ------------------ test/misc.test.js | 31 ++++++++++++++++++------ test/observer.test.js | 3 +-- test/stateless.test.js | 28 +++++++++++---------- yarn.lock | 10 ++++---- 8 files changed, 60 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index b350235a..eeb020ea 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,8 @@ "typescript": "^2.6.0" }, "dependencies": { - "hoist-non-react-statics": "^3.0.0" + "hoist-non-react-statics": "^3.0.0", + "mobx-react-lite": "^1.0.0" }, "keywords": [ "mobx", @@ -96,4 +97,4 @@ "pre-commit": "lint-staged" } } -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js index 290a15f4..283d8aea 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,8 @@ if (!spy) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) +// TODO: re-export mobx-react-lite stuff? + export { observer, Observer, diff --git a/src/observer.js b/src/observer.js index eb162c19..486888d7 100644 --- a/src/observer.js +++ b/src/observer.js @@ -2,10 +2,12 @@ import React, { Component, PureComponent, forwardRef } from "react" import hoistStatics from "hoist-non-react-statics" import { createAtom, Reaction, _allowStateChanges, $mobx } from "mobx" import { findDOMNode as baseFindDOMNode } from "react-dom" -import { observer as observerLite } from "mobx-react-lite" +import { + observer as observerLite, + useStaticRendering as useStaticRenderingLite +} from "mobx-react-lite" import EventEmitter from "./utils/EventEmitter" -import inject from "./inject" import { patch as newPatch, newSymbol, shallowEqual } from "./utils/utils" const mobxAdminProperty = $mobx || "$mobx" @@ -18,8 +20,6 @@ let isDevtoolsEnabled = false let isUsingStaticRendering = false -let warnedAboutObserverInjectDeprecation = false - // WeakMap; export const componentByNodeRegistry = typeof WeakMap !== "undefined" ? new WeakMap() : undefined export const renderReporter = new EventEmitter() @@ -85,6 +85,7 @@ export function trackComponents() { export function useStaticRendering(useStaticRendering) { isUsingStaticRendering = useStaticRendering + useStaticRenderingLite(useStaticRendering) } /** @@ -301,18 +302,11 @@ export function observer(componentClass) { !Component.isPrototypeOf(componentClass) ) { const observerComponent = observerLite(componentClass) - // const observerComponent = observer( - // class extends Component { - // static displayName = componentClass.displayName || componentClass.name - // static contextTypes = componentClass.contextTypes - // static propTypes = componentClass.propTypes - // static defaultProps = componentClass.defaultProps - // render() { - // return componentClass.call(this, this.props, this.context) - // } - // } - // ) + // TODO: move to mobx-react-lite hoistStatics(observerComponent, componentClass) + if (componentClass.propTypes) observerComponent.propTypes = componentClass.propTypes + if (componentClass.defaultProps) + observerComponent.defaultProps = componentClass.defaultProps return observerComponent } @@ -350,6 +344,7 @@ function mixinLifecycleEvents(target) { } } +// TODO: use mobx-react-lite version? export const Observer = observer(({ children, render }) => { const component = children || render if (typeof component === "undefined") { diff --git a/test/__snapshots__/observer.test.js.snap b/test/__snapshots__/observer.test.js.snap index 69ad80c4..0e07e25f 100644 --- a/test/__snapshots__/observer.test.js.snap +++ b/test/__snapshots__/observer.test.js.snap @@ -11,27 +11,3 @@ Array [ }, ] `; - -exports[`use Observer inject and render sugar should work use children with inject should be correct 1`] = ` -Object { - "errors": Array [], - "infos": Array [], - "warnings": Array [ - Array [ - " is no longer supported. Please use inject on the enclosing component instead", - ], - ], -} -`; - -exports[`use Observer inject and render sugar should work use render with inject should be correct 1`] = ` -Object { - "errors": Array [], - "infos": Array [], - "warnings": Array [ - Array [ - " is no longer supported. Please use inject on the enclosing component instead", - ], - ], -} -`; diff --git a/test/misc.test.js b/test/misc.test.js index 5a8c97f8..e02be2fb 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -4,7 +4,7 @@ import ReactDOM from "react-dom" import { mount, shallow } from "enzyme" import * as mobx from "mobx" import { observer } from "../src" -import { createTestRoot, withConsole } from "./index" +import { createTestRoot, withConsole, asyncReactDOMRender } from "./index" const mobxAdminProperty = mobx.$mobx || "$mobx" @@ -18,7 +18,12 @@ describe("custom shouldComponentUpdate is not respected for observable changes ( const x = mobx.observable.box(3) const C = observer( createClass({ - render: () =>
value:{x.get()}
, + render: () => ( +
+ value: + {x.get()} +
+ ), shouldComponentUpdate: () => called++ }) ) @@ -45,7 +50,12 @@ describe("custom shouldComponentUpdate is not respected for observable changes ( const C = observer( createClass({ render() { - return
value:{this.props.y}
+ return ( +
+ value: + {this.props.y} +
+ ) }, shouldComponentUpdate(nextProps) { called++ @@ -131,13 +141,20 @@ test("#85 Should handle state changing in constructors", done => { a.set(3) // one shouldn't do this! return {} }, - render: () =>
child:{a.get()} -
+ render: () => ( +
+ child: + {a.get()} -{" "} +
+ ) }) ) const ParentWrapper = observer(function Parent() { return ( - parent:{a.get()} + + parent: + {a.get()} ) }) @@ -174,9 +191,9 @@ test("testIsComponentReactive", () => { }) test("testGetDNode", () => { - const C = observer(() => null) + const C = observer(() =>
) - const wrapper = mount() + const wrapper = renderer.create() expect(wrapper.instance().render[mobxAdminProperty]).toBeTruthy() expect(mobx.getAtom(wrapper.instance().render)).toBeTruthy() diff --git a/test/observer.test.js b/test/observer.test.js index ce785872..7d4996e0 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -167,8 +167,7 @@ describe("keep views alive", () => { }) }) -// TODO: fix! `observer` from lite doesn't support static rendering yet -describe.skip("does not views alive when using static rendering", () => { +describe("does not views alive when using static rendering", () => { useStaticRendering(true) let renderCount = 0 const data = mobx.observable({ diff --git a/test/stateless.test.js b/test/stateless.test.js index f56d4c86..5f08832d 100644 --- a/test/stateless.test.js +++ b/test/stateless.test.js @@ -5,45 +5,47 @@ import ReactDOM from "react-dom" import TestUtils from "react-dom/test-utils" import * as mobx from "mobx" import { observer, propTypes } from "../src" -import { createTestRoot } from "./index" +import { createTestRoot, asyncReactDOMRender } from "./index" import renderer from "react-test-renderer" import { observable } from "mobx" const testRoot = createTestRoot() -const stateLessComp = ({ testProp }) =>
result: {testProp}
+const StatelessComp = ({ testProp }) =>
result: {testProp}
-stateLessComp.propTypes = { +StatelessComp.propTypes = { testProp: PropTypes.string } -stateLessComp.defaultProps = { +StatelessComp.defaultProps = { testProp: "default value for prop testProp" } describe("stateless component with propTypes", () => { - const StatelessCompObserver = observer(stateLessComp) + const StatelessCompObserver = observer(StatelessComp) + test("default property value should be propagated", () => { + expect(StatelessComp.defaultProps.testProp).toBe("default value for prop testProp") expect(StatelessCompObserver.defaultProps.testProp).toBe("default value for prop testProp") }) + const originalConsoleError = console.error let beenWarned = false console.error = () => (beenWarned = true) const wrapper = console.error = originalConsoleError + test("an error should be logged with a property type warning", () => { expect(beenWarned).toBeTruthy() }) - test("render test correct", () => { - const component = TestUtils.renderIntoDocument( - - ) - expect(TestUtils.findRenderedDOMComponentWithTag(component, "div").innerHTML).toBe( - "result: hello world" - ) + + test("render test correct", async () => { + await asyncReactDOMRender(, testRoot) + expect(testRoot.querySelector("div").innerHTML).toBe("result: hello world") }) }) -test("stateless component with context support", () => { +// TODO: modernize to modern context test +test.skip("stateless component with context support", () => { const StateLessCompWithContext = (props, context) => createElement("div", {}, "context: " + context.testContext) StateLessCompWithContext.contextTypes = { testContext: PropTypes.string } diff --git a/yarn.lock b/yarn.lock index 1d80b6a5..2260400c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3804,6 +3804,11 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mobx-react-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.0.0.tgz#8c07ce18fd505b19e00315d33a8558d415ba9198" + integrity sha512-lfqTgh/gyu1QJ9Os9SygqhNQ1Bs3IEeNXjwGzgOmT+7jB1xdTBlLbJ62hPL5olk5oBX2ZY9Og+WFVMxsl2t84A== + mobx@^5.0.0: version "5.5.0" resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.5.0.tgz#a29f6a7526eed28edcd3f0e921a1edaa8bb22575" @@ -4569,11 +4574,6 @@ react-is@^16.5.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.2.tgz#e2a7b7c3f5d48062eb769fcb123505eb928722e3" integrity sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ== -react-lifecycles-compat@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - react-test-renderer@^16.0.0-0: version "16.5.2" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae" From f68bf6043d6379758196e66954231b9d9d7acd50 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 11:15:06 +0100 Subject: [PATCH 20/46] Fixed most remaining tests --- src/observer.js | 2 + test/__snapshots__/observer.test.js.snap | 22 + test/misc.test.js | 16 +- test/observer.test.js | 111 +- test/stateless.test.js | 36 +- yarn.lock | 1304 +++++++++++++--------- 6 files changed, 881 insertions(+), 610 deletions(-) diff --git a/src/observer.js b/src/observer.js index 486888d7..75b9c0f1 100644 --- a/src/observer.js +++ b/src/observer.js @@ -303,10 +303,12 @@ export function observer(componentClass) { ) { const observerComponent = observerLite(componentClass) // TODO: move to mobx-react-lite + // TODO: static hoisting is not needed? hoistStatics(observerComponent, componentClass) if (componentClass.propTypes) observerComponent.propTypes = componentClass.propTypes if (componentClass.defaultProps) observerComponent.defaultProps = componentClass.defaultProps + observerComponent.isMobXReactObserver = true return observerComponent } diff --git a/test/__snapshots__/observer.test.js.snap b/test/__snapshots__/observer.test.js.snap index 0e07e25f..56cf46eb 100644 --- a/test/__snapshots__/observer.test.js.snap +++ b/test/__snapshots__/observer.test.js.snap @@ -1,5 +1,27 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`issue 12 1`] = ` +
+ + coffee + ! + + + tea + + +
+`; + +exports[`issue 12 2`] = ` +
+ + soup + + +
+`; + exports[`should stop updating if error was thrown in render (#134) 1`] = ` Array [ "Error: Hello", diff --git a/test/misc.test.js b/test/misc.test.js index e02be2fb..f1e8578e 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -5,6 +5,7 @@ import { mount, shallow } from "enzyme" import * as mobx from "mobx" import { observer } from "../src" import { createTestRoot, withConsole, asyncReactDOMRender } from "./index" +import renderer, { act } from "react-test-renderer" const mobxAdminProperty = mobx.$mobx || "$mobx" @@ -177,24 +178,21 @@ test("#85 Should handle state changing in constructors", done => { test("testIsComponentReactive", () => { const C = observer(() => null) - const wrapper = mount() - const instance = wrapper.instance() + const wrapper = renderer.create() + const instance = wrapper.getInstance() expect(C.isMobXReactObserver).toBeTruthy() // instance is something different then the rendering reaction! expect(mobx.isObservable(instance)).toBeFalsy() - expect(mobx.isObservable(instance.render)).toBeTruthy() - - mobx.extendObservable(instance, {}) - expect(mobx.isObservable(instance)).toBeTruthy() }) -test("testGetDNode", () => { - const C = observer(() =>
) +// TODO: needs to be restored to support devtools! +test.skip("testGetDNode", () => { + const C = observer(() => null) const wrapper = renderer.create() - expect(wrapper.instance().render[mobxAdminProperty]).toBeTruthy() + expect(wrapper.getInstance()[mobxAdminProperty]).toBeTruthy() expect(mobx.getAtom(wrapper.instance().render)).toBeTruthy() mobx.extendObservable(wrapper.instance(), { diff --git a/test/observer.test.js b/test/observer.test.js index 7d4996e0..b23ef184 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -4,6 +4,7 @@ import React, { Component } from "react" import TestUtils from "react-dom/test-utils" import { inject, observer, Observer, onError, Provider, useStaticRendering } from "../src" import { asyncReactDOMRender, createTestRoot, sleepHelper, withAsyncConsole, withConsole } from "./" +import renderer, { act } from "react-test-renderer" /** * some test suite is too tedious @@ -200,7 +201,8 @@ describe("does not views alive when using static rendering", () => { }) }) -describe("issue 12", () => { +test("issue 12", () => { + const events = [] const data = mobx.observable({ selected: "coffee", items: [ @@ -220,6 +222,7 @@ describe("issue 12", () => { } render() { + events.push("row: " + this.props.item.name) return ( {this.props.item.name} @@ -230,6 +233,8 @@ describe("issue 12", () => { } /** table stateles component */ const Table = observer(function table() { + events.push("table") + JSON.stringify(data) return (
{data.items.map(item => ( @@ -239,27 +244,18 @@ describe("issue 12", () => { ) }) - beforeAll(async done => { - await asyncReactDOMRender(, testRoot) - done() - }) - - test("init state is correct", () => { - expect([].map.call(testRoot.querySelectorAll("span"), tag => tag.innerHTML).sort()).toEqual( - ["coffee!", "tea"].sort() - ) - }) + const wrapper = renderer.create(
) + expect(wrapper.toJSON()).toMatchSnapshot() - test("run transaction", () => { + act(() => { mobx.transaction(() => { data.items[1].name = "boe" data.items.splice(0, 2, { name: "soup" }) data.selected = "tea" }) - expect([].map.call(testRoot.querySelectorAll("span"), tag => tag.innerHTML).sort()).toEqual( - ["soup"] - ) }) + expect(wrapper.toJSON()).toMatchSnapshot() + expect(events).toEqual(["table", "row: coffee", "row: tea", "table", "row: soup"]) }) test("changing state in render should fail", () => { @@ -447,7 +443,7 @@ describe("should render component even if setState called with exactly the same }) }) -describe("it rerenders correctly if some props are non-observables - 1", () => { +test("it rerenders correctly if some props are non-observables - 1", () => { let renderCount = 0 let odata = mobx.observable({ x: 1 }) let data = { y: 1 } @@ -483,29 +479,18 @@ describe("it rerenders correctly if some props are non-observables - 1", () => { odata.x++ } - beforeAll(async done => { - await asyncReactDOMRender(, testRoot) - done() - }) - - test("init renderCount === 1", () => { - expect(testRoot.querySelector("span").innerHTML).toBe("1-1-1") - }) + const wrapper = renderer.create() - test("after click renderCount === 2", async () => { - testRoot.querySelector("span").click() - await sleepHelper(10) - expect(testRoot.querySelector("span").innerHTML).toBe("2-2-2") - }) + const contents = () => wrapper.toTree().rendered.rendered.rendered.join("") - test("after click twice renderCount === 3", async () => { - testRoot.querySelector("span").click() - await sleepHelper(10) - expect(testRoot.querySelector("span").innerHTML).toBe("3-3-3") - }) + expect(contents()).toEqual("1-1-1") + stuff() + expect(contents()).toEqual("2-2-2") + stuff() + expect(contents()).toEqual("3-3-3") }) -describe("it rerenders correctly if some props are non-observables - 2", () => { +test("it rerenders correctly if some props are non-observables - 2", () => { let renderCount = 0 let odata = mobx.observable({ x: 1 }) @@ -542,29 +527,20 @@ describe("it rerenders correctly if some props are non-observables - 2", () => { } ) - beforeAll(async done => { - await asyncReactDOMRender(, testRoot) - done() - }) + const wrapper = renderer.create() - test("init renderCount === 1", () => { - expect(renderCount).toBe(1) - expect(testRoot.querySelector("span").innerHTML).toBe("1-1") - }) + const contents = () => wrapper.toTree().rendered.rendered.rendered.join("") - test("after click renderCount === 2", async () => { - testRoot.querySelector("span").click() - await sleepHelper(100) - expect(renderCount).toBe(2) - expect(testRoot.querySelector("span").innerHTML).toBe("2-2") - }) + expect(renderCount).toBe(1) + expect(contents()).toBe("1-1") - test("after click renderCount === 3", async () => { - testRoot.querySelector("span").click() - await sleepHelper(10) - expect(renderCount).toBe(3) - expect(testRoot.querySelector("span").innerHTML).toBe("3-3") - }) + act(() => stuff()) + expect(renderCount).toBe(2) + expect(contents()).toBe("2-2") + + act(() => stuff()) + expect(renderCount).toBe(3) + expect(contents()).toBe("3-3") }) describe("Observer regions should react", () => { @@ -594,7 +570,7 @@ describe("Observer regions should react", () => { }) }) -describe("Observer should not re-render on shallow equal new props", () => { +test("Observer should not re-render on shallow equal new props", () => { let childRendering = 0 let parentRendering = 0 const data = { x: 1 } @@ -610,23 +586,20 @@ describe("Observer should not re-render on shallow equal new props", () => { return }) - beforeAll(async () => { - await asyncReactDOMRender(, testRoot) - }) + const wrapper = renderer.create() - test("init state is correct", () => { - expect(parentRendering).toBe(1) - expect(childRendering).toBe(1) - expect(testRoot.querySelector("span").innerHTML).toBe("1") - }) + const contents = () => wrapper.toTree().rendered.rendered.rendered.join("") - test("after odata change", async () => { + expect(parentRendering).toBe(1) + expect(childRendering).toBe(1) + expect(contents()).toBe("1") + + act(() => { odata.y++ - sleepHelper(10) - expect(parentRendering).toBe(2) - expect(childRendering).toBe(1) - expect(testRoot.querySelector("span").innerHTML).toBe("1") }) + expect(parentRendering).toBe(2) + expect(childRendering).toBe(1) + expect(contents()).toBe("1") }) test("parent / childs render in the right order", done => { diff --git a/test/stateless.test.js b/test/stateless.test.js index 5f08832d..f55f950f 100644 --- a/test/stateless.test.js +++ b/test/stateless.test.js @@ -6,7 +6,7 @@ import TestUtils from "react-dom/test-utils" import * as mobx from "mobx" import { observer, propTypes } from "../src" import { createTestRoot, asyncReactDOMRender } from "./index" -import renderer from "react-test-renderer" +import renderer, { act } from "react-test-renderer" import { observable } from "mobx" const testRoot = createTestRoot() @@ -44,21 +44,23 @@ describe("stateless component with propTypes", () => { }) }) -// TODO: modernize to modern context test -test.skip("stateless component with context support", () => { - const StateLessCompWithContext = (props, context) => - createElement("div", {}, "context: " + context.testContext) - StateLessCompWithContext.contextTypes = { testContext: PropTypes.string } +test("stateless component with context support", async () => { + const C = React.createContext() + + const StateLessCompWithContext = (props, context) => ( + {value =>
context: {value.testContext}
}
+ ) + const StateLessCompWithContextObserver = observer(StateLessCompWithContext) - const ContextProvider = createClass({ - childContextTypes: StateLessCompWithContext.contextTypes, - getChildContext: () => ({ testContext: "hello world" }), - render: () => - }) - const component = TestUtils.renderIntoDocument() - expect( - TestUtils.findRenderedDOMComponentWithTag(component, "div").innerHTML.replace(/\n/, "") - ).toBe("context: hello world") + + const ContextProvider = () => ( + + + + ) + + await asyncReactDOMRender(, testRoot) + expect(testRoot.querySelector("div").innerHTML.replace(/\n/, "")).toBe("context: hello world") }) test("component with observable propTypes", () => { @@ -104,7 +106,9 @@ describe("stateless component with forwardRef", () => { const component = renderer.create( ) - a.x++ + act(() => { + a.x++ + }) expect(component).toMatchSnapshot() }) }) diff --git a/yarn.lock b/yarn.lock index 2260400c..a8f0ce39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,31 +10,31 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" - integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" + integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.2" - "@babel/helpers" "^7.1.2" - "@babel/parser" "^7.1.2" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.1.2" + "@babel/generator" "^7.2.2" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.2.2" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.2.2" + "@babel/types" "^7.2.2" convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" + debug "^4.1.0" + json5 "^2.1.0" lodash "^4.17.10" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0", "@babel/generator@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630" - integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig== +"@babel/generator@^7.2.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.2.tgz#fff31a7b2f2f3dad23ef8e01be45b0d5c2fc0132" + integrity sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ== dependencies: - "@babel/types" "^7.1.2" + "@babel/types" "^7.3.2" jsesc "^2.5.1" lodash "^4.17.10" source-map "^0.5.0" @@ -55,12 +55,12 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - integrity sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw== +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.3.0" esutils "^2.0.0" "@babel/helper-call-delegate@^7.1.0": @@ -72,6 +72,17 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-create-class-features-plugin@^7.3.0": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.2.tgz#ba1685603eb1c9f2f51c9106d5180135c163fe73" + integrity sha512-tdW8+V8ceh2US4GsYdNVNoohq5uVwOf9k6krjwW4E1lINcHgttnWcNqgdoessn12dAy8QkbezlbQh2nXISNY+A== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.2.3" + "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -127,15 +138,15 @@ "@babel/types" "^7.0.0" "@babel/helper-module-transforms@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" - integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw== + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz#ab2f8e8d231409f8370c883d20c335190284b963" + integrity sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.2.2" + "@babel/types" "^7.2.2" lodash "^4.17.10" "@babel/helper-optimise-call-expression@^7.0.0": @@ -168,14 +179,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" - integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz#19970020cf22677d62b3a689561dbd9644d8c5e5" + integrity sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA== dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.1.0" + "@babel/traverse" "^7.2.3" "@babel/types" "^7.0.0" "@babel/helper-simple-access@^7.1.0": @@ -194,23 +205,23 @@ "@babel/types" "^7.0.0" "@babel/helper-wrap-function@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" - integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/template" "^7.1.0" "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.2.0" -"@babel/helpers@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" - integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== +"@babel/helpers@^7.2.0": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9" + integrity sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA== dependencies: "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.3.0" "@babel/highlight@^7.0.0": version "7.0.0" @@ -221,159 +232,147 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409" - integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ== +"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd" + integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ== -"@babel/plugin-proposal-async-generator-functions@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" - integrity sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew== +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" "@babel/plugin-proposal-class-properties@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" - integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd" + integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" "@babel/plugin-proposal-decorators@^7.1.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.2.tgz#79829bd75fced6581ec6c7ab1930e8d738e892e7" - integrity sha512-YooynBO6PmBgHvAd0fl5e5Tq/a0pEC6RqF62ouafme8FzdIVH41Mz/u1dn8fFVm4jzEJ+g/MsOxouwybJPuP8Q== + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz#637ba075fa780b1f75d08186e8fb4357d03a72a7" + integrity sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg== dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/plugin-syntax-decorators" "^7.1.0" + "@babel/plugin-syntax-decorators" "^7.2.0" -"@babel/plugin-proposal-json-strings@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" - integrity sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q== +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" - integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw== +"@babel/plugin-proposal-object-rest-spread@^7.3.1": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz#6d1859882d4d778578e41f82cc5d7bf3d5daf6c1" + integrity sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" - integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw== +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" - integrity sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ== +"@babel/plugin-proposal-unicode-property-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" + integrity sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" regexpu-core "^4.2.0" -"@babel/plugin-syntax-async-generators@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" - integrity sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA== +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634" - integrity sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w== +"@babel/plugin-syntax-decorators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" + integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-decorators@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.1.0.tgz#2fa7c1a7905a299c9853ebcef340306675f9cbdc" - integrity sha512-uQvRSbgQ0nQg3jsmIixXXDCgSpkBolJ9X7NYThMKCcjvE8dN2uWJUzTUNNAeuKOjARTd+wUQV0ztXpgunZYKzQ== +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" - integrity sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA== +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" - integrity sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg== +"@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" - integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" - integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw== +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" - integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w== +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" - integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g== +"@babel/plugin-transform-async-to-generator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz#68b8a438663e88519e65b776f8938f3445b1a2ff" + integrity sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" - integrity sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ== +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" - integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg== +"@babel/plugin-transform-block-scoping@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz#f17c49d91eedbcdf5dd50597d16f5f2f770132d4" + integrity sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" -"@babel/plugin-transform-classes@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" - integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg== +"@babel/plugin-transform-classes@^7.2.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" + integrity sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-define-map" "^7.1.0" @@ -384,99 +383,106 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" - integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA== +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.0.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.2.tgz#5fa77d473f5a0a3f5266ad7ce2e8c995a164d60a" - integrity sha512-cvToXvp/OsYxtEn57XJu9BvsGSEYjAh9UeUuXpoi7x6QHB7YdWyQ4lRU/q0Fu1IJNT0o0u4FQ1DMQBzJ8/8vZg== +"@babel/plugin-transform-destructuring@^7.2.0": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz#f2f5520be055ba1c38c41c0e094d8a461dd78f2d" + integrity sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" - integrity sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig== +"@babel/plugin-transform-dotall-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" + integrity sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/plugin-transform-duplicate-keys@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" - integrity sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ== +"@babel/plugin-transform-duplicate-keys@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" + integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" - integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ== +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" - integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA== +"@babel/plugin-transform-for-of@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" + integrity sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" - integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg== +"@babel/plugin-transform-function-name@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" + integrity sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" - integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA== +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8" - integrity sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A== +"@babel/plugin-transform-modules-amd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" + integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" - integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA== +"@babel/plugin-transform-modules-commonjs@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" + integrity sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-systemjs@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" - integrity sha512-8EDKMAsitLkiF/D4Zhe9CHEE2XLh4bfLbb9/Zf3FgXYQOZyZYyg7EAel/aT2A7bHv62jwHf09q2KU/oEexr83g== +"@babel/plugin-transform-modules-systemjs@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" + integrity sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ== dependencies: "@babel/helper-hoist-variables" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-umd@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8" - integrity sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig== +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.3.0.tgz#140b52985b2d6ef0cb092ef3b29502b990f9cd50" + integrity sha512-NxIoNVhk9ZxS+9lSoAQ/LM0V2UEvARLttEHUrRDGKFaAxOYQcrkN/nLRE+BbbicCAvZPl7wMP0X60HsHE5DtQw== + dependencies: + regexp-tree "^0.1.0" + "@babel/plugin-transform-new-target@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" @@ -484,31 +490,31 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb" - integrity sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw== +"@babel/plugin-transform-object-super@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" + integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" -"@babel/plugin-transform-parameters@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" - integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw== +"@babel/plugin-transform-parameters@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz#0d5ad15dc805e2ea866df4dd6682bfe76d1408c2" + integrity sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA== dependencies: "@babel/helper-call-delegate" "^7.1.0" "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" - integrity sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" + "@babel/helper-builder-react-jsx" "^7.3.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" "@babel/plugin-transform-regenerator@^7.0.0": version "7.0.0" @@ -517,127 +523,129 @@ dependencies: regenerator-transform "^0.13.3" -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" - integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw== +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" - integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ== +"@babel/plugin-transform-spread@^7.2.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" + integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" - integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw== +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" - integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg== +"@babel/plugin-transform-template-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz#d87ed01b8eaac7a92473f608c97c089de2ba1e5b" + integrity sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" - integrity sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg== +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" - integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw== +"@babel/plugin-transform-unicode-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz#4eb8db16f972f8abb5062c161b8b115546ade08b" + integrity sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" "@babel/preset-env@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11" - integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg== + version "7.3.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.1.tgz#389e8ca6b17ae67aaf9a2111665030be923515db" + integrity sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.1.0" - "@babel/plugin-proposal-json-strings" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.1.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.1.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-dotall-regex" "^7.0.0" - "@babel/plugin-transform-duplicate-keys" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.1.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.1.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-amd" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/plugin-transform-modules-systemjs" "^7.0.0" - "@babel/plugin-transform-modules-umd" "^7.1.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.2.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.2.0" + "@babel/plugin-transform-classes" "^7.2.0" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-dotall-regex" "^7.2.0" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.2.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.1.0" - "@babel/plugin-transform-parameters" "^7.1.0" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.2.0" "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typeof-symbol" "^7.0.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - browserslist "^4.1.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.2.0" + browserslist "^4.3.4" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/template@^7.1.0", "@babel/template@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" - integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== +"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" + integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.2" - "@babel/types" "^7.1.2" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" -"@babel/traverse@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2" - integrity sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" + integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.0.0" + "@babel/generator" "^7.2.2" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - debug "^3.1.0" + "@babel/parser" "^7.2.3" + "@babel/types" "^7.2.2" + debug "^4.1.0" globals "^11.1.0" lodash "^4.17.10" -"@babel/types@^7.0.0", "@babel/types@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0" - integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.2.tgz#424f5be4be633fff33fb83ab8d67e4a8290f5a2f" + integrity sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ== dependencies: esutils "^2.0.2" lodash "^4.17.10" @@ -662,28 +670,32 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/node@*", "@types/node@^10.0.0": - version "10.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.11.6.tgz#ce5690df6cd917a9178439a1013e39a7e565c46e" - integrity sha512-fnA7yvqg3oKQDb3skBif9w5RRKVKAaeKeNuLzZL37XcSiWL4IoSXQnnbchR3UnBu2EMLHBip7ZVEkqoIVBP8QQ== +"@types/node@*": + version "11.9.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" + integrity sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ== + +"@types/node@^10.0.0": + version "10.12.26" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.26.tgz#2dec19f1f7981c95cb54bab8f618ecb5dc983d0e" + integrity sha512-nMRqS+mL1TOnIJrL6LKJcNZPB8V3eTfRo9FQA2b5gDvrHurC8XbSA86KNe0dShlEL7ReWJv/OU9NL7Z0dnqWTg== "@types/prop-types@*", "@types/prop-types@^15.5.2": - version "15.5.6" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.6.tgz#9c03d3fed70a8d517c191b7734da2879b50ca26c" - integrity sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ== + version "15.5.9" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.9.tgz#f2d14df87b0739041bc53a7d75e3d77d726a3ec0" + integrity sha512-Nha5b+jmBI271jdTMwrHiNXM+DvThjHOfyZtMX9kj/c/LUj2xiLHsG/1L3tJ8DjAoQN48cHwUwtqBotjyXaSdQ== "@types/react-dom@^16.0.1": - version "16.0.9" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.9.tgz#73ceb7abe6703822eab6600e65c5c52efd07fb91" - integrity sha512-4Z0bW+75zeQgsEg7RaNuS1k9MKhci7oQqZXxrV5KUGIyXZHHAAL3KA4rjhdH8o6foZ5xsRMSqkoM5A3yRVPR5w== + version "16.8.1" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.1.tgz#e43810a5e44b37854a9c7cd99e6c43e4f522c7c6" + integrity sha512-Vyo4LqUvpjNC9RMXV6kXcsvW6U/WKOuHbz+mtY43Fu8AslHjQ5/Yx+sj0agGLkbnqOlQgyIgosewcxdjMirVXA== dependencies: - "@types/node" "*" "@types/react" "*" "@types/react@*", "@types/react@^16.0.13": - version "16.4.16" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.16.tgz#99f91b1200ae8c2062030402006d3b3c3a177043" - integrity sha512-lxyoipLWweAnLnSsV4Ho2NAZTKKmxeYgkTQ6PaDiPDU9JJBUY2zJVVGiK1smzYv8+ZgbqEmcm5xM74GCpunSEA== + version "16.8.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.3.tgz#7b67956f682bea30a5a09b3242c0784ff196c848" + integrity sha512-PjPocAxL9SNLjYMP4dfOShW/rj9FDBJGu3JFRt0zEYf77xfihB6fq8zfDpMrV6s82KnAi7F1OEe5OsQX25Ybdw== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -1195,14 +1207,14 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.2.0.tgz#3e5e5edf7fa9758ded0885cf88c1e4be753a591c" - integrity sha512-Berls1CHL7qfQz8Lct6QxYA5d2Tvt4doDWHcjvAISybpd+EKZVppNtXgXhaN6SdrPKo7YLTSZuYBs5cYrSWN8w== +browserslist@^4.3.4: + version "4.4.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" + integrity sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A== dependencies: - caniuse-lite "^1.0.30000889" - electron-to-chromium "^1.3.73" - node-releases "^1.0.0-alpha.12" + caniuse-lite "^1.0.30000929" + electron-to-chromium "^1.3.103" + node-releases "^1.1.3" bser@^2.0.0: version "2.0.0" @@ -1259,6 +1271,20 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1287,10 +1313,10 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -caniuse-lite@^1.0.30000889: - version "1.0.30000890" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000890.tgz#86a18ffcc65d79ec6a437e985761b8bf1c4efeaf" - integrity sha512-4NI3s4Y6ROm+SgZN5sLUG4k7nVWQnedis3c/RWkynV5G6cHSY7+a8fwFyn2yoBDE3E6VswhTNNwR3PvzGqlTkg== +caniuse-lite@^1.0.30000929: + version "1.0.30000936" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz#5d33b118763988bf721b9b8ad436d0400e4a116b" + integrity sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw== capture-exit@^1.2.0: version "1.2.0" @@ -1315,7 +1341,16 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1: +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== @@ -1346,6 +1381,11 @@ ci-info@^1.5.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1368,6 +1408,16 @@ cli-cursor@^1.0.2: dependencies: restore-cursor "^1.0.1" +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -1415,10 +1465,10 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colors@0.5.x: - version "0.5.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" - integrity sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q= +colors@^1.1.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== colors@^1.3.2: version "1.3.2" @@ -1439,7 +1489,7 @@ combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.14.1, commander@^2.9.0: +commander@^2.14.1, commander@^2.19.0, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -1491,7 +1541,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.2, cosmiconfig@^5.0.6: +cosmiconfig@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== @@ -1500,6 +1550,16 @@ cosmiconfig@^5.0.2, cosmiconfig@^5.0.6: js-yaml "^3.9.0" parse-json "^4.0.0" +cosmiconfig@^5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" + integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + create-react-class@^15.6.2: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" @@ -1518,6 +1578,17 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -1529,9 +1600,9 @@ css-select@~1.2.0: nth-check "~1.0.1" css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= + version "2.1.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" + integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" @@ -1546,9 +1617,9 @@ cssstyle@^1.0.0: cssom "0.3.x" csstype@^2.2.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" - integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== + version "2.6.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.2.tgz#3043d5e065454579afc7478a18de41909c8a2f01" + integrity sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow== currently-unhandled@^0.4.1: version "0.4.1" @@ -1592,7 +1663,14 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.1.2: +debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1638,7 +1716,7 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1713,9 +1791,9 @@ dom-serializer@0, dom-serializer@~0.1.0: entities "~1.1.1" domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@~1.1.1: version "1.1.3" @@ -1765,10 +1843,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.73: - version "1.3.76" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.76.tgz#2597c9c461f805298696f2de7a1ad1791f6d6226" - integrity sha512-qKQQzjRqpTqiVV7fP0DZRqndQFkzzp5knBvNkqdNIKd7Of/+d9tvNVtY3ffSDUD5UrMepe7IOmBflugDPhPNtA== +electron-to-chromium@^1.3.103: + version "1.3.113" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" + integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== elegant-spinner@^1.0.1: version "1.0.1" @@ -1790,36 +1868,38 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: once "^1.4.0" entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== enzyme-adapter-react-16@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.6.0.tgz#3fca28d3c32f3ff427495380fe2dd51494689073" - integrity sha512-ay9eGFpChyUDnjTFMMJHzrb681LF3hPWJLEA7RoLFG9jSWAdAm2V50pGmFV9dYGJgh5HfdiqM+MNvle41Yf/PA== + version "1.9.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.9.1.tgz#6d49a3a31c3a0fccf527610f31b837e0f307128a" + integrity sha512-Egzogv1y77DUxdnq/CyHxLHaNxmSSKDDSDNNB/EiAXCZVFXdFibaNy2uUuRQ1n24T2m6KH/1Rw16XDRq+1yVEg== dependencies: - enzyme-adapter-utils "^1.8.0" + enzyme-adapter-utils "^1.10.0" function.prototype.name "^1.1.0" object.assign "^4.1.0" - object.values "^1.0.4" + object.values "^1.1.0" prop-types "^15.6.2" - react-is "^16.5.2" + react-is "^16.7.0" react-test-renderer "^16.0.0-0" -enzyme-adapter-utils@^1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.1.tgz#a927d840ce2c14b42892a533aec836809d4e022b" - integrity sha512-s3QB3xQAowaDS2sHhmEqrT13GJC4+n5bG015ZkLv60n9k5vhxxHTQRIneZmQ4hmdCZEBrvUJ89PG6fRI5OEeuQ== +enzyme-adapter-utils@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.0.tgz#5836169f68b9e8733cb5b69cad5da2a49e34f550" + integrity sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA== dependencies: function.prototype.name "^1.1.0" object.assign "^4.1.0" + object.fromentries "^2.0.0" prop-types "^15.6.2" + semver "^5.6.0" enzyme@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.7.0.tgz#9b499e8ca155df44fef64d9f1558961ba1385a46" - integrity sha512-QLWx+krGK6iDNyR1KlH5YPZqxZCQaVF6ike1eDJAOg0HvSkSCVImPsdWaNw6v+VrnK92Kg8jIOYhuOSS9sBpyg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5" + integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw== dependencies: array.prototype.flat "^1.2.1" cheerio "^1.0.0-rc.2" @@ -1848,7 +1928,19 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.10.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1: +es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== @@ -1859,7 +1951,7 @@ es-abstract@^1.10.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-to-primitive@^1.1.1: +es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== @@ -1948,6 +2040,19 @@ execa@^0.9.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.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" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -2225,7 +2330,7 @@ fsevents@^1.2.3: nan "^2.9.2" node-pre-gyp "^0.10.0" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -2283,6 +2388,13 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2328,9 +2440,9 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: path-is-absolute "^1.0.0" globals@^11.1.0: - version "11.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" - integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== globals@^9.18.0: version "9.18.0" @@ -2445,11 +2557,11 @@ has@^1.0.1, has@^1.0.3: function-bind "^1.1.1" hoist-non-react-statics@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e" - integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== dependencies: - react-is "^16.3.2" + react-is "^16.7.0" home-or-tmp@^2.0.0: version "2.0.0" @@ -2472,16 +2584,16 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= + version "3.10.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" + integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ== dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" domutils "^1.5.1" entities "^1.1.1" inherits "^2.0.1" - readable-stream "^2.0.2" + readable-stream "^3.0.6" http-signature@~1.2.0: version "1.2.0" @@ -2493,15 +2605,15 @@ http-signature@~1.2.0: sshpk "^1.7.0" husky@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-1.1.1.tgz#7179043184f68a4d1ffc975cbd1c6132ef1fd7b3" - integrity sha512-D8ly8eIZdWzWVG4mh4apaX1PP47uLSaN8CS0RyuuLtHJ20Gt6Ccky5pSecaPsqxNzQj0zon3x6QX/0kCc5/TOQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" + integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== dependencies: - cosmiconfig "^5.0.6" - execa "^0.9.0" + cosmiconfig "^5.0.7" + execa "^1.0.0" find-up "^3.0.0" get-stdin "^6.0.0" - is-ci "^1.2.1" + is-ci "^2.0.0" pkg-dir "^3.0.0" please-upgrade-node "^3.1.1" read-pkg "^4.0.1" @@ -2532,6 +2644,14 @@ iltorb@^2.0.5: prebuild-install "^5.0.0" which-pm-runs "^1.0.0" +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -2565,7 +2685,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -2576,9 +2696,9 @@ ini@~1.3.0: integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" @@ -2592,6 +2712,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -2633,13 +2758,20 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10, is-ci@^1.2.1: +is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== dependencies: ci-info "^1.5.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3280,6 +3412,14 @@ jest-worker@^23.2.0: dependencies: merge-stream "^1.0.1" +jest-worker@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d" + integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg== + dependencies: + merge-stream "^1.0.1" + supports-color "^6.1.0" + jest@^23.6.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" @@ -3289,9 +3429,9 @@ jest@^23.6.0: jest-cli "^23.6.0" js-levenshtein@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" - integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow== + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -3303,7 +3443,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@^3.7.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== @@ -3311,6 +3451,14 @@ js-yaml@^3.7.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.9.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" + integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -3354,9 +3502,9 @@ jsesc@^1.3.0: integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" @@ -3383,11 +3531,18 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.0, json5@^0.5.1: +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3434,6 +3589,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -3598,7 +3760,7 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3614,9 +3776,9 @@ loud-rejection@^1.0.0: signal-exit "^3.0.0" lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -3635,6 +3797,13 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3653,9 +3822,9 @@ map-visit@^1.0.0: object-visit "^1.0.0" math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== mem@^1.1.0: version "1.1.0" @@ -3664,6 +3833,15 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" + integrity sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^1.0.0" + p-is-promise "^2.0.0" + meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -3810,9 +3988,9 @@ mobx-react-lite@^1.0.0: integrity sha512-lfqTgh/gyu1QJ9Os9SygqhNQ1Bs3IEeNXjwGzgOmT+7jB1xdTBlLbJ62hPL5olk5oBX2ZY9Og+WFVMxsl2t84A== mobx@^5.0.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.5.0.tgz#a29f6a7526eed28edcd3f0e921a1edaa8bb22575" - integrity sha512-rD0Hsv9XtjS6axavvPX/XzWTeICRiH3bLR1L+MrJ7HOlx1hmSdWNzu8rQQ+1IkTiyJechRyGzs2tUgLRmEofJg== + version "5.9.0" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.9.0.tgz#a08edd7132787f771409c9c33788a5df66ff7ce7" + integrity sha512-D3mY1uM3H9BP5duk5tTanrOq92yqetYKsprPJWvkKDrbs+fro59xrpWX+vtr10YoLgJIFz+a4A8lI+4YtqmCUQ== moo@^0.4.3: version "0.4.3" @@ -3862,12 +4040,12 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nearley@^2.7.10: - version "2.15.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.15.1.tgz#965e4e6ec9ed6b80fc81453e161efbcebb36d247" - integrity sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw== + version "2.16.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7" + integrity sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg== dependencies: + commander "^2.19.0" moo "^0.4.3" - nomnom "~1.6.2" railroad-diagrams "^1.0.0" randexp "0.4.6" semver "^5.4.1" @@ -3881,6 +4059,11 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-abi@^2.2.0: version "2.4.5" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.5.tgz#1fd1fb66641bf3c4dcf55a5490ba10c467ead80c" @@ -3927,21 +4110,13 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-releases@^1.0.0-alpha.12: - version "1.0.0-alpha.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.12.tgz#32e461b879ea76ac674e511d9832cf29da345268" - integrity sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q== +node-releases@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.7.tgz#b09a10394d0ed8f7778f72bb861dde68b146303b" + integrity sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA== dependencies: semver "^5.3.0" -nomnom@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" - integrity sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE= - dependencies: - colors "0.5.x" - underscore "~1.4.4" - noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -3955,7 +4130,17 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== @@ -4019,9 +4204,9 @@ npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: set-blocking "~2.0.0" nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== dependencies: boolbase "~1.0.0" @@ -4065,9 +4250,9 @@ object-is@^1.0.1: integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== object-visit@^1.0.0: version "1.0.1" @@ -4087,13 +4272,23 @@ object.assign@^4.1.0: object-keys "^1.0.11" object.entries@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" - integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== dependencies: define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" + es-abstract "^1.11.0" + function-bind "^1.1.1" has "^1.0.1" object.getownpropertydescriptors@^2.0.3: @@ -4119,15 +4314,15 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= +object.values@^1.0.4, object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -4194,6 +4389,15 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.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" @@ -4207,11 +4411,21 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -4220,9 +4434,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" + integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== dependencies: p-try "^2.0.0" @@ -4319,12 +4533,12 @@ path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== @@ -4467,12 +4681,13 @@ prompts@^0.1.9: sisteransi "^0.1.1" prop-types@^15.6.0, prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== dependencies: - loose-envify "^1.3.1" + loose-envify "^1.4.0" object-assign "^4.1.1" + react-is "^16.8.1" pseudomap@^1.0.2: version "1.0.2" @@ -4500,6 +4715,14 @@ pump@^2.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -4516,9 +4739,9 @@ qs@~6.5.2: integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== raf@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - integrity sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw== + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" @@ -4536,9 +4759,9 @@ randexp@0.4.6: ret "~0.1.10" randomatic@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" - integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" kind-of "^6.0.0" @@ -4564,35 +4787,20 @@ react-dom@^16.8.0: prop-types "^15.6.2" scheduler "^0.13.1" -react-is@^16.3.2, react-is@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0" - integrity sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA== - -react-is@^16.5.2: - version "16.5.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.2.tgz#e2a7b7c3f5d48062eb769fcb123505eb928722e3" - integrity sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ== - -react-test-renderer@^16.0.0-0: - version "16.5.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae" - integrity sha512-AGbJYbCVx1J6jdUgI4s0hNp+9LxlgzKvXl0ROA3DHTrtjAr00Po1RhDZ/eAq2VC/ww8AHgpDXULh5V2rhEqqJg== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.5.2" - schedule "^0.5.0" +react-is@^16.7.0, react-is@^16.8.1: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.1.tgz#a80141e246eb894824fb4f2901c0c50ef31d4cdb" + integrity sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA== -react-test-renderer@^16.6.3: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.6.3.tgz#5f3a1a7d5c3379d46f7052b848b4b72e47c89f38" - integrity sha512-B5bCer+qymrQz/wN03lT0LppbZUDRq6AMfzMKrovzkGzfO81a9T+PWQW6MzkWknbwODQH/qpJno/yFQLX5IWrQ== +react-test-renderer@^16.0.0-0, react-test-renderer@^16.6.3: + version "16.8.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.1.tgz#72845ad9269be526126e97853311982f781767be" + integrity sha512-Bd21TN3+YVl6GZwav6O0T6m5UwGfOj+2+xZH5VH93ToD6M5uclN/c+R1DGX49ueG413KZPUx7Kw3sOYz2aJgfg== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" - react-is "^16.6.3" - scheduler "^0.11.2" + react-is "^16.8.1" + scheduler "^0.13.1" react@^16.8.0: version "16.8.1" @@ -4630,7 +4838,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: +readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -4643,6 +4851,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.6: + version "3.1.1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" + integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + realpath-native@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" @@ -4709,27 +4926,36 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-tree@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.1.tgz#27b455f9b138ca2e84c090e9aff1ffe2a04d97fa" + integrity sha512-HwRjOquc9QOwKTgbxvZTcddS5mlNlwePMQ3NFL8broajMLD5CXDAqas8Y5yxJH5QtZp5iRor3YCILd5pz71Cgw== + dependencies: + cli-table3 "^0.5.0" + colors "^1.1.2" + yargs "^12.0.5" + regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" - integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw== + version "4.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" + integrity sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^7.0.0" - regjsgen "^0.4.0" - regjsparser "^0.3.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.0.2" -regjsgen@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" - integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA== +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== -regjsparser@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" - integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA== +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" @@ -4829,7 +5055,14 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.3.2, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== @@ -4857,16 +5090,16 @@ rimraf@^2.5.4, rimraf@^2.6.1: glob "^7.0.5" rollup-plugin-alias@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.4.0.tgz#120cba7c46621c03138f0ca6fd5dd2ade9872db9" - integrity sha512-lB094zdi19FS+1bVarVp9kBN0Zk41PdTGoCk0z8xesKO7RGjOo18cp1hUzEqrOQ4bM9+KLD9nbnu/XUxQm9pbg== + version "1.5.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz#80cce3a967befda5b09c86abc14a043a78035b46" + integrity sha512-pQTYBRNfLedoVOO7AYHNegIavEIp4jKTga5jUi1r//KYgHKGWgG4qJXYhbcWKt2k1FwGlR5wCYoY+IFkme0t4A== dependencies: - slash "^1.0.0" + slash "^2.0.0" rollup-plugin-babel@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.0.3.tgz#8282b0e22233160d679e9c7631342e848422fb02" - integrity sha512-/PP0MgbPQyRywI4zRIJim6ySjTcOLo4kQbEbROqp9kOR3kHC3FeU++QpBDZhS2BcHtJTVZMVbBV46flbBN5zxQ== + version "4.3.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" + integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== dependencies: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.3.0" @@ -4913,13 +5146,13 @@ rollup-plugin-replace@^2.1.0: rollup-pluginutils "^2.0.1" rollup-plugin-uglify@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.0.tgz#15aa8919e5cdc63b7cfc9319c781788b40084ce4" - integrity sha512-XtzZd159QuOaXNvcxyBcbUCSoBsv5YYWK+7ZwUyujSmISst8avRfjWlp7cGu8T2O52OJnpEBvl+D4WLV1k1iQQ== + version "6.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz#681042cfdf7ea4e514971946344e1a95bc2772fe" + integrity sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== dependencies: "@babel/code-frame" "^7.0.0" - jest-worker "^23.2.0" - serialize-javascript "^1.5.0" + jest-worker "^24.0.0" + serialize-javascript "^1.6.1" uglify-js "^3.4.9" rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: @@ -5001,21 +5234,6 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -schedule@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.5.0.tgz#c128fffa0b402488b08b55ae74bb9df55cc29cc8" - integrity sha512-HUcJicG5Ou8xfR//c2rPT0lPIRR09vVvN81T9fqfVgBmhERUbDEQoYKjpBxbueJnCPpSu2ujXzOnRQt6x9o/jw== - dependencies: - object-assign "^4.1.1" - -scheduler@^0.11.2: - version "0.11.3" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b" - integrity sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.1.tgz#1a217df1bfaabaf4f1b92a9127d5d732d85a9591" @@ -5029,15 +5247,20 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + +semver@^5.5.0: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== -serialize-javascript@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" - integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ== +serialize-javascript@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" + integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -5081,7 +5304,7 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -shelljs@^0.8.1, shelljs@^0.8.2: +shelljs@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" integrity sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ== @@ -5090,6 +5313,15 @@ shelljs@^0.8.1, shelljs@^0.8.2: interpret "^1.0.0" rechoir "^0.6.2" +shelljs@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -5220,9 +5452,9 @@ sourcemap-codec@^1.4.1: integrity sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA== spdx-correct@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" - integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ== + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -5241,9 +5473,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" - integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -5335,6 +5567,13 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5413,6 +5652,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -5615,11 +5861,6 @@ uglify-js@^3.1.4, uglify-js@^3.4.9: commander "~2.17.1" source-map "~0.6.1" -underscore@~1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" - integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -5671,7 +5912,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -5858,6 +6099,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -5868,6 +6114,14 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -5892,3 +6146,21 @@ yargs@^11.0.0: which-module "^2.0.0" y18n "^3.2.1" yargs-parser "^9.0.2" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.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 || ^4.0.0" + yargs-parser "^11.1.1" From 0c77fd6d6c062c766072eb1543b5087c9c705f72 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 11:17:17 +0100 Subject: [PATCH 21/46] Use `Observer` from mobx-react-lite --- src/index.js | 4 ++-- src/observer.js | 42 ++---------------------------------------- 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/src/index.js b/src/index.js index 283d8aea..985adaf5 100644 --- a/src/index.js +++ b/src/index.js @@ -9,11 +9,11 @@ if (!spy) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) -// TODO: re-export mobx-react-lite stuff? +// TODO: re-export more mobx-react-lite stuff? +export { Observer } from "mobx-react-lite" export { observer, - Observer, renderReporter, componentByNodeRegistry as componentByNodeRegistery, componentByNodeRegistry, diff --git a/src/observer.js b/src/observer.js index 75b9c0f1..22d961c6 100644 --- a/src/observer.js +++ b/src/observer.js @@ -4,7 +4,8 @@ import { createAtom, Reaction, _allowStateChanges, $mobx } from "mobx" import { findDOMNode as baseFindDOMNode } from "react-dom" import { observer as observerLite, - useStaticRendering as useStaticRenderingLite + useStaticRendering as useStaticRenderingLite, + Observer } from "mobx-react-lite" import EventEmitter from "./utils/EventEmitter" @@ -345,42 +346,3 @@ function mixinLifecycleEvents(target) { } } } - -// TODO: use mobx-react-lite version? -export const Observer = observer(({ children, render }) => { - const component = children || render - if (typeof component === "undefined") { - return null - } - return component() -}) - -Observer.displayName = "Observer" - -const ObserverPropsCheck = (props, key, componentName, location, propFullName) => { - const extraKey = key === "children" ? "render" : "children" - if (typeof props[key] === "function" && typeof props[extraKey] === "function") { - return new Error( - "Invalid prop,do not use children and render in the same time in`" + componentName - ) - } - - if (typeof props[key] === "function" || typeof props[extraKey] === "function") { - return - } - return new Error( - "Invalid prop `" + - propFullName + - "` of type `" + - typeof props[key] + - "` supplied to" + - " `" + - componentName + - "`, expected `function`." - ) -} - -Observer.propTypes = { - render: ObserverPropsCheck, - children: ObserverPropsCheck -} From e8e61b5c4a6cd04ae419b01fc3d3bc8afa090850 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 16:09:52 +0100 Subject: [PATCH 22/46] modernized rollup --- package.json | 14 +++++++------- yarn.lock | 50 ++++++++++++++++++++++++++++---------------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index eeb020ea..c784a2f5 100644 --- a/package.json +++ b/package.json @@ -59,14 +59,14 @@ "react-test-renderer": "^16.6.3", "regenerator-runtime": "^0.12.1", "request": "^2.83.0", - "rollup": "^0.66.2", - "rollup-plugin-alias": "^1.3.0", - "rollup-plugin-babel": "^4.0.3", - "rollup-plugin-commonjs": "^9.0.0", - "rollup-plugin-filesize": "^5.0.0", - "rollup-plugin-node-resolve": "^3.0.0", + "rollup": "^1.1.2", + "rollup-plugin-alias": "^1.5.1", + "rollup-plugin-babel": "^4.3.2", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-filesize": "^6.0.1", + "rollup-plugin-node-resolve": "^4.0.0", "rollup-plugin-replace": "^2.1.0", - "rollup-plugin-uglify": "^6.0.0", + "rollup-plugin-uglify": "^6.0.2", "shelljs": "^0.8.2", "shx": "^0.3.2", "typescript": "^2.6.0" diff --git a/yarn.lock b/yarn.lock index a8f0ce39..458116c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -733,6 +733,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== +acorn@^6.0.5: + version "6.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" + integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== + ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -1251,10 +1256,10 @@ builtin-modules@^1.0.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtin-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" - integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== +builtin-modules@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" + integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== cache-base@^1.0.1: version "1.0.1" @@ -5089,14 +5094,14 @@ rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.0.5" -rollup-plugin-alias@^1.3.0: +rollup-plugin-alias@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz#80cce3a967befda5b09c86abc14a043a78035b46" integrity sha512-pQTYBRNfLedoVOO7AYHNegIavEIp4jKTga5jUi1r//KYgHKGWgG4qJXYhbcWKt2k1FwGlR5wCYoY+IFkme0t4A== dependencies: slash "^2.0.0" -rollup-plugin-babel@^4.0.3: +rollup-plugin-babel@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== @@ -5104,7 +5109,7 @@ rollup-plugin-babel@^4.0.3: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.3.0" -rollup-plugin-commonjs@^9.0.0: +rollup-plugin-commonjs@^9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" integrity sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA== @@ -5114,10 +5119,10 @@ rollup-plugin-commonjs@^9.0.0: resolve "^1.8.1" rollup-pluginutils "^2.3.3" -rollup-plugin-filesize@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-5.0.1.tgz#442a994465abf4f4f63ea20ac3267c3e0d05ee5d" - integrity sha512-zVUkEuJ543D86EaC5Ql2M6d6aAXwWbRwJ9NWSzTUS7F3vdd1cf+zlL+roQY8sW2hLIpbDMnGfev0dcy4bHQbjw== +rollup-plugin-filesize@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-6.0.1.tgz#71937b48a411374c76c4a7e6bbdb087780d8bd64" + integrity sha512-wtxHShJofSxJRuYGGxgwIJyxxW+Mgu/vGGcsOUJVN+US6jE+gQYphSS3H2PS2HCVfxDtERtL0gjptk1gYru9rA== dependencies: boxen "^2.0.0" brotli-size "0.0.3" @@ -5127,14 +5132,14 @@ rollup-plugin-filesize@^5.0.0: gzip-size "^5.0.0" terser "^3.10.0" -rollup-plugin-node-resolve@^3.0.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" - integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== +rollup-plugin-node-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" + integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw== dependencies: - builtin-modules "^2.0.0" + builtin-modules "^3.0.0" is-module "^1.0.0" - resolve "^1.1.6" + resolve "^1.8.1" rollup-plugin-replace@^2.1.0: version "2.1.0" @@ -5145,7 +5150,7 @@ rollup-plugin-replace@^2.1.0: minimatch "^3.0.2" rollup-pluginutils "^2.0.1" -rollup-plugin-uglify@^6.0.0: +rollup-plugin-uglify@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz#681042cfdf7ea4e514971946344e1a95bc2772fe" integrity sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== @@ -5163,13 +5168,14 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@^0.66.2: - version "0.66.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.6.tgz#ce7d6185beb7acea644ce220c25e71ae03275482" - integrity sha512-J7/SWanrcb83vfIHqa8+aVVGzy457GcjA6GVZEnD0x2u4OnOd0Q1pCrEoNe8yLwM6z6LZP02zBT2uW0yh5TqOw== +rollup@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.1.2.tgz#8d094b85683b810d0c05a16bd7618cf70d48eba7" + integrity sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg== dependencies: "@types/estree" "0.0.39" "@types/node" "*" + acorn "^6.0.5" rst-selector-parser@^2.2.3: version "2.2.3" From 68074296e1ab00cdda814db1e1bdc00e8e396ba9 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 16:38:29 +0100 Subject: [PATCH 23/46] Blegh, filesize keeps failing --- build-rollup.js | 4 ++-- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build-rollup.js b/build-rollup.js index 82d29f17..823cabcc 100644 --- a/build-rollup.js +++ b/build-rollup.js @@ -1,5 +1,5 @@ var path = require("path") -var filesize = require("rollup-plugin-filesize") +// var filesize = require("rollup-plugin-filesize") var babel = require("rollup-plugin-babel") var commonjs = require("rollup-plugin-commonjs") var resolve = require("rollup-plugin-node-resolve") @@ -79,7 +79,7 @@ function build(target, mode, filename) { ) } - plugins.push(filesize()) + // plugins.push(filesize()) return rollup({ input: "src/index.js", diff --git a/package.json b/package.json index c784a2f5..a8b08532 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ }, "dependencies": { "hoist-non-react-statics": "^3.0.0", - "mobx-react-lite": "^1.0.0" + "mobx-react-lite": "1.0.1" }, "keywords": [ "mobx", diff --git a/yarn.lock b/yarn.lock index 458116c8..ce2b9509 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3987,10 +3987,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mobx-react-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.0.0.tgz#8c07ce18fd505b19e00315d33a8558d415ba9198" - integrity sha512-lfqTgh/gyu1QJ9Os9SygqhNQ1Bs3IEeNXjwGzgOmT+7jB1xdTBlLbJ62hPL5olk5oBX2ZY9Og+WFVMxsl2t84A== +mobx-react-lite@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.0.1.tgz#8f6ce216a05d79d3d70f1ce27386bba35c02926d" + integrity sha512-Rpnhwu+YK0b+sZS+yqaWZOd3nOfSlPuBB2G/6ylsEAl9M11fVYTN7la704Wkkdo9k2nyXmNOzedL0/nm+vbAeA== mobx@^5.0.0: version "5.9.0" From f34dab385d325ed4374ffa950cfa3adf7419a350 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 20:06:33 +0100 Subject: [PATCH 24/46] Jest update --- .babelrc | 2 +- package.json | 6 +- yarn.lock | 1239 +++++++++++++++++++++----------------------------- 3 files changed, 530 insertions(+), 717 deletions(-) diff --git a/.babelrc b/.babelrc index 4ecd4f76..64782cd4 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,5 @@ { - "presets": ["@babel/preset-env"], + "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]], "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true}], ["@babel/plugin-proposal-class-properties", { "loose": true}], diff --git a/package.json b/package.json index a8b08532..11bafe9f 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,13 @@ "@types/react": "^16.0.13", "@types/react-dom": "^16.0.1", "babel-core": "^7.0.0-bridge.0", - "babel-jest": "^23.6.0", + "babel-jest": "^24.0.0", "create-react-class": "^15.6.2", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.0.0", "husky": "^1.0.0", - "jest": "^23.6.0", - "jest-environment-jsdom": "^23.4.0", + "jest": "^24.0.0", + "jest-environment-jsdom": "^24.0.0", "lint-staged": "^7.0.5", "lodash": "^4.17.4", "mobx": "^5.0.0", diff --git a/yarn.lock b/yarn.lock index ce2b9509..b2097649 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": +"@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== @@ -29,7 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.2.2": +"@babel/generator@^7.0.0", "@babel/generator@^7.2.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.2.tgz#fff31a7b2f2f3dad23ef8e01be45b0d5c2fc0132" integrity sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ== @@ -232,7 +232,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.2.2", "@babel/parser@^7.2.3": +"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd" integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ== @@ -324,7 +324,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.2.0": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== @@ -618,7 +618,7 @@ js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== @@ -627,7 +627,7 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": version "7.2.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== @@ -775,6 +775,11 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-regex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -800,12 +805,12 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== dependencies: - default-require-extensions "^1.0.0" + default-require-extensions "^2.0.0" aproba@^1.0.3: version "1.2.0" @@ -915,13 +920,20 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -async@^2.1.4, async@^2.5.0: +async@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== dependencies: lodash "^4.17.10" +async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -942,171 +954,42 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" +babel-jest@^24.0.0, babel-jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" + integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== + dependencies: + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.1.0" + chalk "^2.4.2" + slash "^2.0.0" -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= +babel-plugin-istanbul@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.0.tgz#6892f529eff65a3e2d33d87dc5888ffa2ecd4a30" + integrity sha512-CLoXPRSUWiR8yao8bShqZUIC6qLfZVVY3X1wj+QPNXu0wfmrRRfarh1LYy+dYMVI+bDj0ghy3tuqFFRFZmL1Nw== dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" + find-up "^3.0.0" + istanbul-lib-instrument "^3.0.0" + test-exclude "^5.0.0" -babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" +babel-plugin-jest-hoist@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" + integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= +babel-preset-jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" + integrity sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw== dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.1.0" balanced-match@^1.0.0: version "1.0.0" @@ -1295,6 +1178,11 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -1308,11 +1196,6 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" @@ -1346,7 +1229,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1381,11 +1264,6 @@ chownr@^1.0.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1504,6 +1382,11 @@ commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +compare-versions@^3.2.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" + integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== + component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" @@ -1519,7 +1402,7 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== @@ -1536,11 +1419,6 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1654,7 +1532,7 @@ date-fns@^1.27.2: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw== -debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -1668,14 +1546,14 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.0: +debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1714,12 +1592,12 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= dependencies: - strip-bom "^2.0.0" + strip-bom "^3.0.0" define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" @@ -1760,13 +1638,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -1777,10 +1648,10 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff-sequences@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" + integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== discontinuous-range@1.0.0: version "1.0.0" @@ -2100,17 +1971,16 @@ expand-template@^1.0.2: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" - integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== +expect@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.1.0.tgz#88e73301c4c785cde5f16da130ab407bdaf8c0f2" + integrity sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw== dependencies: ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" + jest-get-type "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" extend-shallow@^2.0.1: version "2.0.1" @@ -2216,7 +2086,7 @@ filename-regex@^2.0.0: resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= -fileset@^2.0.2: +fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= @@ -2263,13 +2133,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^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" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -2432,7 +2295,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -2449,16 +2312,16 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= +graceful-fs@^4.1.15: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -2472,10 +2335,10 @@ gzip-size@^5.0.0: duplexer "^0.1.1" pify "^3.0.0" -handlebars@^4.0.3: - version "4.0.12" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" - integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== +handlebars@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" + integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== dependencies: async "^2.5.0" optimist "^0.6.1" @@ -2503,11 +2366,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2568,14 +2426,6 @@ hoist-non-react-statics@^3.0.0: dependencies: react-is "^16.7.0" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -2657,12 +2507,12 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - pkg-dir "^2.0.0" + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: @@ -2712,11 +2562,6 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -2763,13 +2608,6 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2872,10 +2710,10 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= +is-generator-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" + integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" @@ -3038,360 +2876,375 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^1.3.1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" +istanbul-api@^2.0.8: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" + integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== + dependencies: + async "^2.6.1" + compare-versions "^3.2.1" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.3" + istanbul-lib-hook "^2.0.3" + istanbul-lib-instrument "^3.1.0" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.2" + istanbul-reports "^2.1.1" + js-yaml "^3.12.0" + make-dir "^1.3.0" + minimatch "^3.0.4" once "^1.4.0" -istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#0b891e5ad42312c2b9488554f603795f9a2211ba" + integrity sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" +istanbul-lib-hook@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz#e0e581e461c611be5d0e5ef31c5f0109759916fb" + integrity sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA== + dependencies: + append-transform "^1.0.0" -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== +istanbul-lib-instrument@^3.0.0, istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz#a2b5484a7d445f1f311e93190813fa56dfb62971" + integrity sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA== dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + istanbul-lib-coverage "^2.0.3" + semver "^5.5.0" -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== +istanbul-lib-report@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz#bfd324ee0c04f59119cb4f07dab157d09f24d7e4" + integrity sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA== dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + supports-color "^6.0.0" -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== +istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz#f1e817229a9146e8424a28e5d69ba220fda34156" + integrity sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ== dependencies: - handlebars "^4.0.3" + debug "^4.1.1" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + rimraf "^2.6.2" + source-map "^0.6.1" -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== +istanbul-reports@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" + integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== dependencies: + handlebars "^4.1.0" + +jest-changed-files@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.0.0.tgz#c02c09a8cc9ca93f513166bc773741bd39898ff7" + integrity sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ== + dependencies: + execa "^1.0.0" throat "^4.0.0" -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" - integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== +jest-cli@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.1.0.tgz#f7cc98995f36e7210cce3cbb12974cbf60940843" + integrity sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" + graceful-fs "^4.1.15" + import-local "^2.0.0" + is-ci "^2.0.0" + istanbul-api "^2.0.8" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-changed-files "^24.0.0" + jest-config "^24.1.0" + jest-environment-jsdom "^24.0.0" + jest-get-type "^24.0.0" + jest-haste-map "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" + jest-resolve-dependencies "^24.1.0" + jest-runner "^24.1.0" + jest-runtime "^24.1.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + jest-watcher "^24.0.0" + jest-worker "^24.0.0" + micromatch "^3.1.10" node-notifier "^5.2.1" - prompts "^0.1.9" + p-each-series "^1.0.0" + pirates "^4.0.0" + prompts "^2.0.1" realpath-native "^1.0.0" rimraf "^2.5.4" - slash "^1.0.0" + slash "^2.0.0" string-length "^2.0.0" - strip-ansi "^4.0.0" + strip-ansi "^5.0.0" which "^1.2.12" - yargs "^11.0.0" + yargs "^12.0.2" -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== +jest-config@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.1.0.tgz#6ea6881cfdd299bc86cc144ee36d937c97c3850c" + integrity sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg== dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" + "@babel/core" "^7.1.0" + babel-jest "^24.1.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== + jest-environment-jsdom "^24.0.0" + jest-environment-node "^24.0.0" + jest-get-type "^24.0.0" + jest-jasmine2 "^24.1.0" + jest-regex-util "^24.0.0" + jest-resolve "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + micromatch "^3.1.10" + pretty-format "^24.0.0" + realpath-native "^1.0.2" + +jest-diff@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.0.0.tgz#a3e5f573dbac482f7d9513ac9cfa21644d3d6b34" + integrity sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA== dependencies: chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" + diff-sequences "^24.0.0" + jest-get-type "^24.0.0" + pretty-format "^24.0.0" -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= +jest-docblock@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.0.0.tgz#54d77a188743e37f62181a91a01eb9222289f94e" + integrity sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA== dependencies: detect-newline "^2.1.0" -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" - integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== +jest-each@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.0.0.tgz#10987a06b21c7ffbfb7706c89d24c52ed864be55" + integrity sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA== dependencies: chalk "^2.0.1" - pretty-format "^23.6.0" + jest-get-type "^24.0.0" + jest-util "^24.0.0" + pretty-format "^24.0.0" -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= +jest-environment-jsdom@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz#5affa0654d6e44cd798003daa1a8701dbd6e4d11" + integrity sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw== dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" + jest-mock "^24.0.0" + jest-util "^24.0.0" jsdom "^11.5.1" -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= +jest-environment-node@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.0.0.tgz#330948980656ed8773ce2e04eb597ed91e3c7190" + integrity sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg== dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" + jest-mock "^24.0.0" + jest-util "^24.0.0" jest-get-type@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== -jest-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" - integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== +jest-get-type@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.0.0.tgz#36e72930b78e33da59a4f63d44d332188278940b" + integrity sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w== + +jest-haste-map@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e" + integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ== dependencies: fb-watchman "^2.0.0" - graceful-fs "^4.1.11" + graceful-fs "^4.1.15" invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" + jest-serializer "^24.0.0" + jest-util "^24.0.0" + jest-worker "^24.0.0" + micromatch "^3.1.10" + sane "^3.0.0" -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== +jest-jasmine2@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" + integrity sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg== dependencies: - babel-traverse "^6.0.0" + "@babel/traverse" "^7.1.0" chalk "^2.0.1" co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" + expect "^24.1.0" + is-generator-fn "^2.0.0" + jest-each "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + pretty-format "^24.0.0" + throat "^4.0.0" -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== +jest-leak-detector@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz#78280119fd05ee98317daee62cddb3aa537a31c6" + integrity sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg== dependencies: - pretty-format "^23.6.0" + pretty-format "^24.0.0" -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" - integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== +jest-matcher-utils@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz#fc9c41cfc49b2c3ec14e576f53d519c37729d579" + integrity sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA== dependencies: chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" + jest-diff "^24.0.0" + jest-get-type "^24.0.0" + pretty-format "^24.0.0" -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= +jest-message-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.0.0.tgz#a07a141433b2c992dbaec68d4cbfe470ba289619" + integrity sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q== dependencies: - "@babel/code-frame" "^7.0.0-beta.35" + "@babel/code-frame" "^7.0.0" chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" + micromatch "^3.1.10" + slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= +jest-mock@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" + integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" - integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= +jest-regex-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" + integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== -jest-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== +jest-resolve-dependencies@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" + integrity sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw== dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" + jest-regex-util "^24.0.0" + jest-snapshot "^24.1.0" -jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" - integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== +jest-resolve@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.1.0.tgz#42ff0169b0ea47bfdbd0c52a0067ca7d022c7688" + integrity sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg== dependencies: browser-resolve "^1.11.3" chalk "^2.0.1" realpath-native "^1.0.0" -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== +jest-runner@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.1.0.tgz#3686a2bb89ce62800da23d7fdc3da2c32792943b" + integrity sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg== dependencies: + chalk "^2.4.2" exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" + graceful-fs "^4.1.15" + jest-config "^24.1.0" + jest-docblock "^24.0.0" + jest-haste-map "^24.0.0" + jest-jasmine2 "^24.1.0" + jest-leak-detector "^24.0.0" + jest-message-util "^24.0.0" + jest-runtime "^24.1.0" + jest-util "^24.0.0" + jest-worker "^24.0.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== +jest-runtime@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.1.0.tgz#7c157a2e776609e8cf552f956a5a19ec9c985214" + integrity sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ== dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" + "@babel/core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" chalk "^2.0.1" convert-source-map "^1.4.0" exit "^0.1.2" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.1.0" + jest-haste-map "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" + jest-resolve "^24.1.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + micromatch "^3.1.10" realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" + slash "^2.0.0" + strip-bom "^3.0.0" + write-file-atomic "2.4.1" + yargs "^12.0.2" -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= +jest-serializer@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" + integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== +jest-snapshot@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" + integrity sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA== dependencies: - babel-types "^6.0.0" + "@babel/types" "^7.0.0" chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" + jest-diff "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-resolve "^24.1.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^23.6.0" + pretty-format "^24.0.0" semver "^5.5.0" -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= +jest-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.0.0.tgz#fd38fcafd6dedbd0af2944d7a227c0d91b68f7d6" + integrity sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ== dependencies: - callsites "^2.0.0" + callsites "^3.0.0" chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + jest-message-util "^24.0.0" mkdirp "^0.5.1" - slash "^1.0.0" + slash "^2.0.0" source-map "^0.6.0" -jest-validate@^23.5.0, jest-validate@^23.6.0: +jest-validate@^23.5.0: version "23.6.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== @@ -3401,21 +3254,26 @@ jest-validate@^23.5.0, jest-validate@^23.6.0: leven "^2.1.0" pretty-format "^23.6.0" -jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= +jest-validate@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" + integrity sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g== dependencies: - ansi-escapes "^3.0.0" + camelcase "^5.0.0" chalk "^2.0.1" - string-length "^2.0.0" + jest-get-type "^24.0.0" + leven "^2.1.0" + pretty-format "^24.0.0" -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= +jest-watcher@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.0.0.tgz#20d44244d10b0b7312410aefd256c1c1eef68890" + integrity sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g== dependencies: - merge-stream "^1.0.1" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.0.0" + string-length "^2.0.0" jest-worker@^24.0.0: version "24.0.0" @@ -3425,13 +3283,13 @@ jest-worker@^24.0.0: merge-stream "^1.0.1" supports-color "^6.1.0" -jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== +jest@^24.0.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" + integrity sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A== dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" + import-local "^2.0.0" + jest-cli "^24.1.0" js-levenshtein@^1.1.3: version "1.1.6" @@ -3443,20 +3301,7 @@ js-levenshtein@^1.1.3: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.7.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.9.0: +js-yaml@^3.12.0, js-yaml@^3.9.0: version "3.12.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== @@ -3501,11 +3346,6 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3536,11 +3376,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -3582,17 +3417,10 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" +kleur@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" + integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== lcid@^2.0.0: version "2.0.0" @@ -3702,13 +3530,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" locate-path@^3.0.0: version "3.0.0" @@ -3738,7 +3568,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: +lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -3795,6 +3625,13 @@ magic-string@^0.25.1: dependencies: sourcemap-codec "^1.4.1" +make-dir@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -3831,13 +3668,6 @@ math-random@^1.0.1: resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - mem@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" @@ -3894,7 +3724,7 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4089,6 +3919,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + node-notifier@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" @@ -4385,15 +4220,6 @@ os-homedir@^1.0.0, os-homedir@^1.0.1: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -4403,7 +4229,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -4421,6 +4247,13 @@ p-defer@^1.0.0: resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -4431,13 +4264,6 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" @@ -4445,13 +4271,6 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4464,10 +4283,10 @@ p-map@^1.1.1: resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== -p-try@^1.0.0: +p-reduce@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^2.0.0: version "2.0.0" @@ -4528,7 +4347,7 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -4557,6 +4376,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -4584,12 +4410,12 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= +pirates@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" + integrity sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA== dependencies: - find-up "^2.1.0" + node-modules-regexp "^1.0.0" pkg-dir@^3.0.0: version "3.0.0" @@ -4660,7 +4486,15 @@ pretty-format@^23.6.0: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -private@^0.1.6, private@^0.1.8: +pretty-format@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" + integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== + dependencies: + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -4677,13 +4511,13 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== +prompts@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.2.tgz#094119b0b0a553ec652908b583205b9867630154" + integrity sha512-Pc/c53d2WZHJWZr78/BhZ5eHsdQtltbyBjHoA4T0cs/4yKJqCcoOHrq2SNKwtspVE0C+ebqAR5u0/mXwrHaADQ== dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" + kleur "^3.0.2" + sisteransi "^1.0.0" prop-types@^15.6.0, prop-types@^15.6.2: version "15.7.2" @@ -4825,6 +4659,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -4834,6 +4676,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" @@ -4872,6 +4723,13 @@ realpath-native@^1.0.0: dependencies: util.promisify "^1.0.0" +realpath-native@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -4899,11 +4757,6 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - regenerator-runtime@^0.12.1: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" @@ -5094,6 +4947,13 @@ rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.0.5" +rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rollup-plugin-alias@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz#80cce3a967befda5b09c86abc14a043a78035b46" @@ -5219,14 +5079,15 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= +sane@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== dependencies: anymatch "^2.0.0" capture-exit "^1.2.0" exec-sh "^0.2.0" + execa "^1.0.0" fb-watchman "^2.0.0" micromatch "^3.1.4" minimist "^1.1.1" @@ -5361,15 +5222,10 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== - -slash@^1.0.0: +sisteransi@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== slash@^2.0.0: version "2.0.0" @@ -5422,13 +5278,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - source-map-support@^0.5.6, source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" @@ -5442,7 +5291,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -5610,10 +5459,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== + dependencies: + ansi-regex "^4.0.0" strip-bom@^2.0.0: version "2.0.0" @@ -5622,6 +5473,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5644,13 +5500,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5658,7 +5507,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: +supports-color@^6.0.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -5739,15 +5588,14 @@ terser@^3.10.0: source-map "~0.6.1" source-map-support "~0.5.6" -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== +test-exclude@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1" + integrity sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA== dependencies: arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" require-main-filename "^1.0.1" throat@^4.0.0: @@ -5765,11 +5613,6 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -6074,10 +5917,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -6100,11 +5943,6 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - "y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -6128,32 +5966,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^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 "^9.0.2" - -yargs@^12.0.5: +yargs@^12.0.2, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== From 1ea40e21117d9c30067dd7b0267aa80b99473c59 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 14 Feb 2019 20:31:42 +0100 Subject: [PATCH 25/46] use `observer` implementation from mobx-react-lite --- .babelrc | 2 +- CHANGELOG.md | 6 +- src/index.d.ts | 31 ---- src/index.js | 32 +--- src/inject.js | 1 - src/observer.js | 259 ++++----------------------- src/utils/EventEmitter.js | 15 -- test/__snapshots__/misc.test.js.snap | 24 --- test/context.test.js | 4 +- test/disposeOnUnmount.test.js | 1 - test/index.js | 9 + test/inject.test.js | 4 +- test/issue21.test.js | 23 +-- test/misc.test.js | 105 ++--------- test/observer.test.js | 75 +++++--- test/patch.test.js | 19 +- test/transactions.test.js | 3 - 17 files changed, 146 insertions(+), 467 deletions(-) delete mode 100644 src/utils/EventEmitter.js diff --git a/.babelrc b/.babelrc index 64782cd4..25c6a919 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,5 @@ { - "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]], + "presets": [["@babel/preset-env"]], "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true}], ["@babel/plugin-proposal-class-properties", { "loose": true}], diff --git a/CHANGELOG.md b/CHANGELOG.md index f727ef02..a443dbbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,13 @@ * Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. * The third argument of custom `storesToProps` functions passed to `inject` is no longer available. * `` no longer supports the deprecated `inject` property. - +* Defining `shouldComponentUpdate` on `observer` compon **Improvements** +* Using `PureComponent` is now _recommended_. +* For `observer` components, there will now be an additional `Observer` component in the tree. +* `componentWillReact` has been dropped + **Migration guide** ### 5.4.3 diff --git a/src/index.d.ts b/src/index.d.ts index fae93079..aeba5266 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -68,8 +68,6 @@ export function disposeOnUnmount( /** * Utilities */ -export function onError(cb: (error: Error) => void): () => void - export class Provider extends React.Component {} export class Observer extends React.Component< @@ -82,35 +80,6 @@ export class Observer extends React.Component< export function useStaticRendering(value: boolean): void -/** - * Enable dev tool support, makes sure that renderReport emits events. - */ -export function trackComponents(): void - -export const renderReporter: RenderReporter - -export interface RenderReporter { - on(handler: (data: IRenderEvent) => void): void -} - -export interface IRenderEvent { - event: "render" | "destroy" - renderTime?: number - totalTime?: number - component: React.ReactElement // Component instance - node: any // DOMNode -} - -/** - * WeakMap DOMNode -> Component instance - * @deprecated - */ -export const componentByNodeRegistery: any -/** - * WeakMap DOMNode -> Component instance - */ -export const componentByNodeRegistry: any - /** * @deprecated, use PropTypes instead */ diff --git a/src/index.js b/src/index.js index 985adaf5..bcbe74fa 100644 --- a/src/index.js +++ b/src/index.js @@ -1,25 +1,19 @@ -import { spy, configure, getDebugName } from "mobx" +import { observable, configure } from "mobx" import { Component } from "react" import { unstable_batchedUpdates as rdBatched } from "react-dom" import { unstable_batchedUpdates as rnBatched } from "react-native" if (!Component) throw new Error("mobx-react requires React to be available") -if (!spy) throw new Error("mobx-react requires mobx to be available") +if (!observable) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) // TODO: re-export more mobx-react-lite stuff? +// TODO; do we still need separate RN build? export { Observer } from "mobx-react-lite" -export { - observer, - renderReporter, - componentByNodeRegistry as componentByNodeRegistery, - componentByNodeRegistry, - trackComponents, - useStaticRendering -} from "./observer" +export { observer, useStaticRendering } from "./observer" export { default as Provider } from "./Provider" export { default as inject } from "./inject" @@ -28,21 +22,3 @@ export { disposeOnUnmount } from "./disposeOnUnmount" import * as propTypes from "./propTypes" export { propTypes } export { propTypes as PropTypes } - -import { errorsReporter } from "./observer" -export const onError = fn => errorsReporter.on(fn) - -/* DevTool support */ -// See: /~https://github.com/andykog/mobx-devtools/blob/d8976c24b8cb727ed59f9a0bc905a009df79e221/src/backend/installGlobalHook.js - -import { renderReporter, componentByNodeRegistry, trackComponents } from "./observer" -if (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === "object") { - const mobx = { spy, extras: { getDebugName } } - const mobxReact = { - renderReporter, - componentByNodeRegistry, - componentByNodeRegistery: componentByNodeRegistry, - trackComponents - } - __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobxReact(mobxReact, mobx) -} diff --git a/src/inject.js b/src/inject.js index 2128f36e..cf1440b7 100644 --- a/src/inject.js +++ b/src/inject.js @@ -1,6 +1,5 @@ import React, { Component, createElement } from "react" import hoistStatics from "hoist-non-react-statics" -import * as PropTypes from "./propTypes" import { observer } from "./observer" import { isStateless } from "./utils/utils" import { MobXProviderContext } from "./Provider" diff --git a/src/observer.js b/src/observer.js index 22d961c6..ce90b8bd 100644 --- a/src/observer.js +++ b/src/observer.js @@ -1,30 +1,16 @@ import React, { Component, PureComponent, forwardRef } from "react" import hoistStatics from "hoist-non-react-statics" -import { createAtom, Reaction, _allowStateChanges, $mobx } from "mobx" -import { findDOMNode as baseFindDOMNode } from "react-dom" +import { createAtom, _allowStateChanges } from "mobx" import { observer as observerLite, useStaticRendering as useStaticRenderingLite, Observer } from "mobx-react-lite" -import EventEmitter from "./utils/EventEmitter" -import { patch as newPatch, newSymbol, shallowEqual } from "./utils/utils" - -const mobxAdminProperty = $mobx || "$mobx" -const mobxIsUnmounted = newSymbol("isUnmounted") - -/** - * dev tool support - */ -let isDevtoolsEnabled = false +import { newSymbol, shallowEqual } from "./utils/utils" let isUsingStaticRendering = false -// WeakMap; -export const componentByNodeRegistry = typeof WeakMap !== "undefined" ? new WeakMap() : undefined -export const renderReporter = new EventEmitter() - const skipRenderKey = newSymbol("skipRender") const isForcingUpdateKey = newSymbol("isForcingUpdate") @@ -51,189 +37,26 @@ function setHiddenProp(target, prop, value) { } } -function findDOMNode(component) { - if (baseFindDOMNode) { - try { - return baseFindDOMNode(component) - } catch (e) { - // findDOMNode will throw in react-test-renderer, see: - // See /~https://github.com/mobxjs/mobx-react/issues/216 - // Is there a better heuristic? - return null - } - } - return null -} - -function reportRendering(component) { - const node = findDOMNode(component) - if (node && componentByNodeRegistry) componentByNodeRegistry.set(node, component) - - renderReporter.emit({ - event: "render", - renderTime: component.__$mobRenderEnd - component.__$mobRenderStart, - totalTime: Date.now() - component.__$mobRenderStart, - component: component, - node: node - }) -} - -export function trackComponents() { - if (typeof WeakMap === "undefined") - throw new Error("[mobx-react] tracking components is not supported in this browser.") - if (!isDevtoolsEnabled) isDevtoolsEnabled = true -} - export function useStaticRendering(useStaticRendering) { isUsingStaticRendering = useStaticRendering useStaticRenderingLite(useStaticRendering) } -/** - * Errors reporter - */ - -export const errorsReporter = new EventEmitter() - -/** - * Utilities - */ - -function patch(target, funcName) { - newPatch(target, funcName, reactiveMixin[funcName]) -} - -function makeComponentReactive(render) { - if (isUsingStaticRendering === true) return render.call(this) - - function reactiveRender() { - isRenderingPending = false - let exception = undefined - let rendering = undefined - reaction.track(() => { - if (isDevtoolsEnabled) { - this.__$mobRenderStart = Date.now() - } - try { - rendering = _allowStateChanges(false, baseRender) - } catch (e) { - exception = e - } - if (isDevtoolsEnabled) { - this.__$mobRenderEnd = Date.now() - } - }) - if (exception) { - reaction.dispose() - errorsReporter.emit(exception) - throw exception - } - return rendering +function observerSCU(nextProps, nextState) { + if (isUsingStaticRendering) { + console.warn( + "[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side." + ) } - - // Generate friendly name for debugging - const initialName = - this.displayName || - this.name || - (this.constructor && (this.constructor.displayName || this.constructor.name)) || - "" - const rootNodeID = - (this._reactInternalInstance && this._reactInternalInstance._rootNodeID) || - (this._reactInternalInstance && this._reactInternalInstance._debugID) || - (this._reactInternalFiber && this._reactInternalFiber._debugID) - /** - * If props are shallowly modified, react will render anyway, - * so atom.reportChanged() should not result in yet another re-render - */ - setHiddenProp(this, skipRenderKey, false) - /** - * forceUpdate will re-assign this.props. We don't want that to cause a loop, - * so detect these changes - */ - setHiddenProp(this, isForcingUpdateKey, false) - - // wire up reactive render - const baseRender = render.bind(this) - let isRenderingPending = false - - const reaction = new Reaction(`${initialName}#${rootNodeID}.render()`, () => { - if (!isRenderingPending) { - // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.js) - // This unidiomatic React usage but React will correctly warn about this so we continue as usual - // See #85 / Pull #44 - isRenderingPending = true - if (typeof this.componentWillReact === "function") this.componentWillReact() // TODO: wrap in action? - if (this[mobxIsUnmounted] !== true) { - // If we are unmounted at this point, componentWillReact() had a side effect causing the component to unmounted - // TODO: remove this check? Then react will properly warn about the fact that this should not happen? See #73 - // However, people also claim this might happen during unit tests.. - let hasError = true - try { - setHiddenProp(this, isForcingUpdateKey, true) - if (!this[skipRenderKey]) Component.prototype.forceUpdate.call(this) - hasError = false - } finally { - setHiddenProp(this, isForcingUpdateKey, false) - if (hasError) reaction.dispose() - } - } - } - }) - reaction.reactComponent = this - reactiveRender[mobxAdminProperty] = reaction - this.render = reactiveRender - return reactiveRender.call(this) -} - -/** - * ReactiveMixin - */ -const reactiveMixin = { - componentWillUnmount: function() { - if (isUsingStaticRendering === true) return - this.render[mobxAdminProperty] && this.render[mobxAdminProperty].dispose() - this[mobxIsUnmounted] = true - if (isDevtoolsEnabled) { - const node = findDOMNode(this) - if (node && componentByNodeRegistry) { - componentByNodeRegistry.delete(node) - } - renderReporter.emit({ - event: "destroy", - component: this, - node: node - }) - } - }, - - componentDidMount: function() { - if (isDevtoolsEnabled) { - reportRendering(this) - } - }, - - componentDidUpdate: function() { - if (isDevtoolsEnabled) { - reportRendering(this) - } - }, - - shouldComponentUpdate: function(nextProps, nextState) { - if (isUsingStaticRendering) { - console.warn( - "[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side." - ) - } - // update on any state changes (as is the default) - if (this.state !== nextState) { - return true - } - // update if props are shallowly not equal, inspired by PureRenderMixin - // we could return just 'false' here, and avoid the `skipRender` checks etc - // however, it is nicer if lifecycle events are triggered like usually, - // so we return true here if props are shallowly modified. - return !shallowEqual(this.props, nextProps) + // update on any state changes (as is the default) + if (this.state !== nextState) { + return true } + // update if props are shallowly not equal, inspired by PureRenderMixin + // we could return just 'false' here, and avoid the `skipRender` checks etc + // however, it is nicer if lifecycle events are triggered like usually, + // so we return true here if props are shallowly modified. + return !shallowEqual(this.props, nextProps) } function makeObservableProp(target, propName) { @@ -274,11 +97,6 @@ export function observer(componentClass) { "Mobx observer: You are trying to use 'observer' on a component that already has 'inject'. Please apply 'observer' before applying 'inject'" ) } - if (componentClass.__proto__ === PureComponent) { - console.warn( - "Mobx observer: You are using 'observer' on React.PureComponent. These two achieve two opposite goals and should not be used together" - ) - } // Unwrap forward refs into `` component // we need to unwrap the render, because it is the inner render that needs to be tracked, @@ -287,15 +105,12 @@ export function observer(componentClass) { const baseRender = componentClass.render if (typeof baseRender !== "function") throw new Error("render property of ForwardRef was not a function") - // TODO: do we need to hoist statics from baseRender to the forward ref? return forwardRef(function ObserverForwardRef() { return {() => baseRender.apply(undefined, arguments)} }) } - // Stateless function component: - // If it is function but doesn't seem to be a react class constructor, - // wrap it to a react class automatically + // Function component if ( typeof componentClass === "function" && (!componentClass.prototype || !componentClass.prototype.render) && @@ -313,36 +128,32 @@ export function observer(componentClass) { return observerComponent } - if (!componentClass) { - throw new Error("Please pass a valid component to 'observer'") - } + return makeClassComponentObserver(componentClass) +} +function makeClassComponentObserver(componentClass) { const target = componentClass.prototype || componentClass - mixinLifecycleEvents(target) + if (target.componentWillReact) + throw new Error("The componentWillReact life-cycle event is no longer supported") + if (componentClass.__proto__ !== PureComponent) { + if (!target.shouldComponentUpdate) target.shouldComponentUpdate = observerSCU + else if (target.shouldComponentUpdate !== observerSCU) + throw new Error( + "It is not allowed to use shouldComponentUpdate in observer based components." + ) + } componentClass.isMobXReactObserver = true makeObservableProp(target, "props") makeObservableProp(target, "state") const baseRender = target.render - target.render = function() { - return makeComponentReactive.call(this, baseRender) - } - return componentClass -} -function mixinLifecycleEvents(target) { - ;["componentDidMount", "componentWillUnmount", "componentDidUpdate"].forEach(function( - funcName - ) { - patch(target, funcName) - }) - if (!target.shouldComponentUpdate) { - target.shouldComponentUpdate = reactiveMixin.shouldComponentUpdate - } else { - if (target.shouldComponentUpdate !== reactiveMixin.shouldComponentUpdate) { - // TODO: make throw in next major - console.warn( - "Use `shouldComponentUpdate` in an `observer` based component breaks the behavior of `observer` and might lead to unexpected results. Manually implementing `sCU` should not be needed when using mobx-react." - ) + target.render = function renderWrapper() { + if (!this.baseRender) { + // safe the closure, as it won't change! + const bound = baseRender.bind(this) + this.baseRender = () => bound() } + return {this.baseRender} } + return componentClass } diff --git a/src/utils/EventEmitter.js b/src/utils/EventEmitter.js deleted file mode 100644 index 5020efe0..00000000 --- a/src/utils/EventEmitter.js +++ /dev/null @@ -1,15 +0,0 @@ -export default class EventEmitter { - listeners = [] - - on(cb) { - this.listeners.push(cb) - return () => { - const index = this.listeners.indexOf(cb) - if (index !== -1) this.listeners.splice(index, 1) - } - } - - emit(data) { - this.listeners.forEach(fn => fn(data)) - } -} diff --git a/test/__snapshots__/misc.test.js.snap b/test/__snapshots__/misc.test.js.snap index d03a0dcf..2b9cc5e9 100644 --- a/test/__snapshots__/misc.test.js.snap +++ b/test/__snapshots__/misc.test.js.snap @@ -1,29 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` 1`] = ` -Object { - "errors": Array [], - "infos": Array [], - "warnings": Array [ - Array [ - "Use \`shouldComponentUpdate\` in an \`observer\` based component breaks the behavior of \`observer\` and might lead to unexpected results. Manually implementing \`sCU\` should not be needed when using mobx-react.", - ], - ], -} -`; - -exports[` 2`] = ` -Object { - "errors": Array [], - "infos": Array [], - "warnings": Array [ - Array [ - "Use \`shouldComponentUpdate\` in an \`observer\` based component breaks the behavior of \`observer\` and might lead to unexpected results. Manually implementing \`sCU\` should not be needed when using mobx-react.", - ], - ], -} -`; - exports[`Do not warn about custom shouldComponentUpdate when it is the one provided by ReactiveMixin 1`] = ` Object { "errors": Array [], diff --git a/test/context.test.js b/test/context.test.js index b9efcd56..988265fa 100644 --- a/test/context.test.js +++ b/test/context.test.js @@ -44,7 +44,9 @@ test("no warnings in modern react", () => { const testRenderer = TestRenderer.create() expect(testRenderer.toJSON()).toMatchSnapshot() - box.set(4) + TestRenderer.act(() => { + box.set(4) + }) expect(testRenderer.toJSON()).toMatchSnapshot() }) ).toEqual({ errors: [], infos: [], warnings: [] }) diff --git a/test/disposeOnUnmount.test.js b/test/disposeOnUnmount.test.js index 1aed6f24..0a3b7a33 100644 --- a/test/disposeOnUnmount.test.js +++ b/test/disposeOnUnmount.test.js @@ -271,7 +271,6 @@ test("custom patching should work", async () => { _makeAllSafe(this, BaseComponent.prototype, [ "componentWillMount", "componentDidMount", - "shouldComponentUpdate", "componentWillUpdate", "componentWillReceiveProps", "render", diff --git a/test/index.js b/test/index.js index 7df4e652..4d1886a0 100644 --- a/test/index.js +++ b/test/index.js @@ -5,6 +5,15 @@ import ReactDOM from "react-dom" configure({ adapter: new Adapter() }) +// Uglyness to find missing 'act' more easily +// 14-2-19 / React 16.8.1, temporarily work around, as error message misses a stack-trace +Error.stackTraceLimit = Infinity +const origError = console.error +console.error = function(msg) { + if (/react-wrap-tests-with-act/.test("" + msg)) throw new Error("missing act") + return origError.apply(this, arguments) +} + export function createTestRoot() { if (!window.document.body) { window.document.body = document.createElement("body") diff --git a/test/inject.test.js b/test/inject.test.js index 511cee6a..dcfc9a50 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -440,7 +440,7 @@ describe("inject based context", () => { const state = new State() - class ListComponent extends React.Component { + class ListComponent extends React.PureComponent { render() { listRender++ const { items } = this.props @@ -467,7 +467,7 @@ describe("inject based context", () => { highlight: state.highlight } }) - class ItemComponent extends React.Component { + class ItemComponent extends React.PureComponent { highlight = () => { const { item, highlight } = this.props highlight(item) diff --git a/test/issue21.test.js b/test/issue21.test.js index 81125b73..4b2a2c01 100644 --- a/test/issue21.test.js +++ b/test/issue21.test.js @@ -177,9 +177,6 @@ test("verify prop changes are picked up", async () => { componentWillUpdate(nextProps) { events.push(["update", this.props.item.subid, nextProps.item.subid]) }, - componentWillReact() { - events.push(["react", this.props.item.subid]) - }, render() { events.push(["render", this.props.item.subid, this.props.item.text]) return {this.props.item.text} @@ -192,7 +189,9 @@ test("verify prop changes are picked up", async () => { render() { return (
- {data.items.map(item => )} + {data.items.map(item => ( + + ))}
) } @@ -217,7 +216,6 @@ test("verify prop changes are picked up", async () => { expect(events.sort()).toEqual( [ ["compute", 1], - ["react", 1], ["receive", 1, 2], ["update", 1, 2], ["compute", 2], @@ -274,9 +272,6 @@ test("verify props is reactive", async () => { componentWillUpdate(nextProps) { events.push(["update", this.props.item.subid, nextProps.item.subid]) }, - componentWillReact() { - events.push(["react", this.props.item.subid]) - }, render() { events.push([ "render", @@ -299,7 +294,9 @@ test("verify props is reactive", async () => { render() { return (
- {data.items.map(item => )} + {data.items.map(item => ( + + ))}
) } @@ -326,7 +323,6 @@ test("verify props is reactive", async () => { expect(events.sort()).toEqual( [ ["compute", 1], - ["react", 1], ["receive", 1, 2], ["update", 1, 2], ["compute", 2], @@ -364,9 +360,6 @@ test("no re-render for shallow equal props", async () => { componentWillUpdate(nextProps) { events.push(["update", this.props.item.subid, nextProps.item.subid]) }, - componentWillReact() { - events.push(["react", this.props.item.subid]) - }, render() { events.push(["render", this.props.item.subid, this.props.item.label]) return {this.props.item.label} @@ -382,7 +375,9 @@ test("no re-render for shallow equal props", async () => { events.push(["parent render", data.parentValue]) return (
- {data.items.map(item => )} + {data.items.map(item => ( + + ))}
) } diff --git a/test/misc.test.js b/test/misc.test.js index f1e8578e..6ace0994 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -11,96 +11,6 @@ const mobxAdminProperty = mobx.$mobx || "$mobx" const testRoot = createTestRoot() -describe("custom shouldComponentUpdate is not respected for observable changes (#50)", () => { - describe("(#50)-1", () => { - expect( - withConsole(() => { - let called = 0 - const x = mobx.observable.box(3) - const C = observer( - createClass({ - render: () => ( -
- value: - {x.get()} -
- ), - shouldComponentUpdate: () => called++ - }) - ) - const wrapper = mount() - test("init div context === value:3 and shouldUpdate hook did not run ", () => { - expect(wrapper.find("div").text()).toBe("value:3") - expect(called).toBe(0) - }) - test("update div context === value:42 and shouldUpdate hook did not run ", () => { - x.set(42) - expect(wrapper.find("div").text()).toBe("value:42") - expect(called).toBe(0) - }) - }) - ).toMatchSnapshot() - }) - - describe("(#50) - 2", () => { - expect( - withConsole(() => { - // shouldComponentUpdate is meaningless with observable props...., just show warning in component definition? - let called = 0 - const y = mobx.observable.box(5) - const C = observer( - createClass({ - render() { - return ( -
- value: - {this.props.y} -
- ) - }, - shouldComponentUpdate(nextProps) { - called++ - return nextProps.y !== 42 - } - }) - ) - const B = observer( - createClass({ - render: () => ( - - - - ) - }) - ) - const wrapper = mount() - test("init div context === value:5", () => { - expect(wrapper.find("div").text()).toBe("value:5") - expect(called).toBe(0) - }) - - test("update div context === value:6 and shouldComponentUpdate hook run", () => { - y.set(6) - expect(wrapper.find("div").text()).toBe("value:6") - expect(called).toBe(1) - }) - - test("update div context === value:6 and shouldComponentUpdate hook run 2", () => { - y.set(42) - // expect(wrapper.find('div').text()).toBe('value:6'); // not updated! TODO: fix - expect(called).toBe(2) - }) - - test("update div context === value:7 and shouldComponentUpdate hook run 3", () => { - y.set(7) - expect(wrapper.find("div").text()).toBe("value:7") - expect(called).toBe(3) - }) - }) - ).toMatchSnapshot() - }) -}) - test("issue mobx 405", () => { function ExampleState() { mobx.extendObservable(this, { @@ -129,8 +39,19 @@ test("issue mobx 405", () => { ) const exampleState = new ExampleState() - const wrapper = shallow() - expect(wrapper.find("span").text()).toBe("Hello my name is test") + const wrapper = renderer.create() + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ + + Hello my name is test + +
+`) }) test("#85 Should handle state changing in constructors", done => { diff --git a/test/observer.test.js b/test/observer.test.js index b23ef184..412d172c 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -38,13 +38,9 @@ describe("nestedRendering", async () => { }) let todoListRenderings = 0 - let todoListWillReactCount = 0 const TodoList = observer( createClass({ renderings: 0, - componentWillReact() { - todoListWillReactCount++ - }, render() { todoListRenderings++ const todos = store.todos @@ -68,7 +64,6 @@ describe("nestedRendering", async () => { test("first rendering", () => { expect(todoListRenderings).toBe(1) - expect(todoListWillReactCount).toBe(0) expect(testRoot.querySelectorAll("li").length).toBe(1) expect(testRoot.querySelector("li").innerHTML).toBe("|a") expect(todoItemRenderings).toBe(1) @@ -77,7 +72,6 @@ describe("nestedRendering", async () => { test("second rendering with inner store changed", () => { store.todos[0].title += "a" expect(todoListRenderings).toBe(1) - expect(todoListWillReactCount).toBe(0) expect(todoItemRenderings).toBe(2) expect(getDNode(store, "todos").observers.size).toBe(1) expect(getDNode(store.todos[0], "title").observers.size).toBe(1) @@ -95,7 +89,6 @@ describe("nestedRendering", async () => { .sort() ).toEqual(["|aa", "|b"].sort()) expect(todoListRenderings).toBe(2) - expect(todoListWillReactCount).toBe(1) expect(todoItemRenderings).toBe(3) expect(getDNode(store.todos[1], "title").observers.size).toBe(1) expect(getDNode(store.todos[1], "completed").observers.size).toBe(0) @@ -104,7 +97,6 @@ describe("nestedRendering", async () => { test("rerendering with outer store pop", () => { const oldTodo = store.todos.pop() expect(todoListRenderings).toBe(3) - expect(todoListWillReactCount).toBe(2) expect(todoItemRenderings).toBe(3) expect(testRoot.querySelectorAll("li").length).toBe(1) expect(getDNode(oldTodo, "title").observers.size).toBe(0) @@ -475,13 +467,15 @@ test("it rerenders correctly if some props are non-observables - 1", () => { ) function stuff() { - data.y++ - odata.x++ + act(() => { + data.y++ + odata.x++ + }) } const wrapper = renderer.create() - const contents = () => wrapper.toTree().rendered.rendered.rendered.join("") + const contents = () => wrapper.toTree().rendered.rendered.rendered.rendered.rendered.join("") expect(contents()).toEqual("1-1-1") stuff() @@ -495,7 +489,7 @@ test("it rerenders correctly if some props are non-observables - 2", () => { let odata = mobx.observable({ x: 1 }) @observer - class Component extends React.Component { + class Component extends React.PureComponent { @mobx.computed get computed() { return this.props.data.y // should recompute, since props.data is changed @@ -529,7 +523,7 @@ test("it rerenders correctly if some props are non-observables - 2", () => { const wrapper = renderer.create() - const contents = () => wrapper.toTree().rendered.rendered.rendered.join("") + const contents = () => wrapper.toTree().rendered.rendered.rendered.rendered.join("") expect(renderCount).toBe(1) expect(contents()).toBe("1-1") @@ -651,13 +645,13 @@ test("parent / childs render in the right order", done => { const container = TestUtils.renderIntoDocument() - debugger tryLogout() expect(events).toEqual(["parent", "child", "parent"]) done() }) -describe("206 - @observer should produce usefull errors if it throws", () => { +// TODO: waits for error throw fix in lite +describe.skip("206 - @observer should produce usefull errors if it throws", () => { const data = mobx.observable({ x: 1 }) let renderCount = 0 @@ -787,13 +781,12 @@ describe("use Observer inject and render sugar should work ", () => { }) }) -test("don't use PureComponent", () => { +test("use PureComponent", () => { const msg = [] const baseWarn = console.warn console.warn = m => msg.push(m) try { - debugger observer( class X extends React.PureComponent { return() { @@ -802,9 +795,7 @@ test("don't use PureComponent", () => { } ) - expect(msg).toEqual([ - "Mobx observer: You are using 'observer' on React.PureComponent. These two achieve two opposite goals and should not be used together" - ]) + expect(msg).toEqual([]) } finally { console.warn = baseWarn } @@ -818,3 +809,47 @@ test("static on function components are hoisted", () => { expect(Comp2.foo).toBe(3) }) + +test("computed properties react to props", async () => { + const seen = [] + @observer + class Child extends React.Component { + @mobx.computed + get getPropX() { + return this.props.x + } + + render() { + seen.push(this.getPropX) + return
{this.getPropX}
+ } + } + + class Parent extends React.Component { + state = { x: 0 } + render() { + seen.push("parent") + return + } + + componentDidMount() { + setTimeout(() => this.setState({ x: 2 }), 100) + } + } + + const wrapper = renderer.create() + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 0 +
+`) + + await sleepHelper(200) + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 2 +
+`) + + expect(seen).toEqual(["parent", 0, "parent", 2]) +}) diff --git a/test/patch.test.js b/test/patch.test.js index b265668e..d84e0fcc 100644 --- a/test/patch.test.js +++ b/test/patch.test.js @@ -25,7 +25,8 @@ async function testComponent(C, didMountMixin, willUnmountMixin, doMixinTest = t } } -test("no overrides", async () => { +// TODO: all tests in this file are disabled now, can be removed if patching is no longer used +test.skip("no overrides", async () => { const cdm = jest.fn() const cwu = jest.fn() class C extends React.Component { @@ -39,7 +40,7 @@ test("no overrides", async () => { await testComponent(C, cdm, cwu) }) -test("prototype overrides", async () => { +test.skip("prototype overrides", async () => { const cdm = jest.fn() const cwu = jest.fn() let cdmCalls = 0 @@ -63,7 +64,7 @@ test("prototype overrides", async () => { expect(cwuCalls).toBe(1) }) -test("arrow function overrides", async () => { +test.skip("arrow function overrides", async () => { const cdm = jest.fn() const cwu = jest.fn() let cdmCalls = 0 @@ -87,7 +88,7 @@ test("arrow function overrides", async () => { expect(cwuCalls).toBe(1) }) -test("recursive calls", async () => { +test.skip("recursive calls", async () => { const cdm = jest.fn() const cwu = jest.fn() let cdmCalls = 0 @@ -117,7 +118,7 @@ test("recursive calls", async () => { expect(cwuCalls).toBe(10) }) -test("prototype + arrow function overrides", async () => { +test.skip("prototype + arrow function overrides", async () => { const cdm = jest.fn() const cwu = jest.fn() let cdmCalls = 0 @@ -150,7 +151,7 @@ test("prototype + arrow function overrides", async () => { expect(cwuCalls).toBe(1) }) -describe("inheritance with prototype methods", async () => { +describe.skip("inheritance with prototype methods", async () => { async function doTest(patchBase, patchOther, callSuper) { const cdm = jest.fn() const cwu = jest.fn() @@ -217,7 +218,7 @@ describe("inheritance with prototype methods", async () => { } }) -describe("inheritance with arrow functions", async () => { +describe.skip("inheritance with arrow functions", async () => { async function doTest(patchBase, patchOther, callSuper) { const cdm = jest.fn() const cwu = jest.fn() @@ -276,7 +277,7 @@ describe("inheritance with arrow functions", async () => { } }) -test("custom decorator #579", async () => { +test.skip("custom decorator #579", async () => { async function doTest(customFirst) { const customDidMount = jest.fn() const customConstruct = jest.fn() @@ -289,7 +290,7 @@ test("custom decorator #579", async () => { // a utility function to generate instances of a class function construct(oldConstructor, args) { var c = function() { - return oldConstructor.apply(this, args) + return new oldConstructor.apply(this, args) } c.prototype = oldConstructor.prototype instance = new c() diff --git a/test/transactions.test.js b/test/transactions.test.js index cad0b37a..b60969bf 100644 --- a/test/transactions.test.js +++ b/test/transactions.test.js @@ -23,11 +23,9 @@ test("mobx issue 50", async () => { }) } let asText = "" - let willReactCount = 0 mobx.autorun(() => (asText = [foo.a.get(), foo.b.get(), foo.c.get()].join(":"))) const Test = mobxReact.observer( createClass({ - componentWillReact: () => willReactCount++, render: () =>
{[foo.a.get(), foo.b.get(), foo.c.get()].join(",")}
}) ) @@ -42,7 +40,6 @@ test("mobx issue 50", async () => { expect(asText).toBe("false:true:true") // console.log(document.getElementById("x").innerHTML) expect(document.getElementById("x").innerHTML).toBe("false,true,true") - expect(willReactCount).toBe(1) }) test("React.render should respect transaction", async () => { From bb9b55ea92a2b12448497a7e038a3cd35399d63b Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 15 Feb 2019 13:56:20 +0100 Subject: [PATCH 26/46] Got rid of enzyme --- .babelrc | 2 +- package.json | 6 +- test/__snapshots__/inject.test.js.snap | 13 +- test/context.test.js | 7 +- test/index.js | 4 - test/inject.test.js | 113 +++++-- test/misc.test.js | 5 +- yarn.lock | 392 ++----------------------- 8 files changed, 130 insertions(+), 412 deletions(-) diff --git a/.babelrc b/.babelrc index 25c6a919..64782cd4 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,5 @@ { - "presets": [["@babel/preset-env"]], + "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]], "plugins": [ ["@babel/plugin-proposal-decorators", { "legacy": true}], ["@babel/plugin-proposal-class-properties", { "loose": true}], diff --git a/package.json b/package.json index 11bafe9f..1f98b84f 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,6 @@ "babel-core": "^7.0.0-bridge.0", "babel-jest": "^24.0.0", "create-react-class": "^15.6.2", - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.0.0", "husky": "^1.0.0", "jest": "^24.0.0", "jest-environment-jsdom": "^24.0.0", @@ -54,8 +52,8 @@ "opn-cli": "^3.1.0", "prettier": "^1.7.2", "prop-types": "^15.6.0", - "react": "^16.8.0", - "react-dom": "^16.8.0", + "react": "^16.8.2", + "react-dom": "^16.8.2", "react-test-renderer": "^16.6.3", "regenerator-runtime": "^0.12.1", "request": "^2.83.0", diff --git a/test/__snapshots__/inject.test.js.snap b/test/__snapshots__/inject.test.js.snap index 995c3992..854a1ad4 100644 --- a/test/__snapshots__/inject.test.js.snap +++ b/test/__snapshots__/inject.test.js.snap @@ -1,8 +1,15 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`inject based context warning is printed when changing stores 1`] = ` +exports[`inject based context warning is printed when changing stores 2`] = ` Array [ - "Error: Uncaught [Error: MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children]", - "The above error occurred in the component:", + Array [ + "The above error occurred in the component:", + " in Provider (created by Observer)", + " in section (created by Observer)", + " in Observer", + " in Unknown", + "", + "Consider adding an error boundary to your tree to customize error handling behavior.", + ], ] `; diff --git a/test/context.test.js b/test/context.test.js index 988265fa..e2d5005b 100644 --- a/test/context.test.js +++ b/test/context.test.js @@ -1,11 +1,7 @@ import React from "react" -import createClass from "create-react-class" -import { mount } from "enzyme" import * as mobx from "mobx" -import { shallow } from "enzyme" -import ErrorCatcher from "./ErrorCatcher" import { Provider, observer, inject } from "../src" -import { sleepHelper, withConsole } from "./" +import { withConsole } from "./" import TestRenderer from "react-test-renderer" test("no warnings in modern react", () => { @@ -38,7 +34,6 @@ test("no warnings in modern react", () => { } } - // Enzyme can't handle React.strictMode expect( withConsole(() => { const testRenderer = TestRenderer.create() diff --git a/test/index.js b/test/index.js index 4d1886a0..6ac96d84 100644 --- a/test/index.js +++ b/test/index.js @@ -1,10 +1,6 @@ -import { configure } from "enzyme" -import Adapter from "enzyme-adapter-react-16" import React from "react" import ReactDOM from "react-dom" -configure({ adapter: new Adapter() }) - // Uglyness to find missing 'act' more easily // 14-2-19 / React 16.8.1, temporarily work around, as error message misses a stack-trace Error.stackTraceLimit = Infinity diff --git a/test/inject.test.js b/test/inject.test.js index dcfc9a50..849b4ce6 100644 --- a/test/inject.test.js +++ b/test/inject.test.js @@ -2,12 +2,11 @@ import React from "react" import * as PropTypes from "prop-types" import createClass from "create-react-class" import ReactDOM from "react-dom" -import { mount } from "enzyme" import * as mobx from "mobx" -import { action, observable, computed } from "mobx" +import { action, observable } from "mobx" import { observer, inject, Provider } from "../src" import { createTestRoot, sleepHelper, withConsole } from "./index" -import renderer from "react-test-renderer" +import renderer, { act } from "react-test-renderer" const testRoot = createTestRoot() @@ -33,8 +32,13 @@ describe("inject based context", () => { ) - const wrapper = mount() - expect(wrapper.find("div").text()).toEqual("context:bar") + const wrapper = renderer.create() + expect(wrapper).toMatchInlineSnapshot(` +
+ context: + bar +
+`) }) test("props override context", () => { @@ -58,8 +62,13 @@ describe("inject based context", () => {
) }) - const wrapper = mount() - expect(wrapper.find("div").text()).toEqual("context:42") + const wrapper = renderer.create() + expect(wrapper).toMatchInlineSnapshot(` +
+ context: + 42 +
+`) }) test("overriding stores is supported", () => { @@ -95,9 +104,25 @@ describe("inject based context", () => { ) }) - const wrapper = mount(
) - expect(wrapper.find("span").text()).toEqual("context:bar1337") - expect(wrapper.find("section").text()).toEqual("context:421337") + const wrapper = renderer.create() + expect(wrapper).toMatchInlineSnapshot(` +
+ +
+ context: + bar + 1337 +
+
+
+
+ context: + 42 + 1337 +
+
+
+`) }) // FIXME: see other comments related to error catching in React @@ -126,7 +151,7 @@ describe("inject based context", () => { ) }) withConsole(() => { - expect(() => mount(
)).toThrow( + expect(() => renderer.create()).toThrow( /Store 'foo' is not available! Make sure it is provided by some Provider/ ) }) @@ -148,8 +173,13 @@ describe("inject based context", () => { ) ) const B = () => - const wrapper = mount() - expect(wrapper.find("div").text()).toEqual("context:bar") + const wrapper = renderer.create() + expect(wrapper).toMatchInlineSnapshot(` +
+ context: + bar +
+`) }) test("inject merges (and overrides) props", () => { @@ -164,13 +194,13 @@ describe("inject based context", () => { ) ) const B = () => - mount() + renderer.create() }) test("warning is printed when changing stores", () => { let msgs = [] const baseError = console.error - console.error = m => msgs.push(m.split("\n")[0]) // drop stacktraces to avoid line number issues + console.error = m => msgs.push(m.split("\n").slice(0, 7)) // drop stacktraces to avoid line number issues const a = mobx.observable.box(3) const C = inject("foo")( observer( @@ -203,13 +233,24 @@ describe("inject based context", () => { ) }) ) - const wrapper = mount(
) - - expect(wrapper.find("span").text()).toBe("3") - expect(wrapper.find("div").text()).toBe("context:3") + const wrapper = renderer.create() + + expect(wrapper).toMatchInlineSnapshot(` +
+ + 3 + +
+ context: + 3 +
+
+`) expect(() => { - a.set(42) + act(() => { + a.set(42) + }) }).toThrow( "The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" ) @@ -249,8 +290,14 @@ describe("inject based context", () => { ) - const wrapper = mount(
) - expect(wrapper.find("div").text()).toBe("context:bar84") + const wrapper = renderer.create() + expect(wrapper).toMatchInlineSnapshot(` +
+ context: + bar + 84 +
+`) }) test("inject forwards ref", async () => { @@ -337,7 +384,7 @@ describe("inject based context", () => { ) - mount(
) + renderer.create() expect(msg.length).toBe(2) expect(msg[0].split("\n")[0]).toBe( "Warning: Failed prop type: The prop `x` is marked as required in `inject-C-with-foo`, but its value is `undefined`." @@ -400,11 +447,21 @@ describe("inject based context", () => { ) - const wrapper = mount() - - expect(wrapper.find("h1").text()).toBe("Noa") - user.name = "Veria" - expect(wrapper.find("h1").text()).toBe("Veria") + const wrapper = renderer.create() + + expect(wrapper).toMatchInlineSnapshot(` +

+ Noa +

+`) + act(() => { + user.name = "Veria" + }) + expect(wrapper).toMatchInlineSnapshot(` +

+ Veria +

+`) }) test("using a custom injector is not too reactive", done => { diff --git a/test/misc.test.js b/test/misc.test.js index 6ace0994..6fc42651 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -1,10 +1,9 @@ -import React, { createElement } from "react" +import React from "react" import createClass from "create-react-class" import ReactDOM from "react-dom" -import { mount, shallow } from "enzyme" import * as mobx from "mobx" import { observer } from "../src" -import { createTestRoot, withConsole, asyncReactDOMRender } from "./index" +import { createTestRoot, withConsole } from "./index" import renderer, { act } from "react-test-renderer" const mobxAdminProperty = mobx.$mobx || "$mobx" diff --git a/yarn.lock b/yarn.lock index b2097649..2c4565be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -874,15 +874,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" - integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1024,11 +1015,6 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - boxen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-2.0.0.tgz#46ba3953b1a3d99aaf89ad8c7104a32874934a58" @@ -1247,18 +1233,6 @@ chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.2" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" - integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - chownr@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -1372,7 +1346,7 @@ combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.14.1, commander@^2.19.0, commander@^2.9.0: +commander@^2.14.1, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== @@ -1472,21 +1446,6 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d" - integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ== - cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" @@ -1599,7 +1558,7 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1653,29 +1612,6 @@ diff-sequences@^24.0.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= - -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1683,29 +1619,6 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -1743,60 +1656,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -enzyme-adapter-react-16@^1.0.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.9.1.tgz#6d49a3a31c3a0fccf527610f31b837e0f307128a" - integrity sha512-Egzogv1y77DUxdnq/CyHxLHaNxmSSKDDSDNNB/EiAXCZVFXdFibaNy2uUuRQ1n24T2m6KH/1Rw16XDRq+1yVEg== - dependencies: - enzyme-adapter-utils "^1.10.0" - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.values "^1.1.0" - prop-types "^15.6.2" - react-is "^16.7.0" - react-test-renderer "^16.0.0-0" - -enzyme-adapter-utils@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.0.tgz#5836169f68b9e8733cb5b69cad5da2a49e34f550" - integrity sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA== - dependencies: - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.fromentries "^2.0.0" - prop-types "^15.6.2" - semver "^5.6.0" - -enzyme@^3.3.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5" - integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw== - dependencies: - array.prototype.flat "^1.2.1" - cheerio "^1.0.0-rc.2" - function.prototype.name "^1.1.0" - has "^1.0.3" - is-boolean-object "^1.0.0" - is-callable "^1.1.4" - is-number-object "^1.0.3" - is-string "^1.0.4" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.6.0" - object-is "^1.0.1" - object.assign "^4.1.0" - object.entries "^1.0.4" - object.values "^1.0.4" - raf "^3.4.0" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.1.2" - error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1804,18 +1663,6 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" @@ -1827,7 +1674,7 @@ es-abstract@^1.5.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: +es-to-primitive@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== @@ -2198,20 +2045,11 @@ fsevents@^1.2.3: nan "^2.9.2" node-pre-gyp "^0.10.0" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" - integrity sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - is-callable "^1.1.3" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2412,7 +2250,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +has@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -2438,18 +2276,6 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -htmlparser2@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464" - integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ== - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -2540,7 +2366,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -2586,11 +2412,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2734,11 +2555,6 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2809,16 +2625,6 @@ is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= - is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -3548,27 +3354,12 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: +lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -3827,11 +3618,6 @@ mobx@^5.0.0: resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.9.0.tgz#a08edd7132787f771409c9c33788a5df66ff7ce7" integrity sha512-D3mY1uM3H9BP5duk5tTanrOq92yqetYKsprPJWvkKDrbs+fro59xrpWX+vtr10YoLgJIFz+a4A8lI+4YtqmCUQ== -moo@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" - integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3874,17 +3660,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nearley@^2.7.10: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.16.0.tgz#77c297d041941d268290ec84b739d0ee297e83a7" - integrity sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg== - dependencies: - commander "^2.19.0" - moo "^0.4.3" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - semver "^5.4.1" - needle@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" @@ -4043,13 +3818,6 @@ npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -4079,17 +3847,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= - -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.12: version "1.1.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== @@ -4101,36 +3859,6 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" - object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -4154,16 +3882,6 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.0.4, object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -4323,13 +4041,6 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -4577,26 +4288,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -raf@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -4616,22 +4307,22 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.8.0: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.1.tgz#ec860f98853d09d39bafd3a6f1e12389d283dbb4" - integrity sha512-N74IZUrPt6UiDjXaO7UbDDFXeUXnVhZzeRLy/6iqqN1ipfjrhR60Bp5NuBK+rv3GMdqdIuwIl22u1SYwf330bg== +react-dom@^16.8.2: + version "16.8.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.2.tgz#7c8a69545dd554d45d66442230ba04a6a0a3c3d3" + integrity sha512-cPGfgFfwi+VCZjk73buu14pYkYBR1b/SRMSYqkLDdhSEHnSwcuYTPu6/Bh6ZphJFIk80XLvbSe2azfcRzNF+Xg== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.1" + scheduler "^0.13.2" react-is@^16.7.0, react-is@^16.8.1: version "16.8.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.1.tgz#a80141e246eb894824fb4f2901c0c50ef31d4cdb" integrity sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA== -react-test-renderer@^16.0.0-0, react-test-renderer@^16.6.3: +react-test-renderer@^16.6.3: version "16.8.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.8.1.tgz#72845ad9269be526126e97853311982f781767be" integrity sha512-Bd21TN3+YVl6GZwav6O0T6m5UwGfOj+2+xZH5VH93ToD6M5uclN/c+R1DGX49ueG413KZPUx7Kw3sOYz2aJgfg== @@ -4641,15 +4332,15 @@ react-test-renderer@^16.0.0-0, react-test-renderer@^16.6.3: react-is "^16.8.1" scheduler "^0.13.1" -react@^16.8.0: - version "16.8.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.8.1.tgz#ae11831f6cb2a05d58603a976afc8a558e852c4a" - integrity sha512-wLw5CFGPdo7p/AgteFz7GblI2JPOos0+biSoxf1FPsGxWQZdN/pj6oToJs1crn61DL3Ln7mN86uZ4j74p31ELQ== +react@^16.8.2: + version "16.8.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.2.tgz#83064596feaa98d9c2857c4deae1848b542c9c0c" + integrity sha512-aB2ctx9uQ9vo09HVknqv3DGRpI7OIGJhCx3Bt0QqoRluEjHSaObJl+nG12GDdYH6sTgE7YiPJ6ZUyMx9kICdXw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.13.1" + scheduler "^0.13.2" read-pkg-up@^1.0.1: version "1.0.1" @@ -4707,15 +4398,6 @@ readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.3.0, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6: - version "3.1.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" - integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - realpath-native@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" @@ -5037,14 +4719,6 @@ rollup@^1.1.2: "@types/node" "*" acorn "^6.0.5" -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" @@ -5109,12 +4783,20 @@ scheduler@^0.13.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.2.tgz#969eaee2764a51d2e97b20a60963b2546beff8fa" + integrity sha512-qK5P8tHS7vdEMCW5IPyt8v9MJOHqTrOUgPXib7tqm9vh834ibBX5BNhwkplX/0iOzHW5sXyluehYfS9yrkz9+w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -5413,22 +5095,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string.prototype.trim@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" - integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - function-bind "^1.0.2" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -5761,7 +5427,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= From 44a9b934c6fd909716c657659135c94ddef17cad Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 15 Feb 2019 14:57:57 +0100 Subject: [PATCH 27/46] Fixed typescript tests --- test/ts/compile-ts.tsx | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/test/ts/compile-ts.tsx b/test/ts/compile-ts.tsx index 1893bc86..6ca29889 100644 --- a/test/ts/compile-ts.tsx +++ b/test/ts/compile-ts.tsx @@ -69,35 +69,6 @@ React.createElement(observer(T7), { pizza: 4 }) ReactDOM.render(, document.body) -/// with stores -@observer(["store1", "store2"]) -class T8 extends Component<{ pizza: number }, {}> { - render() { - return
{this.props.pizza}
- } -} - -const T9 = observer( - ["stores"], - createClass({ - getDefaultProps() { - return { cake: 7 } - }, - render() { - return ( -
- -
- ) - } - }) -) - -const T10 = observer(["stores"], (props: { hamburger: number }) => { - return -}) - -React.createElement(observer(T8), { pizza: 4 }) class ProviderTest extends Component { render() { @@ -221,8 +192,6 @@ class LoginContainer2 extends Component< ReactDOM.render(, document.body) -ReactDOM.render(, document.body) - class ObserverTest extends Component { render() { return {() =>
test
}
From 23f0d0541d3d6ea650745251d52ea8f185e8f8bb Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 15 Feb 2019 14:58:09 +0100 Subject: [PATCH 28/46] Use microbundle for builds --- .editorconfig | 6 - .gitignore | 10 +- .npmignore | 10 - build-rollup.js | 118 --- empty.js | 3 - package.json | 37 +- yarn.lock | 2523 +++++++++++++++++++++++++++++++++++++---------- 7 files changed, 2009 insertions(+), 698 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .npmignore delete mode 100644 build-rollup.js delete mode 100644 empty.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 00a788a3..00000000 --- a/.editorconfig +++ /dev/null @@ -1,6 +0,0 @@ -root = true - -[*] -indent_size = 4 -charset = utf-8 - diff --git a/.gitignore b/.gitignore index 8588e3fd..d5f792cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,8 @@ +/dist /node_modules /test/node_modules /npm-debug.log -/native.js -/native.d.ts -/custom.js -/custom.module.js -/custom.d.ts /test/custom.d.ts -/index.js -/index.module.js -/index.min.js -/index.d.ts /test/index.d.ts /.idea /*.iml diff --git a/.npmignore b/.npmignore deleted file mode 100644 index d49594bc..00000000 --- a/.npmignore +++ /dev/null @@ -1,10 +0,0 @@ -/node_modules/ -test/ -publish.js -*.patch -src -webpack.config.js -*.html -build-rollup.js -.vscode -.babelrc diff --git a/build-rollup.js b/build-rollup.js deleted file mode 100644 index 823cabcc..00000000 --- a/build-rollup.js +++ /dev/null @@ -1,118 +0,0 @@ -var path = require("path") -// var filesize = require("rollup-plugin-filesize") -var babel = require("rollup-plugin-babel") -var commonjs = require("rollup-plugin-commonjs") -var resolve = require("rollup-plugin-node-resolve") -var uglify = require("rollup-plugin-uglify").uglify -var alias = require("rollup-plugin-alias") -var replace = require("rollup-plugin-replace") -var buildVersion = require("./package.json").version - -var { rollup } = require("rollup") - -var emptyModulePath = path.resolve(__dirname, "empty.js") - -var license = ` * Copyright (c) 2015 Michel Weststrate. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree.` - -function licenseWrapper(source, version, filename) { - return `/** @license mobx-react v${version} - * ${filename} - * -${license} - */ -${source}` -} - -function getExternals(target) { - switch (target) { - case "browser": - return ["react", "mobx", "react-dom"] - case "native": - return ["react", "mobx", "react-native"] - case "custom": - return ["react", "mobx"] - } -} - -function getAliases(target) { - switch (target) { - case "browser": - return { "react-native": emptyModulePath } - case "native": - return { "react-dom": emptyModulePath } - case "custom": - return { "react-native": emptyModulePath, "react-dom": emptyModulePath } - } -} - -function build(target, mode, filename) { - var plugins = [ - replace({ - // for depencencies such as react-is - "process.env.NODE_ENV": JSON.stringify("production") - }), - alias(getAliases(target)), - babel({ - exclude: "node_modules/**" - }), - resolve({ - module: true, - main: true - }), - commonjs(), - { - transformBundle(source) { - return licenseWrapper(source, buildVersion, filename) - } - } - ] - - if (mode.endsWith(".min")) { - plugins.push( - uglify({ - ie8: false, - warnings: false - }) - ) - } - - // plugins.push(filesize()) - - return rollup({ - input: "src/index.js", - external: getExternals(target), - plugins: plugins - }) - .then(function(bundle) { - var options = { - file: path.resolve(__dirname, filename), - format: mode.endsWith(".min") ? mode.slice(0, -".min".length) : mode, - globals: { - react: "React", - "react-dom": "ReactDOM", - "react-native": "ReactNative", - mobx: "mobx" - }, - name: "mobxReact", - exports: "named" - } - - return bundle.write(options) - }) - .catch(function(reason) { - console.error(reason) - process.exit(-1) - }) -} - -Promise.all([ - build("browser", "umd", "index.js"), - build("browser", "umd.min", "index.min.js"), - build("browser", "es", "index.module.js"), - build("native", "cjs", "native.js"), - build("custom", "umd", "custom.js"), - build("custom", "es", "custom.module.js") -]) diff --git a/empty.js b/empty.js deleted file mode 100644 index 13eb3bc4..00000000 --- a/empty.js +++ /dev/null @@ -1,3 +0,0 @@ -// These functions can be stubbed out in specific environments -export const unstable_batchedUpdates = undefined -export const findDOMNode = undefined diff --git a/package.json b/package.json index 1f98b84f..8412d248 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,14 @@ "name": "mobx-react", "version": "5.4.3", "description": "React bindings for MobX. Create fully reactive components.", - "main": "index.js", - "jsnext:main": "index.module.js", - "module": "index.module.js", - "react-native": "native.js", - "typings": "index", + "source": "src/index.js", + "main": "dist/mobx-react.js", + "jsnext:main": "dist/mobx-react.mjs", + "umd:main": "dist/core.umd.js", + "unpkg": "dist/core.umd.js", + "module": "dist/mobx-react.mjs", + "react-native": "dist/mobx-react.mjs", + "typings": "dist/mobx-react.d.ts", "repository": { "type": "git", "url": "/~https://github.com/mobxjs/mobx-react.git" @@ -16,7 +19,8 @@ "test": "jest && npm run test:ts", "test:ts": "tsc -p test/ts", "test:travis": "npm run build && jest && npm run test:ts", - "build": "node build-rollup.js && shx cp src/index.d.ts index.d.ts && shx cp src/index.d.ts native.d.ts && shx cp src/index.d.ts custom.d.ts", + "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts", + "bundle": "microbundle --external mobx,react,react-dom,react-native --globals react-dom=ReactDOM,react-native=ReactNative,react=React --name mobxReact", "watch": "jest --watch" }, "author": "Michel Weststrate", @@ -27,7 +31,7 @@ "homepage": "https://mobxjs.github.io/mobx", "peerDependencies": { "mobx": "^4.0.0 || ^5.0.0", - "react": "^0.13.0 || ^0.14.0 || ^15.0.0 || ^16.0.0" + "react": "^16.8.0" }, "devDependencies": { "@babel/core": "^7.1.0", @@ -40,32 +44,22 @@ "@types/prop-types": "^15.5.2", "@types/react": "^16.0.13", "@types/react-dom": "^16.0.1", - "babel-core": "^7.0.0-bridge.0", - "babel-jest": "^24.0.0", + "babel-jest": "^24.1.0", "create-react-class": "^15.6.2", "husky": "^1.0.0", "jest": "^24.0.0", "jest-environment-jsdom": "^24.0.0", "lint-staged": "^7.0.5", "lodash": "^4.17.4", + "microbundle": "^0.9.0", "mobx": "^5.0.0", - "opn-cli": "^3.1.0", "prettier": "^1.7.2", "prop-types": "^15.6.0", "react": "^16.8.2", "react-dom": "^16.8.2", "react-test-renderer": "^16.6.3", - "regenerator-runtime": "^0.12.1", "request": "^2.83.0", - "rollup": "^1.1.2", - "rollup-plugin-alias": "^1.5.1", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-commonjs": "^9.2.0", - "rollup-plugin-filesize": "^6.0.1", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-replace": "^2.1.0", - "rollup-plugin-uglify": "^6.0.2", - "shelljs": "^0.8.2", + "shelljs": "^0.8.3", "shx": "^0.3.2", "typescript": "^2.6.0" }, @@ -73,6 +67,9 @@ "hoist-non-react-statics": "^3.0.0", "mobx-react-lite": "1.0.1" }, + "files": [ + "dist" + ], "keywords": [ "mobx", "mobservable", diff --git a/yarn.lock b/yarn.lock index 2c4565be..c3a20d1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0": +"@babel/core@^7.1.0", "@babel/core@^7.1.6": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== @@ -246,6 +246,18 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" +"@babel/plugin-proposal-class-properties@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" + integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-proposal-class-properties@^7.1.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd" @@ -303,6 +315,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-class-properties@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" + integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" @@ -317,7 +336,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7.2.0": +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== @@ -569,6 +588,14 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" +"@babel/polyfill@^7.0.0": + version "7.2.5" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" + integrity sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug== + dependencies: + core-js "^2.5.7" + regenerator-runtime "^0.12.0" + "@babel/preset-env@^7.1.0": version "7.3.1" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.1.tgz#389e8ca6b17ae67aaf9a2111665030be923515db" @@ -671,9 +698,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/node@*": - version "11.9.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.3.tgz#14adbb5ab8cd563f549fbae8dbe92e0b7d6e76cc" - integrity sha512-DMiqG51GwES/c4ScBY0u5bDlH44+oY8AeYHjY1SGCWidD7h08o1dfHue/TGK7REmif2KiJzaUskO+Q0eaeZ2fQ== + version "11.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.4.tgz#ceb0048a546db453f6248f2d1d95e937a6f00a14" + integrity sha512-Zl8dGvAcEmadgs1tmSPcvwzO1YRsz38bVJQvH1RvRqSR9/5n61Q1ktcDL0ht3FXWR+ZpVmXVwN1LuH4Ax23NsA== "@types/node@^10.0.0": version "10.12.26" @@ -685,6 +712,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.9.tgz#f2d14df87b0739041bc53a7d75e3d77d726a3ec0" integrity sha512-Nha5b+jmBI271jdTMwrHiNXM+DvThjHOfyZtMX9kj/c/LUj2xiLHsG/1L3tJ8DjAoQN48cHwUwtqBotjyXaSdQ== +"@types/q@^1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.1.tgz#48fd98c1561fe718b61733daed46ff115b496e18" + integrity sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA== + "@types/react-dom@^16.0.1": version "16.8.1" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.1.tgz#e43810a5e44b37854a9c7cd99e6c43e4f522c7c6" @@ -733,11 +765,6 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== -acorn@^6.0.5: - version "6.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" - integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== - ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -748,12 +775,10 @@ ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" +alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-escapes@^1.0.0: version "1.4.0" @@ -859,11 +884,6 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -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" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -930,11 +950,40 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +asyncro@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/asyncro/-/asyncro-3.0.0.tgz#3c7a732e263bc4a42499042f48d7d858e9c0134e" + integrity sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg== + atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^9.0.0: + version "9.4.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.7.tgz#f997994f9a810eae47b38fa6d8a119772051c4ff" + integrity sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA== + dependencies: + browserslist "^4.4.1" + caniuse-lite "^1.0.30000932" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.14" + postcss-value-parser "^3.3.1" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -945,12 +994,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-core@^7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-jest@^24.0.0, babel-jest@^24.1.0: +babel-jest@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== @@ -974,6 +1018,11 @@ babel-plugin-jest-hoist@^24.1.0: resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== +babel-plugin-transform-async-to-promises@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.4.tgz#f0ffd0db2b1fa1bee1b723fe651dc412d75aabb7" + integrity sha512-2lS63lG9z0pMpnd6D+dOctOgZ0QQlYZrPSMzx9IeJpSZo3MuFD09LfG12PRSIkJr7v2UkcnYKfBJRx39X4Di4w== + babel-preset-jest@^24.1.0: version "24.1.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" @@ -982,6 +1031,16 @@ babel-preset-jest@^24.1.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.1.0" +babylon@^6.15.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1007,6 +1066,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + bl@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" @@ -1015,18 +1079,10 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -boxen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-2.0.0.tgz#46ba3953b1a3d99aaf89ad8c7104a32874934a58" - integrity sha512-9DK9PQqcOpsvlKOK3f3lVK+vQsqH4JDGMX73FCWcHRxQQtop1U8urn4owrt5rnc2NgZAJ6wWjTDBc7Fhv+vz/w== - dependencies: - ansi-align "^2.0.0" - camelcase "^5.0.0" - chalk "^2.4.1" - cli-boxes "^1.0.0" - string-width "^2.1.1" - term-size "^1.2.0" - widest-line "^2.0.0" +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= brace-expansion@^1.1.7: version "1.1.11" @@ -1061,7 +1117,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -brotli-size@0.0.3: +brotli-size@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-0.0.3.tgz#1d3855b38f182591a6f69da1516131676e5f62f2" integrity sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ== @@ -1081,7 +1137,15 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.3.4: +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.1.tgz#42e828954b6b29a7a53e352277be429478a69062" integrity sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A== @@ -1097,6 +1161,18 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buble@^0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" + integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== + dependencies: + chalk "^2.4.1" + magic-string "^0.25.1" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.2.0" + vlq "^1.0.0" + buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" @@ -1120,15 +1196,10 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtin-modules@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" - integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== +builtin-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== cache-base@^1.0.1: version "1.0.1" @@ -1169,24 +1240,41 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - camelcase@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000938" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000938.tgz#dc37923823ddf88e6bb0a82a7fb913a11e5cf681" + integrity sha512-1lbcoAGPQFUYOdY7sxpsl8ZDBfn5cyn80XuYnZwk7N4Qp7Behw7uxZCH5jjH2qWTV2WM6hgjvDVpP/uV3M/l9g== + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000932: + version "1.0.30000938" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000938.tgz#b64bf1427438df40183fce910fe24e34feda7a3f" + integrity sha512-ekW8NQ3/FvokviDxhdKLZZAx7PptXNwxKgXtnR5y+PR3hckwuP3yJ1Ir+4/c97dsHNqtAyfKUGdw8P4EYzBNgw== + caniuse-lite@^1.0.30000929: version "1.0.30000936" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz#5d33b118763988bf721b9b8ad436d0400e4a116b" @@ -1215,7 +1303,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1224,7 +1312,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1: +chalk@^2.0.1, chalk@^2.3.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== @@ -1243,6 +1331,13 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== + dependencies: + chalk "^1.1.3" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1253,11 +1348,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -1292,11 +1382,32 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= + dependencies: + q "^1.1.2" + +coa@~2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + 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" @@ -1310,7 +1421,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0: +color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1322,15 +1433,61 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= + dependencies: + color-name "^1.0.0" + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +color@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" + integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + colors@^1.1.2: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== -colors@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" - integrity sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ== +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= combined-stream@1.0.6: version "1.0.6" @@ -1371,6 +1528,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-with-sourcemaps@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e" + integrity sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg== + dependencies: + source-map "^0.6.1" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1393,21 +1557,30 @@ core-js@^1.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= +core-js@^2.5.7: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@^5.0.2: - version "5.0.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" - integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A== dependencies: is-directory "^0.3.1" - js-yaml "^3.9.0" - parse-json "^4.0.0" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.1.0" + os-homedir "^1.0.1" + parse-json "^2.2.0" + require-from-string "^1.1.0" -cosmiconfig@^5.0.7: +cosmiconfig@^5.0.0, cosmiconfig@^5.0.7: version "5.0.7" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" integrity sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA== @@ -1417,6 +1590,15 @@ cosmiconfig@^5.0.7: js-yaml "^3.9.0" parse-json "^4.0.0" +cosmiconfig@^5.0.2: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + create-react-class@^15.6.2: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" @@ -1446,6 +1628,217 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-modules-loader-core@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" + integrity sha1-WQhmgpShvs0mGuCkziGwtVHyHRY= + dependencies: + icss-replace-symbols "1.1.0" + postcss "6.0.1" + postcss-modules-extract-imports "1.1.0" + postcss-modules-local-by-default "1.2.0" + postcss-modules-scope "1.1.0" + postcss-modules-values "1.3.0" + +css-select-base-adapter@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" + integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== + dependencies: + boolbase "^1.0.0" + css-what "^2.1.2" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" + integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-tree@1.0.0-alpha.28: + version "1.0.0-alpha.28" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" + integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= + +css-url-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" + integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= + +css-what@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +cssnano@^4.1.7: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== + dependencies: + css-tree "1.0.0-alpha.29" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" @@ -1463,13 +1856,6 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.2.tgz#3043d5e065454579afc7478a18de41909c8a2f01" integrity sha512-Rl7PvTae0pflc1YtxtKbiSqq20Ts6vpIYOD5WBafl4y123DyHUeLrRdQP66sQW8/6gmX8jrYJLXwNeMqYVJcow== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1534,13 +1920,6 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-assign@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" - integrity sha1-6+BrHwfwja5ZdiDj3RYi83GhxXI= - dependencies: - is-obj "^1.0.0" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -1558,7 +1937,7 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1587,6 +1966,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1612,6 +1996,19 @@ diff-sequences@^24.0.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== +dom-serializer@0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -1619,6 +2016,21 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -1632,7 +2044,7 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.103: +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.103: version "1.3.113" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" integrity sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g== @@ -1642,6 +2054,11 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -1656,6 +2073,11 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1663,6 +2085,18 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.12.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" @@ -1674,7 +2108,7 @@ es-abstract@^1.5.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-to-primitive@^1.1.1: +es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== @@ -1688,6 +2122,11 @@ es6-object-assign@^1.0.3: resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" integrity sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw= +es6-promisify@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-6.0.1.tgz#6edaa45f3bd570ffe08febce66f7116be4b1cdb6" + integrity sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw== + 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" @@ -1705,6 +2144,11 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -1720,6 +2164,11 @@ estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= + estree-walker@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" @@ -1737,19 +2186,6 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.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.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" @@ -1813,10 +2249,10 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-template@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" - integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== expect@^24.1.0: version "24.1.0" @@ -1895,6 +2331,11 @@ fast-levenshtein@~2.0.4: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastparse@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -1915,7 +2356,7 @@ fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -figures@^1.7.0: +figures@^1.0.1, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= @@ -1923,11 +2364,6 @@ figures@^1.7.0: escape-string-regexp "^1.0.5" object-assign "^4.1.0" -file-type@^3.6.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= - filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -1941,7 +2377,7 @@ fileset@^2.0.3: glob "^7.0.3" minimatch "^3.0.3" -filesize@^3.6.1: +filesize@^3.5.11: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== @@ -1972,14 +2408,6 @@ find-parent-dir@^0.3.0: resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -1987,6 +2415,19 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= + +flow-remove-types@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" + integrity sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q== + dependencies: + babylon "^6.15.0" + vlq "^0.2.1" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2025,6 +2466,24 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" + integrity sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -2064,6 +2523,13 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +generic-names@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" + integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= + dependencies: + loader-utils "^0.2.16" + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2074,16 +2540,6 @@ get-own-enumerable-property-symbols@^2.0.1: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" integrity sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= - get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -2150,12 +2606,22 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== +globalyzer@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" + integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== + +globrex@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= -graceful-fs@^4.1.15: +graceful-fs@^4.1.15, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== @@ -2165,6 +2631,13 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + gzip-size@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -2204,6 +2677,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2250,13 +2728,18 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: +has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + hoist-non-react-statics@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" @@ -2269,6 +2752,21 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -2308,6 +2806,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-replace-symbols@1.1.0, 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" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -2316,15 +2819,22 @@ ignore-walk@^3.0.1: minimatch "^3.0.4" iltorb@^2.0.5: - version "2.4.0" - resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.0.tgz#befef47a5aea0cee46767731cb63859b57e58327" - integrity sha512-Px3k32eqlAwpS0OwiQDRUrlPNeY1JKyZvH636cRRxxhkqc5ukmfXZStNHNfRzpa3tb9EK3Nq0pIX9cXUdr+q3w== + version "2.4.1" + resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.1.tgz#3ae14f0a76ba880503884a2fe630b1f748eb4c17" + integrity sha512-huyAN7dSNe2b7VAl5AyvaeZ8XTcDTSF1b8JVYDggl+SBfHsORq3qMZeesZW7zoEy21s15SiERAITWT5cwxu1Uw== dependencies: detect-libc "^1.0.3" npmlog "^4.1.2" - prebuild-install "^5.0.0" + prebuild-install "^5.2.1" which-pm-runs "^1.0.0" +import-cwd@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -2333,6 +2843,13 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2346,18 +2863,16 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2393,6 +2908,11 @@ invert-kv@^2.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -2412,18 +2932,16 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" - is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" @@ -2436,6 +2954,18 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2512,13 +3042,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -2586,6 +3109,11 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2620,11 +3148,30 @@ is-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + 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" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= + dependencies: + html-comment-regex "^1.1.0" + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -2637,11 +3184,6 @@ is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -3081,6 +3623,13 @@ jest-watcher@^24.0.0: jest-util "^24.0.0" string-length "^2.0.0" +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= + dependencies: + merge-stream "^1.0.1" + jest-worker@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d" @@ -3097,6 +3646,11 @@ jest@^24.0.0: import-local "^2.0.0" jest-cli "^24.1.0" +js-base64@^2.1.9: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + js-levenshtein@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" @@ -3107,7 +3661,7 @@ js-levenshtein@^1.1.3: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.12.0, js-yaml@^3.9.0: +js-yaml@^3.12.0, js-yaml@^3.4.3, js-yaml@^3.9.0: version "3.12.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== @@ -3115,6 +3669,14 @@ js-yaml@^3.12.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -3182,6 +3744,11 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -3189,6 +3756,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3325,17 +3899,6 @@ listr@^0.14.1: p-map "^1.1.1" rxjs "^6.1.0" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -3346,6 +3909,16 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3354,11 +3927,36 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= +lodash.sumby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.sumby/-/lodash.sumby-4.6.0.tgz#7d87737ddb216da2f7e5e7cd2dd9c403a7887346" + integrity sha1-fYdzfdshbaL35efNLdnEA6eIc0Y= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -3393,14 +3991,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4 dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -3409,12 +3999,19 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +magic-string@^0.22.4: + version "0.22.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== + dependencies: + vlq "^0.2.2" + magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - integrity sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg== + version "0.25.2" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.2.tgz#139c3a729515ec55e96e69e82a11fe890a293ad9" + integrity sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg== dependencies: - sourcemap-codec "^1.4.1" + sourcemap-codec "^1.4.4" make-dir@^1.3.0: version "1.3.0" @@ -3442,11 +4039,6 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -3454,11 +4046,31 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= + math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== +maxmin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^3.0.0" + pretty-bytes "^3.0.0" + +mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== + mem@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" @@ -3468,22 +4080,6 @@ mem@^4.0.0: mimic-fn "^1.0.0" p-is-promise "^2.0.0" -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -3496,6 +4092,44 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= +microbundle@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.9.0.tgz#bbec53047ff238c592aba0e5fd8fea3ce7654de3" + integrity sha512-wceG5fWCig3AKUpYmlzBSGrPgtbO1y5zFxpgLQxQq67crWYYKAvjH6qRFHgIbslrhWckomu9B410fdfECdeXWw== + dependencies: + "@babel/core" "^7.1.6" + "@babel/plugin-proposal-class-properties" "7.1.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/polyfill" "^7.0.0" + asyncro "^3.0.0" + autoprefixer "^9.0.0" + babel-plugin-transform-async-to-promises "^0.8.3" + brotli-size "^0.0.3" + camelcase "^5.0.0" + chalk "^2.4.0" + cssnano "^4.1.7" + es6-promisify "^6.0.1" + gzip-size "^5.0.0" + pretty-bytes "^5.1.0" + rollup "^0.67.3" + rollup-plugin-babel "^4.1.0-0" + rollup-plugin-buble "^0.19.4" + rollup-plugin-bundle-size "^1.0.1" + rollup-plugin-commonjs "^9.0.0" + rollup-plugin-es3 "^1.1.0" + rollup-plugin-flow "^1.1.1" + rollup-plugin-json "^3.1.0" + rollup-plugin-node-resolve "^3.3.0" + rollup-plugin-postcss "^1.6.1" + rollup-plugin-preserve-shebang "^0.1.6" + rollup-plugin-sizes "^0.4.2" + rollup-plugin-terser "^3.0.0" + rollup-plugin-typescript2 "^0.18.0" + sade "^1.4.0" + tiny-glob "^0.2.6" + tslib "^1.9.0" + typescript ">=2.8.3" + micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -3568,7 +4202,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -3601,7 +4235,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -3618,6 +4252,16 @@ mobx@^5.0.0: resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.9.0.tgz#a08edd7132787f771409c9c33788a5df66ff7ce7" integrity sha512-D3mY1uM3H9BP5duk5tTanrOq92yqetYKsprPJWvkKDrbs+fro59xrpWX+vtr10YoLgJIFz+a4A8lI+4YtqmCUQ== +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= + +mri@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" + integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3674,10 +4318,10 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-abi@^2.2.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.4.5.tgz#1fd1fb66641bf3c4dcf55a5490ba10c467ead80c" - integrity sha512-aa/UC6Nr3+tqhHGRsAuw/edz7/q9nnetBrKWxj6rpTtm+0X9T1qU7lIEHMS3yN9JwAbRiKUbRRFy1PLz/y3aaA== +node-abi@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.7.1.tgz#a8997ae91176a5fbaa455b194976e32683cda643" + integrity sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw== dependencies: semver "^5.4.1" @@ -3755,16 +4399,6 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -3772,6 +4406,26 @@ normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" @@ -3818,6 +4472,18 @@ npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -3882,6 +4548,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3894,25 +4570,6 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -opn-cli@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/opn-cli/-/opn-cli-3.1.0.tgz#f819ae6cae0b411bd0149b8560fe6c88adad20f8" - integrity sha1-+BmubK4LQRvQFJuFYP5siK2tIPg= - dependencies: - file-type "^3.6.0" - get-stdin "^5.0.1" - meow "^3.7.0" - opn "^4.0.0" - temp-write "^2.1.0" - -opn@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" - integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU= - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -4001,6 +4658,11 @@ p-map@^1.1.1: resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== +p-queue@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" + integrity sha512-n8/y+yDJwBjoLQe1GSJbbaYQLTI7QHNZI2+rpmCDbe++WLf9HC3gf6iqj5yfPAV71W4UF3ql5W1+UBPXoXTxng== + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -4046,13 +4708,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -4078,15 +4733,6 @@ path-parse@^1.0.5, path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -4099,28 +4745,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - pirates@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" @@ -4152,121 +4781,743 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -prebuild-install@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.0.tgz#53c0422ebf28437047d699450bd4fd765b2951ea" - integrity sha512-cpuyMS8y30Df0bnN+I8pdmpwtZbm8fj9cQADOhSH/qnS1exb80elZ707FTMohFBJax4NyWjJVSg0chRQXzHSvg== +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-calc@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" + integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + dependencies: + css-unit-converter "^1.1.1" + postcss "^7.0.5" + postcss-selector-parser "^5.0.0-rc.4" + postcss-value-parser "^3.3.1" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= dependencies: - detect-libc "^1.0.3" - expand-template "^1.0.2" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.2.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - os-homedir "^1.0.1" - pump "^2.0.1" - rc "^1.2.7" - simple-get "^2.7.0" - tar-fs "^1.13.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" + postcss "^5.0.11" + postcss-value-parser "^3.1.2" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= + dependencies: + postcss "^5.0.14" -prettier@^1.7.2: - version "1.14.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" - integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg== +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" + postcss "^5.0.4" -pretty-format@^24.0.0: - version "24.0.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" - integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== dependencies: - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" + postcss "^7.0.0" -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= + dependencies: + postcss "^5.0.14" -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= dependencies: - asap "~2.0.3" + postcss "^5.0.16" -prompts@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.2.tgz#094119b0b0a553ec652908b583205b9867630154" - integrity sha512-Pc/c53d2WZHJWZr78/BhZ5eHsdQtltbyBjHoA4T0cs/4yKJqCcoOHrq2SNKwtspVE0C+ebqAR5u0/mXwrHaADQ== +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== dependencies: - kleur "^3.0.2" - sisteransi "^1.0.0" + postcss "^7.0.0" -prop-types@^15.6.0, prop-types@^15.6.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" + postcss "^5.0.14" + uniqs "^2.0.0" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== + dependencies: + postcss "^5.0.4" -psl@^1.1.24: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" - integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo= + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw= dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" + cosmiconfig "^2.1.0" + object-assign "^4.1.0" -pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI= dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" + cosmiconfig "^2.1.1" + object-assign "^4.1.0" -pump@^3.0.0: - version "3.0.0" +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= + dependencies: + postcss "^5.0.4" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb" + integrity sha1-thTJcgvmgW6u41+zpfqh26agXds= + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-modules@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" + integrity sha512-btTrbK+Xc3NBuYF8TPBjCMRSp5h6NoQ1iVZ6WiDQENIze6KIYCSf0+UFQuV3yJ7gRHA+4AAtF8i2jRvUpbBMMg== + dependencies: + css-modules-loader-core "^1.1.0" + generic-names "^1.0.3" + lodash.camelcase "^4.3.0" + postcss "^7.0.1" + string-hash "^1.1.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= + dependencies: + postcss "^5.0.5" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= + dependencies: + postcss "^5.0.4" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2" + integrity sha1-AA29H47vIXqjaLmiEsX8QLKo8/I= + dependencies: + chalk "^1.1.3" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1, postcss@^6.0.21: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.5: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + integrity sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prebuild-install@^5.2.1: + version "5.2.4" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.4.tgz#8cc41a217ef778a31d3a876fe6668d05406db750" + integrity sha512-CG3JnpTZXdmr92GW4zbcba4jkDha6uHraJ7hW4Fn8j0mExxwOKK20hqho8ZuBDCKYCHYIkFM1P2jhtG+KpP4fg== + dependencies: + detect-libc "^1.0.3" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.0" + mkdirp "^0.5.1" + napi-build-utils "^1.0.1" + node-abi "^2.7.0" + noop-logger "^0.1.1" + npmlog "^4.0.1" + os-homedir "^1.0.1" + pump "^2.0.1" + rc "^1.2.7" + simple-get "^2.7.0" + tar-fs "^1.13.0" + tunnel-agent "^0.6.0" + which-pm-runs "^1.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + +prettier@^1.7.2: + version "1.14.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.3.tgz#90238dd4c0684b7edce5f83b0fb7328e48bd0895" + integrity sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg== + +pretty-bytes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= + dependencies: + number-is-nan "^1.0.0" + +pretty-bytes@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.1.0.tgz#6237ecfbdc6525beaef4de722cc60a58ae0e6c6d" + integrity sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA== + +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-format@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" + integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== + dependencies: + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +promise.series@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" + integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.2.tgz#094119b0b0a553ec652908b583205b9867630154" + integrity sha512-Pc/c53d2WZHJWZr78/BhZ5eHsdQtltbyBjHoA4T0cs/4yKJqCcoOHrq2SNKwtspVE0C+ebqAR5u0/mXwrHaADQ== + dependencies: + kleur "^3.0.2" + sisteransi "^1.0.0" + +prop-types@^15.6.0, prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: @@ -4283,11 +5534,24 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -4342,14 +5606,6 @@ react@^16.8.2: prop-types "^15.6.2" scheduler "^0.13.2" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -4358,15 +5614,6 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -4419,13 +5666,21 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= + dependencies: + balanced-match "^0.4.2" regenerate-unicode-properties@^7.0.0: version "7.0.0" @@ -4434,12 +5689,12 @@ regenerate-unicode-properties@^7.0.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.12.1: +regenerator-runtime@^0.12.0: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== @@ -4475,6 +5730,15 @@ regexp-tree@^0.1.0: colors "^1.1.2" yargs "^12.0.5" +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + regexpu-core@^4.1.3, regexpu-core@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" @@ -4487,11 +5751,23 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.0.2" +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + regjsgen@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -4514,13 +5790,6 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - request-promise-core@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" @@ -4568,11 +5837,21 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -4595,20 +5874,20 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== - dependencies: - path-parse "^1.0.6" - -resolve@^1.8.1: +resolve@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== dependencies: path-parse "^1.0.5" +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -4622,6 +5901,16 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" @@ -4636,14 +5925,7 @@ rimraf@^2.6.2: dependencies: glob "^7.1.3" -rollup-plugin-alias@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz#80cce3a967befda5b09c86abc14a043a78035b46" - integrity sha512-pQTYBRNfLedoVOO7AYHNegIavEIp4jKTga5jUi1r//KYgHKGWgG4qJXYhbcWKt2k1FwGlR5wCYoY+IFkme0t4A== - dependencies: - slash "^2.0.0" - -rollup-plugin-babel@^4.3.2: +rollup-plugin-babel@^4.1.0-0: version "4.3.2" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" integrity sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg== @@ -4651,7 +5933,23 @@ rollup-plugin-babel@^4.3.2: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.3.0" -rollup-plugin-commonjs@^9.2.0: +rollup-plugin-buble@^0.19.4: + version "0.19.6" + resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.6.tgz#55ee0995d8870d536f01f4277c3eef4276e8747e" + integrity sha512-El5Fut4/wEO17ZN/n9BZvqd7DXXB2WbJr/DKvr89LXChC/cHllE0XwiUDeAalrTkgr0WrnyLDTCQvEv+cGywWQ== + dependencies: + buble "^0.19.6" + rollup-pluginutils "^2.3.3" + +rollup-plugin-bundle-size@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-bundle-size/-/rollup-plugin-bundle-size-1.0.3.tgz#d245cd988486b4040279f9fd33f357f61673e90f" + integrity sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ== + dependencies: + chalk "^1.1.3" + maxmin "^2.1.0" + +rollup-plugin-commonjs@^9.0.0: version "9.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz#4604e25069e0c78a09e08faa95dc32dec27f7c89" integrity sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA== @@ -4661,48 +5959,96 @@ rollup-plugin-commonjs@^9.2.0: resolve "^1.8.1" rollup-pluginutils "^2.3.3" -rollup-plugin-filesize@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-6.0.1.tgz#71937b48a411374c76c4a7e6bbdb087780d8bd64" - integrity sha512-wtxHShJofSxJRuYGGxgwIJyxxW+Mgu/vGGcsOUJVN+US6jE+gQYphSS3H2PS2HCVfxDtERtL0gjptk1gYru9rA== - dependencies: - boxen "^2.0.0" - brotli-size "0.0.3" - colors "^1.3.2" - deep-assign "^2.0.0" - filesize "^3.6.1" - gzip-size "^5.0.0" - terser "^3.10.0" +rollup-plugin-es3@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-es3/-/rollup-plugin-es3-1.1.0.tgz#f866f91b4db839e5b475d8e4a7b9d4c77ecade14" + integrity sha512-jTMqQgMZ/tkjRW4scf4ln5c0OiTSi+Lx/IEyFd41ldgGoLvvg9AQxmVOl93+KaoyB7XRYToYjiHDvO40NPF/fA== + dependencies: + magic-string "^0.22.4" -rollup-plugin-node-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" - integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw== +rollup-plugin-flow@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz#6ce568f1dd559666b77ab76b4bae251407528db6" + integrity sha1-bOVo8d1Vlma3erdrS64lFAdSjbY= dependencies: - builtin-modules "^3.0.0" + flow-remove-types "^1.1.0" + rollup-pluginutils "^1.5.1" + +rollup-plugin-json@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz#7c1daf60c46bc21021ea016bd00863561a03321b" + integrity sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw== + dependencies: + rollup-pluginutils "^2.3.1" + +rollup-plugin-node-resolve@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== + dependencies: + builtin-modules "^2.0.0" is-module "^1.0.0" - resolve "^1.8.1" + resolve "^1.1.6" -rollup-plugin-replace@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz#f9c07a4a89a2f8be912ee54b3f0f68d91e9ed0ae" - integrity sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ== +rollup-plugin-postcss@^1.6.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-postcss/-/rollup-plugin-postcss-1.6.3.tgz#18256ba66f29ecd9d42a68f4ef136b92b939ddb8" + integrity sha512-se1qftVETua9ZGViud4A4gbgEQenjYnLPvjh3kTqbBZU+f0mQ9YvJptIuzPhEk5kZAHZhkwIkk2jk+byrn1XPA== dependencies: - magic-string "^0.25.1" - minimatch "^3.0.2" + chalk "^2.0.0" + concat-with-sourcemaps "^1.0.5" + cssnano "^3.10.0" + fs-extra "^5.0.0" + import-cwd "^2.1.0" + p-queue "^2.4.2" + pify "^3.0.0" + postcss "^6.0.21" + postcss-load-config "^1.2.0" + postcss-modules "^1.1.0" + promise.series "^0.2.0" + reserved-words "^0.1.2" + resolve "^1.5.0" rollup-pluginutils "^2.0.1" + style-inject "^0.3.0" -rollup-plugin-uglify@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz#681042cfdf7ea4e514971946344e1a95bc2772fe" - integrity sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== +rollup-plugin-preserve-shebang@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/rollup-plugin-preserve-shebang/-/rollup-plugin-preserve-shebang-0.1.6.tgz#8cfc4c555d4ca87b9fbb7712869158db0e080d4a" + integrity sha512-b+psdlXZOjmlnKmL6/YAkR8PR15VPcUNXdT35urBRJ8jE6UxHyb4HXeeN3qRZJbMJJaX1eRP72XwH6IvGFh5Jw== + dependencies: + magic-string "^0.22.4" + +rollup-plugin-sizes@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-sizes/-/rollup-plugin-sizes-0.4.2.tgz#1d97ecda2667a43afbb19d801e2476f80f67d12f" + integrity sha512-6VsnWb4aBPcW++3IBMNPo4NLSheoaXh+itXk1OcaolLhYemoQFb7A9hVNocwa0j2BctdmPNFcP7UJ3g///VVaA== + dependencies: + filesize "^3.5.11" + lodash.foreach "^4.5.0" + lodash.sumby "^4.6.0" + module-details-from-path "^1.0.3" + +rollup-plugin-terser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz#045bd7cf625ee1affcfe6971dab6fffe6fb48c65" + integrity sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA== dependencies: "@babel/code-frame" "^7.0.0" - jest-worker "^24.0.0" - serialize-javascript "^1.6.1" - uglify-js "^3.4.9" + jest-worker "^23.2.0" + serialize-javascript "^1.5.0" + terser "^3.8.2" + +rollup-plugin-typescript2@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.18.1.tgz#921865828080a254c088c6bc181ca654e5ef73c6" + integrity sha512-aR2m5NCCAUV/KpcKgCWX6Giy8rTko9z92b5t0NX9eZyjOftCvcdDFa1C9Ze/9yp590hnRymr5hG0O9SAXi1oUg== + dependencies: + fs-extra "7.0.0" + resolve "1.8.1" + rollup-pluginutils "2.3.3" + tslib "1.9.3" -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: +rollup-pluginutils@2.3.3, rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA== @@ -4710,14 +6056,21 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.0, rollup-pluginutils@^2.3.3: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.1.2.tgz#8d094b85683b810d0c05a16bd7618cf70d48eba7" - integrity sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg== +rollup-pluginutils@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup@^0.67.3: + version "0.67.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.67.4.tgz#8ed6b0993337f84ec8a0387f824fa6c197e833ec" + integrity sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w== dependencies: "@types/estree" "0.0.39" "@types/node" "*" - acorn "^6.0.5" rsvp@^3.3.3: version "3.6.2" @@ -4736,6 +6089,13 @@ rxjs@^6.1.0: dependencies: tslib "^1.9.0" +sade@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.4.2.tgz#b1946ef9ec62450b74e17d9fec30156c94f193a6" + integrity sha512-MTrQm+Nhl4m1mbssYDgAculC/HbShjj08QtHnA2GTpzivfU5aUp8EoHlECmrIHEaa8hZRZSp2Gygv8VMlpXEBw== + dependencies: + mri "^1.1.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -4770,7 +6130,7 @@ sane@^3.0.0: optionalDependencies: fsevents "^1.2.3" -sax@^1.2.4: +sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -4806,7 +6166,7 @@ semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== -serialize-javascript@^1.6.1: +serialize-javascript@^1.5.0: version "1.6.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== @@ -4862,7 +6222,7 @@ shelljs@^0.8.1: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.2: +shelljs@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== @@ -4904,6 +6264,13 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" @@ -4949,6 +6316,13 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -4960,7 +6334,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.6: +source-map-support@^0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== @@ -4968,12 +6342,20 @@ source-map-support@^0.5.6, source-map-support@~0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.9: + version "0.5.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" + integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -4983,10 +6365,10 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sourcemap-codec@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz#0ba615b73ec35112f63c2f2d9e7c3f87282b0e33" - integrity sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA== +sourcemap-codec@^1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" + integrity sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg== spdx-correct@^3.0.0: version "3.1.0" @@ -5042,6 +6424,11 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stable@~0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stack-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" @@ -5065,11 +6452,21 @@ stealthy-require@^1.1.0: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -5132,13 +6529,6 @@ strip-ansi@^5.0.0: dependencies: ansi-regex "^4.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -5149,24 +6539,38 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - 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" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +style-inject@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" + integrity sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw== + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -5180,6 +6584,39 @@ supports-color@^6.0.0, supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +svgo@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" + integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== + dependencies: + coa "~2.0.1" + colors "~1.1.2" + css-select "^2.0.0" + css-select-base-adapter "~0.1.0" + css-tree "1.0.0-alpha.28" + css-url-regex "^1.1.0" + csso "^3.5.0" + js-yaml "^3.12.0" + mkdirp "~0.5.1" + object.values "^1.0.4" + sax "~1.2.4" + stable "~0.1.6" + unquote "~1.1.1" + util.promisify "~1.0.0" + symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -5226,33 +6663,14 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -temp-write@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-2.1.0.tgz#59890918e0ef09d548aaa342f4bd3409d8404e96" - integrity sha1-WYkJGODvCdVIqqNC9L00CdhATpY= - dependencies: - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - os-tmpdir "^1.0.0" - pify "^2.2.0" - pinkie-promise "^2.0.0" - uuid "^2.0.1" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -terser@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.10.0.tgz#6ae15dafecbd02c9788d5f36d27fca32196b533a" - integrity sha512-hNh2WR3YxtKoY7BNSb3+CJ9Xv9bbUuOU9uriIf2F1tiAYNA4rNy2wWuSDV8iKcag27q65KPJ/sPpMWEh6qttgw== +terser@^3.8.2: + version "3.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493" + integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow== dependencies: commander "~2.17.1" source-map "~0.6.1" - source-map-support "~0.5.6" + source-map-support "~0.5.9" test-exclude@^5.0.0: version "5.1.0" @@ -5269,6 +6687,19 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-glob@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" + integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw== + dependencies: + globalyzer "^0.1.0" + globrex "^0.1.1" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -5324,17 +6755,12 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -tslib@^1.9.0: +tslib@1.9.3, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== @@ -5358,6 +6784,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +typescript@>=2.8.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3.tgz#f1657fc7daa27e1a8930758ace9ae8da31403221" + integrity sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A== + typescript@^2.6.0: version "2.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" @@ -5368,7 +6799,7 @@ ua-parser-js@^0.7.18: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" integrity sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA== -uglify-js@^3.1.4, uglify-js@^3.4.9: +uglify-js@^3.1.4: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== @@ -5409,6 +6840,26 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -5432,7 +6883,7 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: +util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== @@ -5440,11 +6891,6 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= - uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -5458,6 +6904,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vendors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5467,6 +6918,16 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vlq@^0.2.1, vlq@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== + +vlq@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.0.tgz#8101be90843422954c2b13eb27f2f3122bdcc806" + integrity sha512-o3WmXySo+oI5thgqr7Qy8uBkT/v9Zr+sRyrh1lr8aWPUkgDWdWt4Nae2WKBrLsocgE8BuWWD0jLc+VW8LeU+2g== + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -5529,6 +6990,11 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -5553,13 +7019,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" - integrity sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM= - dependencies: - string-width "^2.1.1" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" From 58d785d973741046aad65ec911cf667e12debbd2 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 15:19:59 +0100 Subject: [PATCH 29/46] Some cleanup --- CHANGELOG.md | 2 ++ src/Provider.js | 3 +-- src/index.js | 20 +++++++++++--------- src/inject.js | 2 +- src/propTypes.js | 25 ++++++++++++++++++------- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a443dbbc..8447b7ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ * The third argument of custom `storesToProps` functions passed to `inject` is no longer available. * `` no longer supports the deprecated `inject` property. * Defining `shouldComponentUpdate` on `observer` compon +* `propTypes` is no longer exposed, use `PropTypes` instead + **Improvements** * Using `PureComponent` is now _recommended_. diff --git a/src/Provider.js b/src/Provider.js index a21fc7ad..805b20ba 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -5,7 +5,7 @@ const specialReactKeys = { children: true, key: true, ref: true } export const MobXProviderContext = createContext({}) -class Provider extends Component { +export class Provider extends Component { static contextType = MobXProviderContext constructor(props, context) { @@ -44,4 +44,3 @@ function grabStores(from) { function validStoreName(key) { return !specialReactKeys[key] && key !== "suppressChangedStoreWarning" } -export default Provider diff --git a/src/index.js b/src/index.js index bcbe74fa..e5c845e4 100644 --- a/src/index.js +++ b/src/index.js @@ -9,16 +9,18 @@ if (!observable) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) -// TODO: re-export more mobx-react-lite stuff? -// TODO; do we still need separate RN build? -export { Observer } from "mobx-react-lite" +export { + useObservable, + useComputed, + useDisposable, + IObserverOptions, + useObserver, + Observer +} from "mobx-react-lite" export { observer, useStaticRendering } from "./observer" -export { default as Provider } from "./Provider" -export { default as inject } from "./inject" +export { Provider } from "./Provider" +export { inject } from "./inject" export { disposeOnUnmount } from "./disposeOnUnmount" - -import * as propTypes from "./propTypes" -export { propTypes } -export { propTypes as PropTypes } +export { PropTypes } from "./propTypes" diff --git a/src/inject.js b/src/inject.js index cf1440b7..909e6d36 100644 --- a/src/inject.js +++ b/src/inject.js @@ -70,7 +70,7 @@ function grabStoresByName(storeNames) { * or a function that manually maps the available stores from the context to props: * storesToProps(mobxStores, props, context) => newProps */ -export default function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames) { +export function inject(/* fn(stores, nextProps) or ...storeNames */ ...storeNames) { let grabStoresFn if (typeof arguments[0] === "function") { grabStoresFn = arguments[0] diff --git a/src/propTypes.js b/src/propTypes.js index 62dbe6e4..efaafecc 100644 --- a/src/propTypes.js +++ b/src/propTypes.js @@ -1,5 +1,6 @@ import { isObservableArray, isObservableObject, isObservableMap, untracked } from "mobx" +// TODO: can we just import this stuff? // Copied from React.PropTypes function createChainableTypeChecker(validate) { function checkType( @@ -189,10 +190,20 @@ function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) { }) } -export const observableArray = createObservableTypeCheckerCreator(false, "Array") -export const observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false) -export const observableMap = createObservableTypeCheckerCreator(false, "Map") -export const observableObject = createObservableTypeCheckerCreator(false, "Object") -export const arrayOrObservableArray = createObservableTypeCheckerCreator(true, "Array") -export const arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true) -export const objectOrObservableObject = createObservableTypeCheckerCreator(true, "Object") +const observableArray = createObservableTypeCheckerCreator(false, "Array") +const observableArrayOf = createObservableArrayOfTypeChecker.bind(null, false) +const observableMap = createObservableTypeCheckerCreator(false, "Map") +const observableObject = createObservableTypeCheckerCreator(false, "Object") +const arrayOrObservableArray = createObservableTypeCheckerCreator(true, "Array") +const arrayOrObservableArrayOf = createObservableArrayOfTypeChecker.bind(null, true) +const objectOrObservableObject = createObservableTypeCheckerCreator(true, "Object") + +export const PropTypes = { + observableArray, + observableArrayOf, + observableMap, + observableObject, + arrayOrObservableArray, + arrayOrObservableArrayOf, + objectOrObservableObject +} From d282c22e3f41de1aed7e9adebc30bd82166915aa Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 15:56:18 +0100 Subject: [PATCH 30/46] Some failing tests for disposeOnUnmount --- test/disposeOnUnmount.test.js | 166 ++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) diff --git a/test/disposeOnUnmount.test.js b/test/disposeOnUnmount.test.js index 0a3b7a33..9cfff106 100644 --- a/test/disposeOnUnmount.test.js +++ b/test/disposeOnUnmount.test.js @@ -502,3 +502,169 @@ it("componentDidMount should be different between components", async () => { await doTest(true) await doTest(false) }) + +describe("inheritance with prototype methods", async () => { + async function doTest(patchBase, patchOther, callSuper) { + let Bcall = 0 + let Ccall = 0 + let c = 0 + let c2 = 0 + + class B extends React.Component { + componentWillUnmount() { + Bcall++ + } + } + + class C extends B { + componentWillUnmount() { + if (callSuper) { + super.componentWillUnmount() + } + Ccall++ + } + render() { + return null + } + } + + if (patchBase) { + let target = B.prototype + target.fn = () => { + c++ + } + disposeOnUnmount(target, "fn") + } + + if (patchOther) { + let target2 = C.prototype + target2.fn2 = () => { + c2++ + } + disposeOnUnmount(target2, "fn2") + } + + await asyncReactDOMRender(, testRoot) + await asyncReactDOMRender(null, testRoot) + + expect(Ccall).toBe(1) + expect(c).toBe(patchBase ? 1 : 0) + expect(Bcall).toBe(callSuper ? 1 : 0) + expect(c2).toBe(patchOther ? 1 : 0) + } + + for (const base of [false, true]) { + for (const other of [false, true]) { + for (const callSuper of [false, true]) { + test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { + if (base && !other && !callSuper) { + // this one is expected to fail, since we are patching only the base and the other one totally ignores the base method + try { + await doTest(base, other, callSuper) + fail("should have failed") + } catch (e) {} + } else { + await doTest(base, other, callSuper) + } + }) + } + } + } +}) + +describe("inheritance with arrow functions", async () => { + async function doTest(patchBase, patchOther, callSuper) { + let Bcall = 0 + let Ccall = 0 + let c = 0 + let c2 = 0 + + class B extends React.Component { + constructor() { + super() + if (patchBase) { + this.fn = function() { + c++ + } + disposeOnUnmount(this, this.fn) + } + } + componentWillUnmount() { + Bcall++ + } + } + + class C extends B { + constructor() { + super() + if (patchOther) { + this.fn2 = function() { + c2++ + } + disposeOnUnmount(this, this.fn2) + } + } + componentWillUnmount = () => { + if (callSuper) { + super.componentWillUnmount() + } + Ccall++ + } + render() { + return null + } + } + + await asyncReactDOMRender(, testRoot) + await asyncReactDOMRender(null, testRoot) + + expect(c).toBe(patchBase ? 1 : 0) + expect(c2).toBe(patchOther ? 1 : 0) + expect(Ccall).toBe(1) + expect(Bcall).toBe(callSuper ? 1 : 0) + } + + for (const base of [false, true]) { + for (const other of [false, true]) { + for (const callSuper of [false, true]) { + test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { + await doTest(base, other, callSuper) + }) + } + } + } +}) + +test("base cWU should not be called if overriden", async () => { + let baseCalled = 0 + let dCalled = 0 + let oCalled = 0 + + class C extends React.Component { + componentWillUnmount() { + baseCalled++ + } + + constructor() { + super() + this.componentWillUnmount = () => { + oCalled++ + } + } + + render() { + return null + } + + @disposeOnUnmount + fn() { + dCalled++ + } + } + + await asyncReactDOMRender(, testRoot) + await asyncReactDOMRender(null, testRoot) + expect(dCalled).toBe(1) + expect(oCalled).toBe(1) + expect(baseCalled).toBe(0) +}) From 185150b62967ee3ba6d63d94f10b899eb0680a8f Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 16:06:04 +0100 Subject: [PATCH 31/46] Fixed test in stateless --- test/stateless.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/stateless.test.js b/test/stateless.test.js index f55f950f..244b2340 100644 --- a/test/stateless.test.js +++ b/test/stateless.test.js @@ -4,7 +4,7 @@ import createClass from "create-react-class" import ReactDOM from "react-dom" import TestUtils from "react-dom/test-utils" import * as mobx from "mobx" -import { observer, propTypes } from "../src" +import { observer, PropTypes as MRPropTypes } from "../src" import { createTestRoot, asyncReactDOMRender } from "./index" import renderer, { act } from "react-test-renderer" import { observable } from "mobx" @@ -67,8 +67,8 @@ test("component with observable propTypes", () => { const Component = createClass({ render: () => null, propTypes: { - a1: propTypes.observableArray, - a2: propTypes.arrayOrObservableArray + a1: MRPropTypes.observableArray, + a2: MRPropTypes.arrayOrObservableArray } }) const originalConsoleError = console.error From 49b0bd5bedfe54781fd42ed7b46be4836cdec1fd Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 16:18:03 +0100 Subject: [PATCH 32/46] Killed avanced patching; directly extend React.(Pure)Component or dispose manually The amount of messing with prototypes and hackery, didn't justify the maintenance of `patch` anymore, since it is no longer used for `observer`. Especially since there are still subtle edges that didn't work. So the new implementation made the usage very strict, since there is a clean escape hatch: do it manually as done before this utility existed --- CHANGELOG.md | 2 + src/disposeOnUnmount.js | 37 +++- src/utils/utils.js | 91 --------- test/disposeOnUnmount.test.js | 334 ++++--------------------------- test/patch.test.js | 363 ---------------------------------- 5 files changed, 70 insertions(+), 757 deletions(-) delete mode 100644 test/patch.test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 8447b7ec..95fe29ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ * `` no longer supports the deprecated `inject` property. * Defining `shouldComponentUpdate` on `observer` compon * `propTypes` is no longer exposed, use `PropTypes` instead +* `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. + **Improvements** diff --git a/src/disposeOnUnmount.js b/src/disposeOnUnmount.js index c74fc543..ef4c57be 100644 --- a/src/disposeOnUnmount.js +++ b/src/disposeOnUnmount.js @@ -1,9 +1,11 @@ import * as React from "react" -import { patch, newSymbol } from "./utils/utils" +import { newSymbol } from "./utils/utils" const storeKey = newSymbol("disposeOnUnmount") +const baseUnmountKey = newSymbol("originalOnUnmount") function runDisposersOnWillUnmount() { + if (this[baseUnmountKey]) this[baseUnmountKey]() if (!this[storeKey]) { // when disposeOnUnmount is only set to some instances of a component it will still patch the prototype return @@ -28,8 +30,19 @@ export function disposeOnUnmount(target, propertyKeyOrFunction) { return propertyKeyOrFunction.map(fn => disposeOnUnmount(target, fn)) } - if (!target instanceof React.Component) { - throw new Error("[mobx-react] disposeOnUnmount only works on class based React components.") + const c = Object.getPrototypeOf(target).constructor || Object.getPrototypeOf(target.constructor) + const c2 = Object.getPrototypeOf(target.constructor) + if ( + !( + c === React.Component || + c === React.PureComponent || + c2 === React.Component || + c2 === React.PureComponent + ) + ) { + throw new Error( + "[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent." + ) } if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function") { @@ -41,12 +54,26 @@ export function disposeOnUnmount(target, propertyKeyOrFunction) { // add property key / function we want run (disposed) to the store const componentWasAlreadyModified = !!target[storeKey] const store = target[storeKey] || (target[storeKey] = []) - store.push(propertyKeyOrFunction) // tweak the component class componentWillUnmount if not done already if (!componentWasAlreadyModified) { - patch(target, "componentWillUnmount", runDisposersOnWillUnmount) + // make sure original definition is invoked + if (target.componentWillUnmount) target[baseUnmountKey] = target.componentWillUnmount + + Object.defineProperty(target, "componentWillUnmount", { + get() { + return runDisposersOnWillUnmount + }, + set(fn) { + // this will happen if componentWillUnmount is being assigned after patching the prototype + this[storeKey].push(fn) + // assigning a new local value to componentWillUnmount would hide the super implementation... + this[baseUnmountKey] = undefined + }, + configurable: false, + enumerable: false + }) } // return the disposer as is if invoked as a non decorator diff --git a/src/utils/utils.js b/src/utils/utils.js index 33231a13..641ce6d9 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -22,97 +22,6 @@ export function newSymbol(name) { return createdSymbols[name] } -const mobxMixins = newSymbol("patchMixins") -const mobxPatchedDefinition = newSymbol("patchedDefinition") - -function getMixins(target, methodName) { - const mixins = (target[mobxMixins] = target[mobxMixins] || {}) - const methodMixins = (mixins[methodName] = mixins[methodName] || {}) - methodMixins.locks = methodMixins.locks || 0 - methodMixins.methods = methodMixins.methods || [] - return methodMixins -} - -function wrapper(realMethod, mixins, ...args) { - // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls - mixins.locks++ - - try { - let retVal - if (realMethod !== undefined && realMethod !== null) { - retVal = realMethod.apply(this, args) - } - - return retVal - } finally { - mixins.locks-- - if (mixins.locks === 0) { - mixins.methods.forEach(mx => { - mx.apply(this, args) - }) - } - } -} - -function wrapFunction(realMethod, mixins) { - const fn = function(...args) { - wrapper.call(this, realMethod, mixins, ...args) - } - return fn -} - -export function patch(target, methodName, ...mixinMethods) { - const mixins = getMixins(target, methodName) - - for (const mixinMethod of mixinMethods) { - if (mixins.methods.indexOf(mixinMethod) < 0) { - mixins.methods.push(mixinMethod) - } - } - - const oldDefinition = Object.getOwnPropertyDescriptor(target, methodName) - if (oldDefinition && oldDefinition[mobxPatchedDefinition]) { - // already patched definition, do not repatch - return - } - - const originalMethod = target[methodName] - const newDefinition = createDefinition( - target, - methodName, - oldDefinition ? oldDefinition.enumerable : undefined, - mixins, - originalMethod - ) - - Object.defineProperty(target, methodName, newDefinition) -} - -function createDefinition(target, methodName, enumerable, mixins, originalMethod) { - let wrappedFunc = wrapFunction(originalMethod, mixins) - - return { - [mobxPatchedDefinition]: true, - get: function() { - return wrappedFunc - }, - set: function(value) { - if (this === target) { - wrappedFunc = wrapFunction(value, mixins) - } else { - // when it is an instance of the prototype/a child prototype patch that particular case again separately - // since we need to store separate values depending on wether it is the actual instance, the prototype, etc - // e.g. the method for super might not be the same as the method for the prototype which might be not the same - // as the method for the instance - const newDefinition = createDefinition(this, methodName, enumerable, mixins, value) - Object.defineProperty(this, methodName, newDefinition) - } - }, - configurable: true, - enumerable: enumerable - } -} - export function shallowEqual(objA, objB) { //From: /~https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js if (is(objA, objB)) return true diff --git a/test/disposeOnUnmount.test.js b/test/disposeOnUnmount.test.js index 9cfff106..d4d9d027 100644 --- a/test/disposeOnUnmount.test.js +++ b/test/disposeOnUnmount.test.js @@ -263,172 +263,6 @@ describe("with observer", () => { }) }) -test("custom patching should work", async () => { - class BaseComponent extends React.Component { - constructor(props, context) { - super(props, context) - - _makeAllSafe(this, BaseComponent.prototype, [ - "componentWillMount", - "componentDidMount", - "componentWillUpdate", - "componentWillReceiveProps", - "render", - "componentDidUpdate", - "componentWillUnmount" - ]) - } - - componentDidMount() { - this.didMountCalled = true - } - - componentWillUnmount() { - this.willUnmountCalled = true - } - } - - function _makeAllSafe(obj, prototype, methodNames) { - for (let i = 0, len = methodNames.length; i < len; i++) { - _makeSafe(obj, prototype, methodNames[i]) - } - } - - function _makeSafe(obj, prototype, methodName) { - let classMethod = obj[methodName] - let prototypeMethod = prototype[methodName] - - if (classMethod || prototypeMethod) { - obj[methodName] = function() { - this.patchRunFor = this.patchRunFor || [] - this.patchRunFor.push(methodName) - - let retVal - - if (prototypeMethod) { - retVal = prototypeMethod.apply(this, arguments) - } - if (classMethod !== prototypeMethod) { - retVal = classMethod.apply(this, arguments) - } - - return retVal - } - } - } - - @observer - class C extends BaseComponent { - @disposeOnUnmount - methodA = jest.fn() - @disposeOnUnmount - methodB = jest.fn() - @disposeOnUnmount - methodC = null - @disposeOnUnmount - methodD = undefined - - render() { - return null - } - } - - await testComponent( - C, - ref => { - expect(ref.patchRunFor).toEqual(["render", "componentDidMount"]) - expect(ref.didMountCalled).toBeTruthy() - }, - ref => { - expect(ref.patchRunFor).toEqual(["render", "componentDidMount", "componentWillUnmount"]) - expect(ref.willUnmountCalled).toBeTruthy() - } - ) -}) - -describe("super calls should work", async () => { - async function doTest(baseObserver, cObserver) { - const events = [] - - const sharedMethod = jest.fn() - - class BaseComponent extends React.Component { - @disposeOnUnmount - method0 = sharedMethod - - @disposeOnUnmount - methodA = jest.fn() - - componentDidMount() { - events.push("baseDidMount") - } - - componentWillUnmount() { - events.push("baseWillUnmount") - } - } - - class C extends BaseComponent { - @disposeOnUnmount - method0 = sharedMethod - - @disposeOnUnmount - methodB = jest.fn() - - componentDidMount() { - super.componentDidMount() - events.push("CDidMount") - } - - componentWillUnmount() { - super.componentWillUnmount() - events.push("CWillUnmount") - } - - render() { - return null - } - } - - if (baseObserver) { - BaseComponent = observer(BaseComponent) - } - if (cObserver) { - C = observer(C) - } - - await testComponent( - C, - ref => { - expect(events).toEqual(["baseDidMount", "CDidMount"]) - expect(sharedMethod).toHaveBeenCalledTimes(0) - }, - ref => { - expect(events).toEqual([ - "baseDidMount", - "CDidMount", - "baseWillUnmount", - "CWillUnmount" - ]) - expect(sharedMethod).toHaveBeenCalledTimes(2) - } - ) - } - - it("none is observer", async () => { - await doTest(false, false) - }) - it("base is observer", async () => { - await doTest(true, false) - }) - it("C is observer", async () => { - await doTest(false, true) - }) - it("both observers", async () => { - await doTest(true, true) - }) -}) - it("componentDidMount should be different between components", async () => { async function doTest(withObserver) { const events = [] @@ -503,138 +337,6 @@ it("componentDidMount should be different between components", async () => { await doTest(false) }) -describe("inheritance with prototype methods", async () => { - async function doTest(patchBase, patchOther, callSuper) { - let Bcall = 0 - let Ccall = 0 - let c = 0 - let c2 = 0 - - class B extends React.Component { - componentWillUnmount() { - Bcall++ - } - } - - class C extends B { - componentWillUnmount() { - if (callSuper) { - super.componentWillUnmount() - } - Ccall++ - } - render() { - return null - } - } - - if (patchBase) { - let target = B.prototype - target.fn = () => { - c++ - } - disposeOnUnmount(target, "fn") - } - - if (patchOther) { - let target2 = C.prototype - target2.fn2 = () => { - c2++ - } - disposeOnUnmount(target2, "fn2") - } - - await asyncReactDOMRender(, testRoot) - await asyncReactDOMRender(null, testRoot) - - expect(Ccall).toBe(1) - expect(c).toBe(patchBase ? 1 : 0) - expect(Bcall).toBe(callSuper ? 1 : 0) - expect(c2).toBe(patchOther ? 1 : 0) - } - - for (const base of [false, true]) { - for (const other of [false, true]) { - for (const callSuper of [false, true]) { - test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { - if (base && !other && !callSuper) { - // this one is expected to fail, since we are patching only the base and the other one totally ignores the base method - try { - await doTest(base, other, callSuper) - fail("should have failed") - } catch (e) {} - } else { - await doTest(base, other, callSuper) - } - }) - } - } - } -}) - -describe("inheritance with arrow functions", async () => { - async function doTest(patchBase, patchOther, callSuper) { - let Bcall = 0 - let Ccall = 0 - let c = 0 - let c2 = 0 - - class B extends React.Component { - constructor() { - super() - if (patchBase) { - this.fn = function() { - c++ - } - disposeOnUnmount(this, this.fn) - } - } - componentWillUnmount() { - Bcall++ - } - } - - class C extends B { - constructor() { - super() - if (patchOther) { - this.fn2 = function() { - c2++ - } - disposeOnUnmount(this, this.fn2) - } - } - componentWillUnmount = () => { - if (callSuper) { - super.componentWillUnmount() - } - Ccall++ - } - render() { - return null - } - } - - await asyncReactDOMRender(, testRoot) - await asyncReactDOMRender(null, testRoot) - - expect(c).toBe(patchBase ? 1 : 0) - expect(c2).toBe(patchOther ? 1 : 0) - expect(Ccall).toBe(1) - expect(Bcall).toBe(callSuper ? 1 : 0) - } - - for (const base of [false, true]) { - for (const other of [false, true]) { - for (const callSuper of [false, true]) { - test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { - await doTest(base, other, callSuper) - }) - } - } - } -}) - test("base cWU should not be called if overriden", async () => { let baseCalled = 0 let dCalled = 0 @@ -668,3 +370,39 @@ test("base cWU should not be called if overriden", async () => { expect(oCalled).toBe(1) expect(baseCalled).toBe(0) }) + +test("should error on inheritance", async () => { + class C extends React.Component { + render() { + return null + } + } + + expect(() => { + class B extends C { + @disposeOnUnmount + fn() { + dCalled++ + } + } + }).toThrow("disposeOnUnmount only supports direct subclasses") +}) + +test("should error on inheritance - 2", async () => { + class C extends React.Component { + render() { + return null + } + } + + class B extends C { + constructor() { + super() + expect(() => { + this.fn = disposeOnUnmount(this, function() {}) + }).toThrow("disposeOnUnmount only supports direct subclasses") + } + } + + await asyncReactDOMRender(, testRoot) +}) diff --git a/test/patch.test.js b/test/patch.test.js deleted file mode 100644 index d84e0fcc..00000000 --- a/test/patch.test.js +++ /dev/null @@ -1,363 +0,0 @@ -import * as React from "react" -import { createTestRoot, asyncReactDOMRender } from "./" -import { patch } from "../src/utils/utils" - -const testRoot = createTestRoot() - -async function testComponent(C, didMountMixin, willUnmountMixin, doMixinTest = true) { - if (doMixinTest) { - expect(didMountMixin).not.toHaveBeenCalled() - expect(willUnmountMixin).not.toHaveBeenCalled() - } - - await asyncReactDOMRender(, testRoot) - - if (doMixinTest) { - expect(didMountMixin).toHaveBeenCalledTimes(1) - expect(willUnmountMixin).not.toHaveBeenCalled() - } - - await asyncReactDOMRender(null, testRoot) - - if (doMixinTest) { - expect(didMountMixin).toHaveBeenCalledTimes(1) - expect(willUnmountMixin).toHaveBeenCalledTimes(1) - } -} - -// TODO: all tests in this file are disabled now, can be removed if patching is no longer used -test.skip("no overrides", async () => { - const cdm = jest.fn() - const cwu = jest.fn() - class C extends React.Component { - render() { - return null - } - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - - await testComponent(C, cdm, cwu) -}) - -test.skip("prototype overrides", async () => { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - class C extends React.Component { - componentDidMount() { - cdmCalls++ - } - componentWillUnmount() { - cwuCalls++ - } - render() { - return null - } - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - - await testComponent(C, cdm, cwu) - expect(cdmCalls).toBe(1) - expect(cwuCalls).toBe(1) -}) - -test.skip("arrow function overrides", async () => { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - class C extends React.Component { - componentDidMount = () => { - cdmCalls++ - } - componentWillUnmount = () => { - cwuCalls++ - } - render() { - return null - } - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - - await testComponent(C, cdm, cwu) - expect(cdmCalls).toBe(1) - expect(cwuCalls).toBe(1) -}) - -test.skip("recursive calls", async () => { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - class C extends React.Component { - componentDidMount() { - cdmCalls++ - while (cdmCalls < 10) { - this.componentDidMount() - } - } - componentWillUnmount() { - cwuCalls++ - while (cwuCalls < 10) { - this.componentWillUnmount() - } - } - render() { - return null - } - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - - await testComponent(C, cdm, cwu) - expect(cdmCalls).toBe(10) - expect(cwuCalls).toBe(10) -}) - -test.skip("prototype + arrow function overrides", async () => { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - class C extends React.Component { - componentDidMount() { - cdmCalls++ - } - componentWillUnmount() { - cwuCalls++ - } - render() { - return null - } - constructor(props) { - super(props) - this.componentDidMount = () => { - cdmCalls++ - } - this.componentWillUnmount = () => { - cwuCalls++ - } - } - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - - await testComponent(C, cdm, cwu) - expect(cdmCalls).toBe(1) - expect(cwuCalls).toBe(1) -}) - -describe.skip("inheritance with prototype methods", async () => { - async function doTest(patchBase, patchOther, callSuper) { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - - class B extends React.Component { - componentDidMount() { - cdmCalls++ - } - componentWillUnmount() { - cwuCalls++ - } - } - - class C extends B { - componentDidMount() { - if (callSuper) { - super.componentDidMount() - } - cdmCalls++ - } - componentWillUnmount() { - if (callSuper) { - super.componentWillUnmount() - } - cwuCalls++ - } - render() { - return null - } - } - - if (patchBase) { - patch(B.prototype, "componentDidMount", cdm) - patch(B.prototype, "componentWillUnmount", cwu) - } - if (patchOther) { - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - } - - await testComponent(C, cdm, cwu, patchBase || patchOther) - expect(cdmCalls).toBe(callSuper ? 2 : 1) - expect(cwuCalls).toBe(callSuper ? 2 : 1) - } - - for (const base of [false, true]) { - for (const other of [false, true]) { - for (const callSuper of [false, true]) { - test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { - if (base && !other && !callSuper) { - // this one is expected to fail, since we are patching only the base and the other one totally ignores the base method - try { - await doTest(base, other, callSuper) - fail("should have failed") - } catch (e) {} - } else { - await doTest(base, other, callSuper) - } - }) - } - } - } -}) - -describe.skip("inheritance with arrow functions", async () => { - async function doTest(patchBase, patchOther, callSuper) { - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - - class B extends React.Component { - componentDidMount() { - cdmCalls++ - } - componentWillUnmount() { - cwuCalls++ - } - } - - class C extends B { - componentDidMount = () => { - if (callSuper) { - super.componentDidMount() - } - cdmCalls++ - } - componentWillUnmount = () => { - if (callSuper) { - super.componentWillUnmount() - } - cwuCalls++ - } - render() { - return null - } - } - - if (patchBase) { - patch(B.prototype, "componentDidMount", cdm) - patch(B.prototype, "componentWillUnmount", cwu) - } - if (patchOther) { - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - } - - await testComponent(C, cdm, cwu, patchBase || patchOther) - expect(cdmCalls).toBe(callSuper ? 2 : 1) - expect(cwuCalls).toBe(callSuper ? 2 : 1) - } - - for (const base of [false, true]) { - for (const other of [false, true]) { - for (const callSuper of [false, true]) { - test(`base: ${base}, other: ${other}, callSuper: ${callSuper}`, async () => { - await doTest(base, other, callSuper) - }) - } - } - } -}) - -test.skip("custom decorator #579", async () => { - async function doTest(customFirst) { - const customDidMount = jest.fn() - const customConstruct = jest.fn() - - function logMountingPerformance() { - return target => { - var original = target - var instance - - // a utility function to generate instances of a class - function construct(oldConstructor, args) { - var c = function() { - return new oldConstructor.apply(this, args) - } - c.prototype = oldConstructor.prototype - instance = new c() - - customConstruct() - return instance - } - - // the new constructor behaviour - var f = function(...args) { - return construct(original, args) - } - - var originalComponentDidMount = original.prototype.componentDidMount - // copy prototype so intanceof operator still works - f.prototype = original.prototype - - f.prototype.componentDidMount = function() { - var returnValue - if (originalComponentDidMount) { - returnValue = originalComponentDidMount.apply(instance) - } - customDidMount() - return returnValue - } - - // return new constructor (will override original) - return f - } - } - - const cdm = jest.fn() - const cwu = jest.fn() - let cdmCalls = 0 - let cwuCalls = 0 - - class C extends React.Component { - componentDidMount() { - cdmCalls++ - } - componentWillUnmount() { - cwuCalls++ - } - render() { - return null - } - } - if (customFirst) { - C = logMountingPerformance()(C) - } - patch(C.prototype, "componentDidMount", cdm) - patch(C.prototype, "componentWillUnmount", cwu) - if (!customFirst) { - C = logMountingPerformance()(C) - } - - expect(customConstruct).toHaveBeenCalledTimes(0) - expect(customDidMount).toHaveBeenCalledTimes(0) - - await testComponent(C, cdm, cwu) - expect(cdmCalls).toBe(1) - expect(cwuCalls).toBe(1) - - expect(customConstruct).toHaveBeenCalledTimes(1) - expect(customDidMount).toHaveBeenCalledTimes(1) - } - - await doTest(true) - await doTest(false) -}) From 50f03a72aba3a18951a1a5f39073a67904db31f6 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 16:38:31 +0100 Subject: [PATCH 33/46] Removed / updated tests where relevant --- test/__snapshots__/observer.test.js.snap | 1 + test/misc.test.js | 16 ---- test/observer.test.js | 110 ++++++----------------- 3 files changed, 29 insertions(+), 98 deletions(-) diff --git a/test/__snapshots__/observer.test.js.snap b/test/__snapshots__/observer.test.js.snap index 56cf46eb..6d58eea5 100644 --- a/test/__snapshots__/observer.test.js.snap +++ b/test/__snapshots__/observer.test.js.snap @@ -27,6 +27,7 @@ Array [ "Error: Hello", Object { "componentStack": " + in Observer (created by X) in X in div (created by Outer) in Outer", diff --git a/test/misc.test.js b/test/misc.test.js index 6fc42651..0916bd48 100644 --- a/test/misc.test.js +++ b/test/misc.test.js @@ -107,22 +107,6 @@ test("testIsComponentReactive", () => { expect(mobx.isObservable(instance)).toBeFalsy() }) -// TODO: needs to be restored to support devtools! -test.skip("testGetDNode", () => { - const C = observer(() => null) - - const wrapper = renderer.create() - expect(wrapper.getInstance()[mobxAdminProperty]).toBeTruthy() - expect(mobx.getAtom(wrapper.instance().render)).toBeTruthy() - - mobx.extendObservable(wrapper.instance(), { - x: 3 - }) - expect(mobx.getAtom(wrapper.instance(), "x")).not.toEqual( - mobx.getAtom(wrapper.instance().render) - ) -}) - test("Do not warn about custom shouldComponentUpdate when it is the one provided by ReactiveMixin", () => { expect( withConsole(() => { diff --git a/test/observer.test.js b/test/observer.test.js index 412d172c..7f644b29 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -348,15 +348,21 @@ describe("124 - react to changes in this.props via computed", () => { // Test on skip: since all reactions are now run in batched updates, the original issues can no longer be reproduced //this test case should be deprecated? -test.skip("should stop updating if error was thrown in render (#134)", () => { +test("should stop updating if error was thrown in render (#134)", () => { const data = mobx.observable.box(0) let renderingsCount = 0 let lastOwnRenderCount = 0 const errors = [] class Outer extends React.Component { + state = { hasError: false } + render() { - return
{this.props.children}
+ return this.state.hasError ?
Error!
:
{this.props.children}
+ } + + static getDerivedStateFromError() { + return { hasError: true } } componentDidCatch(error, info) { @@ -379,24 +385,26 @@ test.skip("should stop updating if error was thrown in render (#134)", () => { } ) - TestUtils.renderIntoDocument( - - - - ) - expect(data.observers.size).toBe(1) - data.set(1) - expect(renderingsCount).toBe(2) - expect(lastOwnRenderCount).toBe(2) - data.set(2) - expect(data.observers.size).toBe(0) - data.set(3) - data.set(4) - data.set(2) - data.set(5) - expect(errors).toMatchSnapshot() - expect(lastOwnRenderCount).toBe(4) - expect(renderingsCount).toBe(4) + withConsole(() => { + TestUtils.renderIntoDocument( + + + + ) + expect(data.observers.size).toBe(1) + data.set(1) + expect(renderingsCount).toBe(2) + expect(lastOwnRenderCount).toBe(2) + data.set(2) + expect(data.observers.size).toBe(0) + data.set(3) + data.set(4) + data.set(2) + data.set(5) + expect(errors).toMatchSnapshot() + expect(lastOwnRenderCount).toBe(4) + expect(renderingsCount).toBe(4) + }) }) describe("should render component even if setState called with exactly the same props", () => { @@ -650,52 +658,6 @@ test("parent / childs render in the right order", done => { done() }) -// TODO: waits for error throw fix in lite -describe.skip("206 - @observer should produce usefull errors if it throws", () => { - const data = mobx.observable({ x: 1 }) - let renderCount = 0 - - const emmitedErrors = [] - const disposeErrorsHandler = onError(error => { - emmitedErrors.push(error) - }) - - @observer - class Child extends React.Component { - render() { - renderCount++ - if (data.x === 42) throw new Error("Oops!") - return {data.x} - } - } - - beforeAll(async done => { - await asyncReactDOMRender(, testRoot) - done() - }) - - test("init renderCount should === 1", () => { - expect(renderCount).toBe(1) - }) - - test("catch exception", () => { - expect(() => { - withConsole(() => { - data.x = 42 - }) - }).toThrow(/Oops!/) - expect(renderCount).toBe(3) // React fiber will try to replay the rendering, so the exception gets thrown a second time - }) - - test("component recovers!", async () => { - await sleepHelper(500) - data.x = 3 - TestUtils.renderIntoDocument() - expect(renderCount).toBe(4) - expect(emmitedErrors).toEqual([new Error("Oops!"), new Error("Oops!")]) // see above comment - }) -}) - test("195 - async componentWillMount does not work", async () => { const renderedValues = [] @@ -727,22 +689,6 @@ test("195 - async componentWillMount does not work", async () => { expect(renderedValues).toEqual([0, 1]) }) -test.skip("195 - should throw if trying to overwrite lifecycle methods", () => { - // Test disabled, see #231... - - @observer - class WillMount extends React.Component { - componentWillMount = () => {} - - render() { - return null - } - } - expect(TestUtils.renderIntoDocument()).toThrow( - /Cannot assign to read only property 'componentWillMount'/ - ) -}) - describe("use Observer inject and render sugar should work ", () => { test("use render without inject should be correct", async () => { const Comp = () => ( From 79a5dc1a2cdea88e8a213a4b4e16bb14e499631d Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 17 Feb 2019 16:57:00 +0100 Subject: [PATCH 34/46] Updating Readme / processing more todo's --- CHANGELOG.md | 2 +- README.md | 132 +++---------- README_v5.md | 518 +++++++++++++++++++++++++++++++++++++++++++++++++++ hooks.png | Bin 0 -> 59941 bytes 4 files changed, 550 insertions(+), 102 deletions(-) create mode 100644 README_v5.md create mode 100644 hooks.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 95fe29ef..911370ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ * Defining `shouldComponentUpdate` on `observer` compon * `propTypes` is no longer exposed, use `PropTypes` instead * `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. - +* The `onError` global error handler has been removed. Use error boundaries instead. **Improvements** diff --git a/README.md b/README.md index 88863dc0..ca066f04 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,23 @@ Exports the `observer` decorator and some development utilities. For documentation, see the [MobX](https://mobxjs.github.io/mobx) project. This package supports both React and React Native. +## Choosing your version + +There are currently two actively maintained versions of mobx-react: + +| NPM Version | Supported React versions | Supports hook based components | +| --- | --- | -- | +| v6 | 16.8.0 and higher | Yes | +| v5 | 0.13 and higher | No, but it is possible to use `` sections inside hook based components | + +The V5 documentation can be found in the [README_v5](README_v5.md). + +Version 6 is a repackage of the [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite) package + following features from the `mobx-react@5` package added: +* Support for class based components for `observer` and `@observer` +* `Provider / inject` to pass stores around (but consider to use `React.createContext` instead) +* `PropTypes` to describe observable based property checkers (but consider to use TypeScript instead) +* The `disposeOnUnmount` utility / decorator to easily clean up resources such as reactions created in your class based components. + ## Installation `npm install mobx-react --save` @@ -26,18 +43,10 @@ See the [official documentation](http://mobxjs.github.io/mobx/intro/overview.htm If you are using [React hooks](https://reactjs.org/docs/hooks-intro.html) with latest React 16.7 and you like living on the bleeding edge then have a look at the new [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite). -## Boilerplate projects that use mobx-react - -* Minimal MobX, React, ES6, JSX, Hot reloading: [MobX-React-Boilerplate](/~https://github.com/mobxjs/mobx-react-boilerplate) -* TodoMVC MobX, React, ES6, JSX, Hot reloading: [MobX-React-TodoMVC](/~https://github.com/mobxjs/mobx-react-todomvc) -* Minimal MobX, React, Typescript, TSX: [MobX-React-Typescript-Boilerplate](/~https://github.com/mobxjs/mobx-react-typescript-boilerplate) -* Minimal MobX, React, ES6(babel), JSPM with hot reloading modules: - [jspm-react](/~https://github.com/capaj/jspm-react) -* React Native Counter: [Mobx-React-Native-Counter](/~https://github.com/bartonhammond/mobx-react-native-counter) -* React Native, TypeScript, React Navigation: [Ignite Bowser](/~https://github.com/infinitered/ignite-bowser) - ## API documentation +Please check [mobx.js.org](https://mobx.js.org) for the general documentation. The documentation below highlights some specifics. + ### observer(componentClass) Function (and decorator) that converts a React component definition, React component class or stand-alone render function into a reactive component, which tracks which observables are used by `render` and automatically re-renders the component when one of these values changes. @@ -79,7 +88,7 @@ class TodoView extends React.Component { } } -// ---- or just use a stateless component function: ---- +// ---- or just use function components: ---- const TodoView = observer(({ todo }) =>
{todo.title}
) ``` @@ -131,19 +140,6 @@ React.render(, document.body) person.name = "Mike" // will cause the Observer region to re-render ``` -### Global error handler with `onError` - -If a component throws an error, this logs to the console but does not 'crash' the app, so it might go unnoticed. -For this reason it is possible to attach a global error handler using `onError` to intercept any error thrown in the render of an `observer` component. -This can be used to hook up any client side error collection system. - -```javascript -import { onError } from "mobx-react" - -onError(error => { - console.log(error) -}) -``` ### Server Side Rendering with `useStaticRendering` @@ -173,37 +169,6 @@ Decorators are currently a stage-2 ESNext feature. How to enable them is documen See this [thread](https://www.reddit.com/r/reactjs/comments/4vnxg5/free_eggheadio_course_learn_mobx_react_in_30/d61oh0l). TL;DR: the conceptual distinction makes a lot of sense when using MobX as well, but use `observer` on all components. -### About `shouldComponentUpdate` - -When using `@observer` on a component, don't implement `shouldComponentUpdate`, as it will override the default implementation that MobX provides. -When using mobx-react, you should in general not need to write an `sCU` (in our entire Mendix code base we have none). If you really need to implement `sCU`, split the component into two, a reactive and non-reactive (with the `sCU`) part, or use `` sections instead of `observer` on the entire component. - -Similarly, `PureComponent` should not be combined with `observer`. As pure components are supposed to be dumb and never update themselves automatically, but only by getting passed in new props from the parent. `observer` is the opposite, it makes components smart and dependency aware, allowing them to update without the parents even needing to be aware of the change. - -### `componentWillReact` (lifecycle hook) - -React components usually render on a fresh stack, so that makes it often hard to figure out what _caused_ a component to re-render. -When using `mobx-react` you can define a new life cycle hook, `componentWillReact` (pun intended) that will be triggered when a component is scheduled to be re-rendered because -data it observes has changed. This makes it easy to trace renders back to the action that caused the rendering. - -```javascript -import { observer } from "mobx-react" - -@observer -class TodoView extends React.Component { - componentWillReact() { - console.log("I will re-render, since the todo has changed!") - } - - render() { - return
{this.props.todo.title}
- } -} -``` - -* `componentWillReact` doesn't take arguments -* `componentWillReact` won't fire before the initial render (use `componentDidMount` or `constructor` instead) - ### `PropTypes` MobX-react provides the following additional `PropTypes` which can be used to validate against MobX structures: @@ -261,11 +226,9 @@ class MessageList extends React.Component { Notes: * If a component asks for a store and receives a store via a property with the same name, the property takes precedence. Use this to your advantage when testing! -* If updates to an observable store are not triggering `render()`, make sure you are using Class methods for React lifecycle hooks such as `componentWillMount() {}`, using `componentWillMount = () => {}` will create a property on the instance and cause conflicts with mobx-react. * Values provided through `Provider` should be final, to avoid issues like mentioned in [React #2517](/~https://github.com/facebook/react/issues/2517) and [React #3973](/~https://github.com/facebook/react/pull/3973), where optimizations might stop the propagation of new context. Instead, make sure that if you put things in `context` that might change over time, that they are `@observable` or provide some other means to listen to changes, like callbacks. However, if your stores will change over time, like an observable value of another store, MobX will warn you. To suppress that warning explicitly, you can use `suppressChangedStoreWarning={true}` as a prop at your own risk. * When using both `@inject` and `@observer`, make sure to apply them in the correct order: `observer` should be the inner decorator, `inject` the outer. There might be additional decorators in between. * The original component wrapped by `inject` is available as the `wrappedComponent` property of the created higher order component. -* For mounted component instances, the wrapped component instance is available through the `wrappedInstance` property (except for stateless components). #### Inject as function @@ -393,10 +356,6 @@ public render() { } ``` -##### With Flow - -Currently, there is a community-discussion around the best way to use `inject` with Flow. Join the discussion at [this gist](https://gist.github.com/vonovak/29c972c6aa9efbb7d63a6853d021fba9). - #### Testing store injection It is allowed to pass any declared store in directly as a property as well. This makes it easy to set up individual component tests without a provider. @@ -450,6 +409,17 @@ class SomeComponent extends React.Component { } ``` +## DevTools + +`mobx-react@6` and higher are no longer compatible with the mobx-react-devtools. +That is, the MobX react devtools will no longer show render timings or dependency trees of the component. +The reason is that the standard React devtools are no also capable of highlighting re-rendering components. +And the dependency tree of a component can now be inspected by the standard devtools as well, as shown in the image below: + +![hooks.png](hooks.png) + +The event spy will still work as is. + ## FAQ **Should I use `observer` for each component?** @@ -476,43 +446,3 @@ Warning: setState(...): Cannot update during an existing state transition (such Usually this means that (another) component is trying to modify observables used by this components in their `constructor` or `getInitialState` methods. This violates the React Lifecycle, `componentWillMount` should be used instead if state needs to be modified before mounting. - -## Internal DevTools Api - -### trackComponents() - -Enables the tracking from components. Each rendered reactive component will be added to the `componentByNodeRegistery` and its renderings will be reported through the `renderReporter` event emitter. - -### renderReporter - -Event emitter that reports render timings and component destructions. Only available after invoking `trackComponents()`. -New listeners can be added through `renderReporter.on(function(data) { /* */ })`. - -Data will have one of the following formats: - -```javascript -{ - event: 'render', - renderTime: /* time spend in the .render function of a component, in ms. */, - totalTime: /* time between starting a .render and flushing the changes to the DOM, in ms. */, - component: /* component instance */, - node: /* DOM node */ -} -``` - -```javascript -{ - event: 'destroy', - component: /* component instance */, - node: /* DOM Node */ -} -``` - -### componentByNodeRegistery - -WeakMap. Its `get` function returns the associated reactive component of the given node. The node needs to be precisely the root node of the component. -This map is only available after invoking `trackComponents`. - -### Debugging reactions with trace - -Using Mobx.trace() inside a React render function will print out the observable that triggered the change. See [the mobx trace docs](https://mobx.js.org/best/trace.html) for more information. diff --git a/README_v5.md b/README_v5.md new file mode 100644 index 00000000..88863dc0 --- /dev/null +++ b/README_v5.md @@ -0,0 +1,518 @@ +# mobx-react + +[![Build Status](https://travis-ci.org/mobxjs/mobx-react.svg?branch=master)](https://travis-ci.org/mobxjs/mobx-react) +[![Join the chat at https://gitter.im/mobxjs/mobx](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mobxjs/mobx?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![CDNJS](https://img.shields.io/cdnjs/v/mobx-react.svg)](https://cdnjs.com/libraries/mobx-react) + +Package with React component wrapper for combining React with MobX. +Exports the `observer` decorator and some development utilities. +For documentation, see the [MobX](https://mobxjs.github.io/mobx) project. +This package supports both React and React Native. + +## Installation + +`npm install mobx-react --save` + +Or CDN: https://unpkg.com/mobx-react (namespace: `mobxReact`) + +```javascript +import { observer } from "mobx-react" +// - or, for custom renderers without DOM: - +import { observer } from "mobx-react/custom" +``` + +This package provides the bindings for MobX and React. +See the [official documentation](http://mobxjs.github.io/mobx/intro/overview.html) for how to get started. + +If you are using [React hooks](https://reactjs.org/docs/hooks-intro.html) with latest React 16.7 and you like living on the bleeding edge then have a look at the new [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite). + +## Boilerplate projects that use mobx-react + +* Minimal MobX, React, ES6, JSX, Hot reloading: [MobX-React-Boilerplate](/~https://github.com/mobxjs/mobx-react-boilerplate) +* TodoMVC MobX, React, ES6, JSX, Hot reloading: [MobX-React-TodoMVC](/~https://github.com/mobxjs/mobx-react-todomvc) +* Minimal MobX, React, Typescript, TSX: [MobX-React-Typescript-Boilerplate](/~https://github.com/mobxjs/mobx-react-typescript-boilerplate) +* Minimal MobX, React, ES6(babel), JSPM with hot reloading modules: + [jspm-react](/~https://github.com/capaj/jspm-react) +* React Native Counter: [Mobx-React-Native-Counter](/~https://github.com/bartonhammond/mobx-react-native-counter) +* React Native, TypeScript, React Navigation: [Ignite Bowser](/~https://github.com/infinitered/ignite-bowser) + +## API documentation + +### observer(componentClass) + +Function (and decorator) that converts a React component definition, React component class or stand-alone render function into a reactive component, which tracks which observables are used by `render` and automatically re-renders the component when one of these values changes. + +Apart from observables passed/injected in or defined inside an `observer` component, `this.props` and `this.state` are also observables themselves, so the component will react to all changes in props and state that are used by `render`. + +See the [MobX](https://mobxjs.github.io/mobx/refguide/observer-component.html) documentation for more details. + +```javascript +import { observer } from "mobx-react" + +// ---- ES5 syntax ---- + +const TodoView = observer( + React.createClass({ + displayName: "TodoView", + render() { + return
{this.props.todo.title}
+ } + }) +) + +// ---- ES6 syntax ---- + +const TodoView = observer( + class TodoView extends React.Component { + render() { + return
{this.props.todo.title}
+ } + } +) + +// ---- ESNext syntax with decorators ---- + +@observer +class TodoView extends React.Component { + render() { + return
{this.props.todo.title}
+ } +} + +// ---- or just use a stateless component function: ---- + +const TodoView = observer(({ todo }) =>
{todo.title}
) +``` + +### `Observer` + +`Observer` is a React component, which applies `observer` to an anonymous region in your component. +It takes as children a single, argumentless function which should return exactly one React component. +The rendering in the function will be tracked and automatically re-rendered when needed. +This can come in handy when needing to pass render function to external components (for example the React Native listview), or if you +dislike the `observer` decorator / function. + +```javascript +class App extends React.Component { + render() { + return ( +
+ {this.props.person.name} + {() =>
{this.props.person.name}
}
+
+ ) + } +} + +const person = observable({ name: "John" }) + +React.render(, document.body) +person.name = "Mike" // will cause the Observer region to re-render +``` + +In case you are a fan of render props, you can use that instead of children. Be advised, that you cannot use both approaches at once, children have a precedence. +Example + +```javascript +class App extends React.Component { + render() { + return ( +
+ {this.props.person.name} +
{this.props.person.name}
} /> +
+ ) + } +} + +const person = observable({ name: "John" }) + +React.render(, document.body) +person.name = "Mike" // will cause the Observer region to re-render +``` + +### Global error handler with `onError` + +If a component throws an error, this logs to the console but does not 'crash' the app, so it might go unnoticed. +For this reason it is possible to attach a global error handler using `onError` to intercept any error thrown in the render of an `observer` component. +This can be used to hook up any client side error collection system. + +```javascript +import { onError } from "mobx-react" + +onError(error => { + console.log(error) +}) +``` + +### Server Side Rendering with `useStaticRendering` + +When using server side rendering, normal lifecycle hooks of React components are not fired, as the components are rendered only once. +Since components are never unmounted, `observer` components would in this case leak memory when being rendered server side. +To avoid leaking memory, call `useStaticRendering(true)` when using server side rendering. + +```javascript +import { useStaticRendering } from "mobx-react" + +useStaticRendering(true); +``` + +This makes sure the component won't try to react to any future data changes. + +### Which components should be marked with `observer`? + +The simple rule of thumb is: _all components that render observable data_. +If you don't want to mark a component as observer, for example to reduce the dependencies of a generic component package, make sure you only pass it plain data. + +### Enabling decorators (optional) + +Decorators are currently a stage-2 ESNext feature. How to enable them is documented [here](/~https://github.com/mobxjs/mobx#enabling-decorators-optional). + +### Should I still use smart and dumb components? + +See this [thread](https://www.reddit.com/r/reactjs/comments/4vnxg5/free_eggheadio_course_learn_mobx_react_in_30/d61oh0l). +TL;DR: the conceptual distinction makes a lot of sense when using MobX as well, but use `observer` on all components. + +### About `shouldComponentUpdate` + +When using `@observer` on a component, don't implement `shouldComponentUpdate`, as it will override the default implementation that MobX provides. +When using mobx-react, you should in general not need to write an `sCU` (in our entire Mendix code base we have none). If you really need to implement `sCU`, split the component into two, a reactive and non-reactive (with the `sCU`) part, or use `` sections instead of `observer` on the entire component. + +Similarly, `PureComponent` should not be combined with `observer`. As pure components are supposed to be dumb and never update themselves automatically, but only by getting passed in new props from the parent. `observer` is the opposite, it makes components smart and dependency aware, allowing them to update without the parents even needing to be aware of the change. + +### `componentWillReact` (lifecycle hook) + +React components usually render on a fresh stack, so that makes it often hard to figure out what _caused_ a component to re-render. +When using `mobx-react` you can define a new life cycle hook, `componentWillReact` (pun intended) that will be triggered when a component is scheduled to be re-rendered because +data it observes has changed. This makes it easy to trace renders back to the action that caused the rendering. + +```javascript +import { observer } from "mobx-react" + +@observer +class TodoView extends React.Component { + componentWillReact() { + console.log("I will re-render, since the todo has changed!") + } + + render() { + return
{this.props.todo.title}
+ } +} +``` + +* `componentWillReact` doesn't take arguments +* `componentWillReact` won't fire before the initial render (use `componentDidMount` or `constructor` instead) + +### `PropTypes` + +MobX-react provides the following additional `PropTypes` which can be used to validate against MobX structures: + +* `observableArray` +* `observableArrayOf(React.PropTypes.number)` +* `observableMap` +* `observableObject` +* `arrayOrObservableArray` +* `arrayOrObservableArrayOf(React.PropTypes.number)` +* `objectOrObservableObject` + +Use `import { PropTypes } from "mobx-react"` to import them, then use for example `PropTypes.observableArray` + +### `Provider` and `inject` + +`Provider` is a component that can pass stores (or other stuff) using React's context mechanism to child components. +This is useful if you have things that you don't want to pass through multiple layers of components explicitly. + +`inject` can be used to pick up those stores. It is a higher order component that takes a list of strings and makes those stores available to the wrapped component. + +Example (based on the official [context docs](https://facebook.github.io/react/docs/context.html#passing-info-automatically-through-a-tree)): + +```javascript +@inject("color") +@observer +class Button extends React.Component { + render() { + return + } +} + +class Message extends React.Component { + render() { + return ( +
+ {this.props.text} +
+ ) + } +} + +class MessageList extends React.Component { + render() { + const children = this.props.messages.map(message => ) + return ( + +
{children}
+
+ ) + } +} +``` + +Notes: + +* If a component asks for a store and receives a store via a property with the same name, the property takes precedence. Use this to your advantage when testing! +* If updates to an observable store are not triggering `render()`, make sure you are using Class methods for React lifecycle hooks such as `componentWillMount() {}`, using `componentWillMount = () => {}` will create a property on the instance and cause conflicts with mobx-react. +* Values provided through `Provider` should be final, to avoid issues like mentioned in [React #2517](/~https://github.com/facebook/react/issues/2517) and [React #3973](/~https://github.com/facebook/react/pull/3973), where optimizations might stop the propagation of new context. Instead, make sure that if you put things in `context` that might change over time, that they are `@observable` or provide some other means to listen to changes, like callbacks. However, if your stores will change over time, like an observable value of another store, MobX will warn you. To suppress that warning explicitly, you can use `suppressChangedStoreWarning={true}` as a prop at your own risk. +* When using both `@inject` and `@observer`, make sure to apply them in the correct order: `observer` should be the inner decorator, `inject` the outer. There might be additional decorators in between. +* The original component wrapped by `inject` is available as the `wrappedComponent` property of the created higher order component. +* For mounted component instances, the wrapped component instance is available through the `wrappedInstance` property (except for stateless components). + +#### Inject as function + +The above example in ES5 would start like: + +```javascript +var Button = inject("color")( + observer( + React.createClass({ + /* ... etc ... */ + }) + ) +) +``` + +A functional stateless component would look like: + +```javascript +var Button = inject("color")( + observer(({ color }) => { + /* ... etc ... */ + }) +) +``` + +#### Customizing inject + +Instead of passing a list of store names, it is also possible to create a custom mapper function and pass it to inject. +The mapper function receives all stores as argument, the properties with which the components are invoked and the context, and should produce a new set of properties, +that are mapped into the original: + +`mapperFunction: (allStores, props, context) => additionalProps` + +Since version 4.0 the `mapperFunction` itself is tracked as well, so it is possible to do things like: + +```javascript +const NameDisplayer = ({ name }) =>

{name}

+ +const UserNameDisplayer = inject(stores => ({ + name: stores.userStore.name +}))(NameDisplayer) + +const user = mobx.observable({ + name: "Noa" +}) + +const App = () => ( + + + +) + +ReactDOM.render(, document.body) +``` + +_N.B. note that in this *specific* case neither `NameDisplayer` nor `UserNameDisplayer` needs to be decorated with `observer`, since the observable dereferencing is done in the mapper function_ + +#### Using `propTypes` and `defaultProps` and other static properties in combination with `inject` + +Inject wraps a new component around the component you pass into it. +This means that assigning a static property to the resulting component, will be applied to the HoC, and not to the original component. +So if you take the following example: + +```javascript +const UserName = inject("userStore")(({ userStore, bold }) => someRendering()) + +UserName.propTypes = { + bold: PropTypes.boolean.isRequired, + userStore: PropTypes.object.isRequired // will always fail +} +``` + +The above propTypes are incorrect, `bold` needs to be provided by the caller of the `UserName` component and is checked by React. +However, `userStore` does not need to be required! Although it is required for the original stateless function component, it is not +required for the resulting inject component. After all, the whole point of that component is to provide that `userStore` itself. + +So if you want to make assertions on the data that is being injected (either stores or data resulting from a mapper function), the propTypes +should be defined on the _wrapped_ component. Which is available through the static property `wrappedComponent` on the inject component: + +```javascript +const UserName = inject("userStore")(({ userStore, bold }) => someRendering()) + +UserName.propTypes = { + bold: PropTypes.boolean.isRequired // could be defined either here ... +} + +UserName.wrappedComponent.propTypes = { + // ... or here + userStore: PropTypes.object.isRequired // correct +} +``` + +The same principle applies to `defaultProps` and other static React properties. +Note that it is not allowed to redefine `contextTypes` on `inject` components (but is possible to define it on `wrappedComponent`) + +Finally, mobx-react will automatically move non React related static properties from wrappedComponent to the inject component so that all static fields are +actually available to the outside world without needing `.wrappedComponent`. + +#### Strongly typing inject + +##### With TypeScript + +`inject` also accepts a function (`(allStores, nextProps, nextContext) => additionalProps`) that can be used to pick all the desired stores from the available stores like this. +The `additionalProps` will be merged into the original `nextProps` before being provided to the next component. + +```typescript +import { IUserStore } from "myStore" + +@inject(allStores => ({ + userStore: allStores.userStore as IUserStore +})) +class MyComponent extends React.Component<{ userStore?: IUserStore; otherProp: number }, {}> { + /* etc */ +} +``` + +Make sure to mark `userStore` as an optional property. It should not (necessarily) be passed in by parent components at all! + +Note: If you have strict null checking enabled, you could muffle the nullable type by using the `!` operator: + +``` +public render() { + const {a, b} = this.store! + // ... +} +``` + +##### With Flow + +Currently, there is a community-discussion around the best way to use `inject` with Flow. Join the discussion at [this gist](https://gist.github.com/vonovak/29c972c6aa9efbb7d63a6853d021fba9). + +#### Testing store injection + +It is allowed to pass any declared store in directly as a property as well. This makes it easy to set up individual component tests without a provider. + +So if you have in your app something like: + +```javascript + + + +``` + +In your test you can easily test the `Person` component by passing the necessary store as prop directly: + +``` +const profile = new Profile() +const mountedComponent = mount( + +) +``` + +Bear in mind that using shallow rendering won't provide any useful results when testing injected components; only the injector will be rendered. +To test with shallow rendering, instantiate the `wrappedComponent` instead: `shallow()` + +### disposeOnUnmount(componentInstance, propertyKey | function | function[]) + +Function (and decorator) that makes sure a function (usually a disposer such as the ones returned by `reaction`, `autorun`, etc.) is automatically executed as part of the componentWillUnmount lifecycle event. + +```javascript +import { disposeOnUnmount } from "mobx-react" + +class SomeComponent extends React.Component { + // decorator version + @disposeOnUnmount + someReactionDisposer = reaction(...) + + // function version over properties + someReactionDisposer = disposeOnUnmount(this, reaction(...)) + + // function version inside methods + componentDidMount() { + // single function + disposeOnUnmount(this, reaction(...)) + + // or function array + disposeOnUnmount(this, [ + reaction(...), + reaction(...) + ]) + } +} +``` + +## FAQ + +**Should I use `observer` for each component?** + +You should use `observer` on every component that displays observable data. +Even the small ones. `observer` allows components to render independently from their parent and in general this means that +the more you use `observer`, the better the performance become. +The overhead of `observer` itself is negligible. +See also [Do child components need `@observer`?](/~https://github.com/mobxjs/mobx/issues/101) + +**I see React warnings about `forceUpdate` / `setState` from React** + +The following warning will appear if you trigger a re-rendering between instantiating and rendering a component: + +``` +Warning: forceUpdate(...): Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.` +``` + +-- or -- + +``` +Warning: setState(...): Cannot update during an existing state transition (such as within `render` or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to `componentWillMount`. +``` + +Usually this means that (another) component is trying to modify observables used by this components in their `constructor` or `getInitialState` methods. +This violates the React Lifecycle, `componentWillMount` should be used instead if state needs to be modified before mounting. + +## Internal DevTools Api + +### trackComponents() + +Enables the tracking from components. Each rendered reactive component will be added to the `componentByNodeRegistery` and its renderings will be reported through the `renderReporter` event emitter. + +### renderReporter + +Event emitter that reports render timings and component destructions. Only available after invoking `trackComponents()`. +New listeners can be added through `renderReporter.on(function(data) { /* */ })`. + +Data will have one of the following formats: + +```javascript +{ + event: 'render', + renderTime: /* time spend in the .render function of a component, in ms. */, + totalTime: /* time between starting a .render and flushing the changes to the DOM, in ms. */, + component: /* component instance */, + node: /* DOM node */ +} +``` + +```javascript +{ + event: 'destroy', + component: /* component instance */, + node: /* DOM Node */ +} +``` + +### componentByNodeRegistery + +WeakMap. Its `get` function returns the associated reactive component of the given node. The node needs to be precisely the root node of the component. +This map is only available after invoking `trackComponents`. + +### Debugging reactions with trace + +Using Mobx.trace() inside a React render function will print out the observable that triggered the change. See [the mobx trace docs](https://mobx.js.org/best/trace.html) for more information. diff --git a/hooks.png b/hooks.png new file mode 100644 index 0000000000000000000000000000000000000000..0e427bd46842da501161e07fc69a92410b648b03 GIT binary patch literal 59941 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

= | React.StatelessComponent

| React.ComponentClass

@@ -70,14 +79,6 @@ export function disposeOnUnmount( */ export class Provider extends React.Component {} -export class Observer extends React.Component< - { - children?: () => React.ReactNode - render?: () => React.ReactNode - }, - {} -> {} - export function useStaticRendering(value: boolean): void /** diff --git a/src/index.js b/src/index.js index e5c845e4..80f291d8 100644 --- a/src/index.js +++ b/src/index.js @@ -9,14 +9,7 @@ if (!observable) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) -export { - useObservable, - useComputed, - useDisposable, - IObserverOptions, - useObserver, - Observer -} from "mobx-react-lite" +export { useObservable, useComputed, useDisposable, useObserver, Observer } from "mobx-react-lite" export { observer, useStaticRendering } from "./observer" diff --git a/test/ts/compile-ts.tsx b/test/ts/compile-ts.tsx index 6ca29889..10664c16 100644 --- a/test/ts/compile-ts.tsx +++ b/test/ts/compile-ts.tsx @@ -2,7 +2,7 @@ import * as React from "react" import * as ReactDOM from "react-dom" import { Component } from "react" import * as PropTypes from "prop-types" -import { observer, Provider, propTypes, inject, Observer, disposeOnUnmount } from "../../src" +import { observer, Provider, propTypes, inject, Observer, disposeOnUnmount, useObservable } from "../../src" import * as createClass from "create-react-class" @observer @@ -270,3 +270,15 @@ inject(({ x }) => ({ x }))(InjectSomeStores) } */ } + +{ + const TestComponent = () => { + const observable = useObservable({ + test: 3 + }) + + return

{observable.test * 2}

+ } + + +} \ No newline at end of file diff --git a/test/ts/tsconfig.json b/test/ts/tsconfig.json index 8772794b..c79f1eff 100644 --- a/test/ts/tsconfig.json +++ b/test/ts/tsconfig.json @@ -8,7 +8,7 @@ "noEmit": true, "rootDir": "../../", "module": "commonjs", - "lib": ["es5", "dom"] + "lib": ["es6", "dom"] }, "exclude": [ From 53f1dd201922411cb687006ecd2e89b9a92f9ecb Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 21 Mar 2019 14:42:49 +0100 Subject: [PATCH 39/46] Generate react-native build during compilation, so that there are no unsatisfied dependencies --- CHANGELOG.md | 3 ++- package.json | 8 ++++---- src/index.js | 2 -- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb98f655..05a0f186 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,11 +11,12 @@ * Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. * The third argument of custom `storesToProps` functions passed to `inject` is no longer available. * `` no longer supports the deprecated `inject` property. -* Defining `shouldComponentUpdate` on `observer` compon +* Defining `shouldComponentUpdate` on `observer` based components is no longer supported * `propTypes` is no longer exposed, use `PropTypes` instead * `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. * The `onError` global error handler has been removed. Use error boundaries instead. * Improved dev tool names for `inject` wrapped components, see [#472](/~https://github.com/mobxjs/mobx-react/pull/472) by [SimeonC](/~https://github.com/SimeonC). Fixes [#466](/~https://github.com/mobxjs/mobx-react/issues/466) +* Dropped support for a build of mobx-react that doesn't target either `react-dom` or `react-native`. mobx-react doesn't need `react-dom` to be present, but to make sure your build tools don't fail, you might want to stub `react-dom` as an empty module. **Improvements** diff --git a/package.json b/package.json index 2fdfcadb..67912f2e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mobx-react", - "version": "5.4.3", + "version": "6.0.0-rc.2", "description": "React bindings for MobX. Create fully reactive components.", "source": "src/index.js", "main": "dist/mobx-react.js", @@ -8,7 +8,7 @@ "umd:main": "dist/mobx-react.umd.js", "unpkg": "dist/mobx-react.umd.js", "module": "dist/mobx-react.module.js", - "react-native": "dist/mobx-react.module.js", + "react-native": "dist/mobx-react.rn.module.js", "types": "dist/mobx-react.d.ts", "repository": { "type": "git", @@ -19,8 +19,8 @@ "test": "jest && npm run test:ts", "test:ts": "tsc -p test/ts", "test:travis": "npm run build && jest && npm run test:ts", - "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts", - "bundle": "microbundle --external mobx,react,react-dom,react-native --globals react-dom=ReactDOM,react-native=ReactNative,react=React --name mobxReact", + "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts && shx cp dist/mobx-react.module.js dist/mobx-react.rn.module.js && sed -i 's/\"react-dom\"/\"react-native\"/g' dist/mobx-react.rn.module.js", + "bundle": "microbundle --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact", "watch": "jest --watch" }, "author": "Michel Weststrate", diff --git a/src/index.js b/src/index.js index 80f291d8..a3010ddf 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,11 @@ import { observable, configure } from "mobx" import { Component } from "react" import { unstable_batchedUpdates as rdBatched } from "react-dom" -import { unstable_batchedUpdates as rnBatched } from "react-native" if (!Component) throw new Error("mobx-react requires React to be available") if (!observable) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) -else if (typeof rnBatched === "function") configure({ reactionScheduler: rnBatched }) export { useObservable, useComputed, useDisposable, useObserver, Observer } from "mobx-react-lite" From 6d23b11cad915758f9ee4daf47649cb18275126f Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 22 Mar 2019 10:19:40 +0100 Subject: [PATCH 40/46] Disabled compressing since it seems to break React --- CHANGELOG.md | 2 + package.json | 6 +- yarn.lock | 196 +++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 155 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05a0f186..568af510 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,8 @@ **Migration guide** +TODO: answer FAQ: https://twitter.com/winterbe_/status/1108768407925780482 + ### 5.4.3 * Fixed [#612](/~https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case. diff --git a/package.json b/package.json index 67912f2e..316eea23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mobx-react", - "version": "6.0.0-rc.2", + "version": "6.0.0-rc.3", "description": "React bindings for MobX. Create fully reactive components.", "source": "src/index.js", "main": "dist/mobx-react.js", @@ -20,7 +20,7 @@ "test:ts": "tsc -p test/ts", "test:travis": "npm run build && jest && npm run test:ts", "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts && shx cp dist/mobx-react.module.js dist/mobx-react.rn.module.js && sed -i 's/\"react-dom\"/\"react-native\"/g' dist/mobx-react.rn.module.js", - "bundle": "microbundle --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact", + "bundle": "microbundle --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact --no-compress", "watch": "jest --watch" }, "author": "Michel Weststrate", @@ -51,7 +51,7 @@ "jest-environment-jsdom": "^24.0.0", "lint-staged": "^7.0.5", "lodash": "^4.17.4", - "microbundle": "^0.9.0", + "microbundle": "^0.11.0", "mobx": "^5.0.0", "prettier": "^1.7.2", "prop-types": "^15.6.0", diff --git a/yarn.lock b/yarn.lock index e0e606c2..91dcffb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.0", "@babel/core@^7.1.6": +"@babel/core@^7.1.0": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== @@ -29,6 +29,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.2.2": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.0.tgz#248fd6874b7d755010bfe61f557461d4f446d9e9" + integrity sha512-Dzl7U0/T69DFOTwqz/FJdnOSWS57NpjNfCwMKHABr589Lg8uX1RrlBIJ7L5Dubt/xkLsx0xH5EBFzlBVes1ayA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.0" + "@babel/helpers" "^7.4.0" + "@babel/parser" "^7.4.0" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.0.0", "@babel/generator@^7.2.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.2.tgz#fff31a7b2f2f3dad23ef8e01be45b0d5c2fc0132" @@ -40,6 +60,17 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" + integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== + dependencies: + "@babel/types" "^7.4.0" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -72,6 +103,18 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-create-class-features-plugin@^7.2.1": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.0.tgz#30fd090e059d021995c1762a5b76798fa0b51d82" + integrity sha512-2K8NohdOT7P6Vyp23QH4w2IleP8yG3UJsbRKwA4YP6H8fErcLkFuuEEqbF2/BYBKSNci/FWJiqm6R3VhM/QHgw== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.0" + "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/helper-create-class-features-plugin@^7.3.0": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.3.2.tgz#ba1685603eb1c9f2f51c9106d5180135c163fe73" @@ -189,6 +232,16 @@ "@babel/traverse" "^7.2.3" "@babel/types" "^7.0.0" +"@babel/helper-replace-supers@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.0.tgz#4f56adb6aedcd449d2da9399c2dcf0545463b64c" + integrity sha512-PVwCVnWWAgnal+kJ+ZSAphzyl58XrFeSKSAJRiqg5QToTsjL+Xu1f9+RJ+d+Q0aPhPfBGaYfkox66k86thxNSg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -204,6 +257,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-split-export-declaration@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" + integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== + dependencies: + "@babel/types" "^7.4.0" + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -223,6 +283,15 @@ "@babel/traverse" "^7.1.5" "@babel/types" "^7.3.0" +"@babel/helpers@^7.4.0": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.2.tgz#3bdfa46a552ca77ef5a0f8551be5f0845ae989be" + integrity sha512-gQR1eQeroDzFBikhrCccm5Gs2xBjZ57DNjGbqTaHo911IpmSxflOQWMAHPw/TXk8L3isv7s9lYzUkexOeTQUYg== + dependencies: + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.0" + "@babel/types" "^7.4.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -237,6 +306,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.2.tgz#95cdeddfc3992a6ca2a1315191c1679ca32c55cd" integrity sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ== +"@babel/parser@^7.4.0": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" + integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -246,17 +320,13 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" -"@babel/plugin-proposal-class-properties@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" - integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== +"@babel/plugin-proposal-class-properties@7.2.1": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz#c734a53e0a1ec40fe5c22ee5069d26da3b187d05" + integrity sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-create-class-features-plugin" "^7.2.1" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" "@babel/plugin-proposal-class-properties@^7.1.0": version "7.3.0" @@ -315,13 +385,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.2.0.tgz#23b3b7b9bcdabd73672a9149f728cd3be6214812" - integrity sha512-UxYaGXYQ7rrKJS/PxIKRkv3exi05oH7rokBAsmCSsCxz1sVPZ7Fu6FzKoGgUvmY+0YgSkYHgUoCh5R5bCNBQlw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-decorators@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" @@ -336,7 +399,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": +"@babel/plugin-syntax-jsx@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== @@ -654,6 +717,15 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" +"@babel/template@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" + integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" + "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2", "@babel/traverse@^7.2.3": version "7.2.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" @@ -669,6 +741,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.0.tgz#14006967dd1d2b3494cdd650c686db9daf0ddada" + integrity sha512-/DtIHKfyg2bBKnIN+BItaIlEg5pjAnzHOIQe5w+rHAw/rg9g0V7T4rqPX8BJPfW11kt3koyjAnTNwCzb28Y1PA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.2": version "7.3.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.2.tgz#424f5be4be633fff33fb83ab8d67e4a8290f5a2f" @@ -678,6 +765,15 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" + integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" @@ -1196,10 +1292,10 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" - integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== +builtin-modules@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" + integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== cache-base@^1.0.1: version "1.0.1" @@ -2466,10 +2562,10 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" - integrity sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ== +fs-extra@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -4085,14 +4181,14 @@ merge@^1.2.0: resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= -microbundle@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.9.0.tgz#bbec53047ff238c592aba0e5fd8fea3ce7654de3" - integrity sha512-wceG5fWCig3AKUpYmlzBSGrPgtbO1y5zFxpgLQxQq67crWYYKAvjH6qRFHgIbslrhWckomu9B410fdfECdeXWw== +microbundle@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/microbundle/-/microbundle-0.11.0.tgz#266bcf4210192698c23fe3bf3581ab81d31a14d0" + integrity sha512-Lt2f8OhC2y2uKyJ5zA8lEEiDsIAbk6yllBuoAWLIdYVIXYqOdN9mO3DI7VW7x/fw87gdnCLIJdVtpP6kaI99LA== dependencies: - "@babel/core" "^7.1.6" - "@babel/plugin-proposal-class-properties" "7.1.0" - "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/core" "^7.2.2" + "@babel/plugin-proposal-class-properties" "7.2.1" + "@babel/plugin-syntax-jsx" "^7.2.0" "@babel/polyfill" "^7.0.0" asyncro "^3.0.0" autoprefixer "^9.0.0" @@ -4105,6 +4201,7 @@ microbundle@^0.9.0: gzip-size "^5.0.0" pretty-bytes "^5.1.0" rollup "^0.67.3" + rollup-plugin-alias "^1.5.1" rollup-plugin-babel "^4.1.0-0" rollup-plugin-buble "^0.19.4" rollup-plugin-bundle-size "^1.0.1" @@ -4112,12 +4209,12 @@ microbundle@^0.9.0: rollup-plugin-es3 "^1.1.0" rollup-plugin-flow "^1.1.1" rollup-plugin-json "^3.1.0" - rollup-plugin-node-resolve "^3.3.0" + rollup-plugin-node-resolve "^4.0.0" rollup-plugin-postcss "^1.6.1" rollup-plugin-preserve-shebang "^0.1.6" rollup-plugin-sizes "^0.4.2" rollup-plugin-terser "^3.0.0" - rollup-plugin-typescript2 "^0.18.0" + rollup-plugin-typescript2 "^0.19.0" sade "^1.4.0" tiny-glob "^0.2.6" tslib "^1.9.0" @@ -5918,6 +6015,13 @@ rimraf@^2.6.2: dependencies: glob "^7.1.3" +rollup-plugin-alias@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-alias/-/rollup-plugin-alias-1.5.1.tgz#80cce3a967befda5b09c86abc14a043a78035b46" + integrity sha512-pQTYBRNfLedoVOO7AYHNegIavEIp4jKTga5jUi1r//KYgHKGWgG4qJXYhbcWKt2k1FwGlR5wCYoY+IFkme0t4A== + dependencies: + slash "^2.0.0" + rollup-plugin-babel@^4.1.0-0: version "4.3.2" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz#8c0e1bd7aa9826e90769cf76895007098ffd1413" @@ -5974,14 +6078,14 @@ rollup-plugin-json@^3.1.0: dependencies: rollup-pluginutils "^2.3.1" -rollup-plugin-node-resolve@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" - integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== +rollup-plugin-node-resolve@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz#f95765d174e5daeef9ea6268566141f53aa9d422" + integrity sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg== dependencies: - builtin-modules "^2.0.0" + builtin-modules "^3.0.0" is-module "^1.0.0" - resolve "^1.1.6" + resolve "^1.10.0" rollup-plugin-postcss@^1.6.1: version "1.6.3" @@ -6031,12 +6135,12 @@ rollup-plugin-terser@^3.0.0: serialize-javascript "^1.5.0" terser "^3.8.2" -rollup-plugin-typescript2@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.18.1.tgz#921865828080a254c088c6bc181ca654e5ef73c6" - integrity sha512-aR2m5NCCAUV/KpcKgCWX6Giy8rTko9z92b5t0NX9eZyjOftCvcdDFa1C9Ze/9yp590hnRymr5hG0O9SAXi1oUg== +rollup-plugin-typescript2@^0.19.0: + version "0.19.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.3.tgz#713063233461765f030a2baa2640905c2656164f" + integrity sha512-lsRqfBCZhMl/tq9AT5YnQvzQWzXtnx3EQYFcHD72gul7nyyoOrzx5yCEH20smpw58v6UkHHZz03FbdLEPoHWjA== dependencies: - fs-extra "7.0.0" + fs-extra "7.0.1" resolve "1.8.1" rollup-pluginutils "2.3.3" tslib "1.9.3" From 24a5b35de1a94f7319561ad169a778ebbe78be89 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 22 Mar 2019 10:25:00 +0100 Subject: [PATCH 41/46] Proper fix --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 316eea23..760799c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mobx-react", - "version": "6.0.0-rc.3", + "version": "6.0.0-rc.4", "description": "React bindings for MobX. Create fully reactive components.", "source": "src/index.js", "main": "dist/mobx-react.js", @@ -20,7 +20,7 @@ "test:ts": "tsc -p test/ts", "test:travis": "npm run build && jest && npm run test:ts", "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts && shx cp dist/mobx-react.module.js dist/mobx-react.rn.module.js && sed -i 's/\"react-dom\"/\"react-native\"/g' dist/mobx-react.rn.module.js", - "bundle": "microbundle --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact --no-compress", + "bundle": "microbundle --jsx React.createElement --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact", "watch": "jest --watch" }, "author": "Michel Weststrate", From d1528956c7c7578a761f0cb53d4bd3aea1cd1ac8 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 29 May 2019 12:57:21 +0200 Subject: [PATCH 42/46] upgraded mobx-react-lite, processed some todo's --- .gitignore | 5 +++++ package.json | 2 +- src/index.js | 2 +- src/observer.js | 1 - src/propTypes.js | 1 - test/observer.test.js | 3 +-- test/ts/compile-ts.tsx | 17 +++++++++++------ yarn.lock | 8 ++++---- 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index d5f792cd..97ade4c7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ /.source.* yarn-error.log .DS_Store + +# files generated by V5 +/custom.* +/index.* +/native.* \ No newline at end of file diff --git a/package.json b/package.json index 760799c7..9f3b443b 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "typescript": "^2.6.0" }, "dependencies": { - "mobx-react-lite": "1.1.0" + "mobx-react-lite": "1.4.0" }, "files": [ "dist" diff --git a/src/index.js b/src/index.js index a3010ddf..8ace8529 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ if (!observable) throw new Error("mobx-react requires mobx to be available") if (typeof rdBatched === "function") configure({ reactionScheduler: rdBatched }) -export { useObservable, useComputed, useDisposable, useObserver, Observer } from "mobx-react-lite" +export { Observer, useAsObservableSource, useLocalStore } from "mobx-react-lite" export { observer, useStaticRendering } from "./observer" diff --git a/src/observer.js b/src/observer.js index bba203d7..3b5a62cb 100644 --- a/src/observer.js +++ b/src/observer.js @@ -97,7 +97,6 @@ export function observer(componentClass) { ) } - // TODO: still needed? (if func comp?) // Unwrap forward refs into `` component // we need to unwrap the render, because it is the inner render that needs to be tracked, // not the ForwardRef HoC diff --git a/src/propTypes.js b/src/propTypes.js index efaafecc..77c9dc8f 100644 --- a/src/propTypes.js +++ b/src/propTypes.js @@ -1,6 +1,5 @@ import { isObservableArray, isObservableObject, isObservableMap, untracked } from "mobx" -// TODO: can we just import this stuff? // Copied from React.PropTypes function createChainableTypeChecker(validate) { function checkType( diff --git a/test/observer.test.js b/test/observer.test.js index e1e8dd72..370670f0 100644 --- a/test/observer.test.js +++ b/test/observer.test.js @@ -296,8 +296,7 @@ test("observer component can be injected", () => { console.warn = baseWarn }) -// TODO: re-enable when /~https://github.com/mobxjs/mobx-react-lite/pull/75 -test.skip("correctly wraps display name of child component", () => { +test("correctly wraps display name of child component", () => { const A = observer( createClass({ displayName: "ObserverClass", diff --git a/test/ts/compile-ts.tsx b/test/ts/compile-ts.tsx index 10664c16..4bae72f3 100644 --- a/test/ts/compile-ts.tsx +++ b/test/ts/compile-ts.tsx @@ -2,7 +2,15 @@ import * as React from "react" import * as ReactDOM from "react-dom" import { Component } from "react" import * as PropTypes from "prop-types" -import { observer, Provider, propTypes, inject, Observer, disposeOnUnmount, useObservable } from "../../src" +import { + observer, + Provider, + propTypes, + inject, + Observer, + disposeOnUnmount, + useObservable +} from "../../src" import * as createClass from "create-react-class" @observer @@ -69,7 +77,6 @@ React.createElement(observer(T7), { pizza: 4 }) ReactDOM.render(, document.body) - class ProviderTest extends Component { render() { return ( @@ -238,7 +245,6 @@ class InjectSomeStores extends Component<{ x: any }, {}> { inject(({ x }) => ({ x }))(InjectSomeStores) -// TODO: not possible: App2.wrappedComponent { class T extends Component<{ x: number }> { render() { @@ -279,6 +285,5 @@ inject(({ x }) => ({ x }))(InjectSomeStores) return

{observable.test * 2}

} - - -} \ No newline at end of file + ; +} diff --git a/yarn.lock b/yarn.lock index 91dcffb5..900434ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4332,10 +4332,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" -mobx-react-lite@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.1.0.tgz#395930c85defff0f898b91170165617a1c783e0c" - integrity sha512-1/HwceljNxckfP+dDKlNWy7UR/1b/N2HbYSJt37dJHLrDiFPY6TZo+Ni+/xSl8bLJ1JE6+12sfZ1hqHbch/45A== +mobx-react-lite@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-1.4.0.tgz#193beb5fdddf17ae61542f65ff951d84db402351" + integrity sha512-5xCuus+QITQpzKOjAOIQ/YxNhOl/En+PlNJF+5QU4Qxn9gnNMJBbweAdEW3HnuVQbfqDYEUnkGs5hmkIIStehg== mobx@^5.0.0: version "5.9.0" From d0a3661434519674d798a0956156691b57a9abbc Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 29 May 2019 12:57:52 +0200 Subject: [PATCH 43/46] don't bundle mobx-react-lite, but depend on it --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9f3b443b..87f8af69 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test:ts": "tsc -p test/ts", "test:travis": "npm run build && jest && npm run test:ts", "build": "yarn bundle && shx cp src/index.d.ts dist/mobx-react.d.ts && shx cp dist/mobx-react.module.js dist/mobx-react.rn.module.js && sed -i 's/\"react-dom\"/\"react-native\"/g' dist/mobx-react.rn.module.js", - "bundle": "microbundle --jsx React.createElement --external mobx,react,react-dom --globals react-dom=ReactDOM,react=React --name mobxReact", + "bundle": "microbundle --jsx React.createElement --external mobx,react,react-dom,mobx-react-lite --globals react-dom=ReactDOM,react=React,mobx-react-lite=mobxReactLite --name mobxReact", "watch": "jest --watch" }, "author": "Michel Weststrate", From ce77e7ed527080ebc9859dfda601063208b0a125 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 29 May 2019 13:29:03 +0200 Subject: [PATCH 44/46] Added some tests for hooks --- test/hooks.test.js | 103 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 test/hooks.test.js diff --git a/test/hooks.test.js b/test/hooks.test.js new file mode 100644 index 00000000..1ebcc672 --- /dev/null +++ b/test/hooks.test.js @@ -0,0 +1,103 @@ +import React, { useState, useEffect } from "react" +import { observer, Observer, useLocalStore, useAsObservableSource } from "../src" +import { sleepHelper } from "." +import renderer, { act } from "react-test-renderer" + +test("computed properties react to props when using hooks", async () => { + const seen = [] + + const Child = ({ x }) => { + const props = useAsObservableSource({ x }) + const store = useLocalStore(() => ({ + get getPropX() { + return props.x + } + })) + + return {() => (seen.push(store.getPropX),
{store.getPropX}
)}
+ } + + const Parent = () => { + const [state, setState] = useState({ x: 0 }) + seen.push("parent") + useEffect(() => { + setTimeout(() => { + act(() => { + setState({ x: 2 }) + }) + }, 100) + }, []) + return + } + + let wrapper + act(() => { + wrapper = renderer.create() + }) + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 0 +
+`) + + await sleepHelper(400) + expect(seen).toEqual(["parent", 0, "parent", 2]) + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 2 +
+`) +}) + +test("computed properties result in double render when using observer instead of Observer", async () => { + const seen = [] + + const Child = observer(({ x }) => { + const props = useAsObservableSource({ x }) + const store = useLocalStore(() => ({ + get getPropX() { + return props.x + } + })) + + seen.push(store.getPropX) + return
{store.getPropX}
+ }) + + const Parent = () => { + const [state, setState] = useState({ x: 0 }) + seen.push("parent") + useEffect(() => { + setTimeout(() => { + act(() => { + setState({ x: 2 }) + }) + }, 100) + }, []) + return + } + + let wrapper + act(() => { + wrapper = renderer.create() + }) + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 0 +
+`) + + await sleepHelper(400) + expect(seen).toEqual([ + "parent", + 0, + "parent", + 2, + 2 // should contain "2" only once! But with hooks, one update is scheduled based the fact that props change, the other because the observable source changed. + ]) + expect(wrapper.toJSON()).toMatchInlineSnapshot(` +
+ 2 +
+`) +}) From 516a21ebd4656a29e2a98decd8307c7ad0b64d19 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 29 May 2019 15:20:25 +0200 Subject: [PATCH 45/46] Documentation improvements --- CHANGELOG.md | 231 +++++++++++++++++++++++++----------------------- README.md | 165 ++++++++++++++++++++++++---------- src/Provider.js | 12 +-- src/index.js | 2 +- 4 files changed, 243 insertions(+), 167 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 568af510..bd76215b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,25 +4,32 @@ **Breaking changes** -* The minimal supported version of React is 16.8.0 -* Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecated for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. -* `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. -* `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) -* Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. -* The third argument of custom `storesToProps` functions passed to `inject` is no longer available. -* `` no longer supports the deprecated `inject` property. -* Defining `shouldComponentUpdate` on `observer` based components is no longer supported -* `propTypes` is no longer exposed, use `PropTypes` instead -* `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. -* The `onError` global error handler has been removed. Use error boundaries instead. -* Improved dev tool names for `inject` wrapped components, see [#472](/~https://github.com/mobxjs/mobx-react/pull/472) by [SimeonC](/~https://github.com/SimeonC). Fixes [#466](/~https://github.com/mobxjs/mobx-react/issues/466) -* Dropped support for a build of mobx-react that doesn't target either `react-dom` or `react-native`. mobx-react doesn't need `react-dom` to be present, but to make sure your build tools don't fail, you might want to stub `react-dom` as an empty module. +- The minimal supported version of React is 16.8.0 +- Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecated for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. +- `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. +- `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) +- Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been designed to inject final values into the tree. (That is, constanted references, the injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning`flag for`Provider` has been dropped. +- The third argument of custom `storesToProps` functions passed to `inject` is no longer available. +- `` no longer supports the deprecated `inject` property. +- Defining `shouldComponentUpdate` on `observer` based components is no longer supported +- `propTypes` is no longer exposed, use `PropTypes` instead +- `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. +- The `onError` global error handler has been removed. Use error boundaries instead. +- Improved dev tool names for `inject` wrapped components, see [#472](/~https://github.com/mobxjs/mobx-react/pull/472) by [SimeonC](/~https://github.com/SimeonC). Fixes [#466](/~https://github.com/mobxjs/mobx-react/issues/466) +- Dropped support for a build of mobx-react that doesn't target either `react-dom` or `react-native`. mobx-react doesn't need `react-dom` to be present, but to make sure your build tools don't fail, you might want to stub `react-dom` as an empty module. +- The `componentWillReact` has been dropped +- The MobX-react devtools (either as package or browser plugin) are no longer supported. Instead, the following tools can be analyzed to analyze your mobx-react application: + - Visualizing re-rendering of components is now part of the standard React devtools + - The dependency tree of a compent tree can be inspected by showing the state of the `useObserver` hook in the React devtools (at the time of this release it displays as just `Object`, but the next iteration of the React devtools will support those properly) + - Spying on events can still be done with the [MobX-react browser plugin](TODO: link), through the [mobx-logger](TODO: link) package or manually by using the `spy` or `trace` utility from the mobx package. **Improvements** -* Using `PureComponent` is now _recommended_. -* For `observer` components, there will now be an additional `Observer` component in the tree. -* `componentWillReact` has been dropped +- Hook based components are now supported by mobx-react (in fact, the package is now implemented using hooks) +- Using `PureComponent` is now _recommended_. +- For `observer` based components, there will now be an additional `Observer` component in the tree. +- Two new hooks have been exposed, in case you want to manage local state in observable: `useLocalStore` and `useAsObservableSource`. +- `MobXProviderContext` is now exposed from the package, in case you want to consume the context used by `Provider` with a `useContext` hook. **Migration guide** @@ -30,115 +37,113 @@ TODO: answer FAQ: https://twitter.com/winterbe_/status/1108768407925780482 ### 5.4.3 -* Fixed [#612](/~https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case. +- Fixed [#612](/~https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case. ### 5.4.1 / 5.4.2 -* Fixed issue where `react-is` wasn't properly rolled-up into the package. Fixes [#608](/~https://github.com/mobxjs/mobx-react/issues/608) +- Fixed issue where `react-is` wasn't properly rolled-up into the package. Fixes [#608](/~https://github.com/mobxjs/mobx-react/issues/608) ### 5.4.0 -* Added support for forward refs, fixes [#602](/~https://github.com/mobxjs/mobx-react/issues/602) +- Added support for forward refs, fixes [#602](/~https://github.com/mobxjs/mobx-react/issues/602) ### 5.3.6 -* Fixed some additional issues around life-cycle patching, take 3. See [#536](/~https://github.com/mobxjs/mobx-react/pull/586) by [@xaviergonz](/~https://github.com/xaviergonz). Fixed [#579](/~https://github.com/mobxjs/mobx-react/issues/579) - +- Fixed some additional issues around life-cycle patching, take 3. See [#536](/~https://github.com/mobxjs/mobx-react/pull/586) by [@xaviergonz](/~https://github.com/xaviergonz). Fixed [#579](/~https://github.com/mobxjs/mobx-react/issues/579) ### 5.3.5 -* Fixed some additional issues around life-cycle patching, see [#583](/~https://github.com/mobxjs/mobx-react/pull/583) by [@xaviergonz](/~https://github.com/xaviergonz). Fixed [#581](/~https://github.com/mobxjs/mobx-react/issues/581) +- Fixed some additional issues around life-cycle patching, see [#583](/~https://github.com/mobxjs/mobx-react/pull/583) by [@xaviergonz](/~https://github.com/xaviergonz). Fixed [#581](/~https://github.com/mobxjs/mobx-react/issues/581) ### 5.3.4 -* Fixed unending recursing as a result of lifecylce patching. Fixes [#579](/~https://github.com/mobxjs/mobx-react/issues/579) through [#582](/~https://github.com/mobxjs/mobx-react/pull/582) by [@xaviergonz](/~https://github.com/xaviergonz) +- Fixed unending recursing as a result of lifecylce patching. Fixes [#579](/~https://github.com/mobxjs/mobx-react/issues/579) through [#582](/~https://github.com/mobxjs/mobx-react/pull/582) by [@xaviergonz](/~https://github.com/xaviergonz) ### 5.3.3 -* Fixed `Cannot read property 'forEach' of undefined` exception if `disposeOnUnmount` was called conditionally. [#578](/~https://github.com/mobxjs/mobx-react/pull/578) by [Jef Hellemans](/~https://github.com/JefHellemans) +- Fixed `Cannot read property 'forEach' of undefined` exception if `disposeOnUnmount` was called conditionally. [#578](/~https://github.com/mobxjs/mobx-react/pull/578) by [Jef Hellemans](/~https://github.com/JefHellemans) ### 5.3.2 -* Fixed: "process not defined", [#574](/~https://github.com/mobxjs/mobx-react/pull/574/) through [#576](/~https://github.com/mobxjs/mobx-react/pull/576/) by [@xaviergonz](/~https://github.com/xaviergonz) +- Fixed: "process not defined", [#574](/~https://github.com/mobxjs/mobx-react/pull/574/) through [#576](/~https://github.com/mobxjs/mobx-react/pull/576/) by [@xaviergonz](/~https://github.com/xaviergonz) ### 5.3.0 / 5.3.1 _5.3.0 was retracted as files were not generated correctly during publish_ -* Added `disposeOnUnmount` utility / decorator to call disposable properties (reaction, autorun, etc) automatically on `componentWillUnmount` -* Introduced new method to patch lifecycle methods which should be more compatible with for example arrow functions. - +- Added `disposeOnUnmount` utility / decorator to call disposable properties (reaction, autorun, etc) automatically on `componentWillUnmount` +- Introduced new method to patch lifecycle methods which should be more compatible with for example arrow functions. ### 5.2.8 -* Make sure `mobx-react` doesn't require `Object.assign` polyfill +- Make sure `mobx-react` doesn't require `Object.assign` polyfill ### 5.2.7 -* Fixed issue where React 16.5 printed a warning when using `Provider`, fixes [#545](/~https://github.com/mobxjs/mobx-react/issues/545) +- Fixed issue where React 16.5 printed a warning when using `Provider`, fixes [#545](/~https://github.com/mobxjs/mobx-react/issues/545) ### 5.2.6 -* Fixed bug in defining properties (although the bug had no known observable effect). Fixes [#540](/~https://github.com/mobxjs/mobx-react/issues/540) +- Fixed bug in defining properties (although the bug had no known observable effect). Fixes [#540](/~https://github.com/mobxjs/mobx-react/issues/540) ### 5.2.4 / 5.2.5 -* Improved compatibility with React-Hot-Loader, see [#522](/~https://github.com/mobxjs/mobx-react/pull/522) by [theKashey](/~https://github.com/theKashey). Fixes [#500](/~https://github.com/mobxjs/mobx-react/issues/500) +- Improved compatibility with React-Hot-Loader, see [#522](/~https://github.com/mobxjs/mobx-react/pull/522) by [theKashey](/~https://github.com/theKashey). Fixes [#500](/~https://github.com/mobxjs/mobx-react/issues/500) ### 5.2.3 -* Fixed problem with `Symbol` feature detection. By [@Strate](/~https://github.com/Strate) through [#501](/~https://github.com/mobxjs/mobx-react/pull/501). Fixes [#498](/~https://github.com/mobxjs/mobx-react/issues/498) and [#503](/~https://github.com/mobxjs/mobx-react/issues/503). +- Fixed problem with `Symbol` feature detection. By [@Strate](/~https://github.com/Strate) through [#501](/~https://github.com/mobxjs/mobx-react/pull/501). Fixes [#498](/~https://github.com/mobxjs/mobx-react/issues/498) and [#503](/~https://github.com/mobxjs/mobx-react/issues/503). ### 5.2.2 -* Polyfill `Symbol` if it doesn't exist. By [@Strate](/~https://github.com/Strate) through [#499](/~https://github.com/mobxjs/mobx-react/pull/499). +- Polyfill `Symbol` if it doesn't exist. By [@Strate](/~https://github.com/Strate) through [#499](/~https://github.com/mobxjs/mobx-react/pull/499). ### 5.2.1 -* Component `props` and `state` properties are now made observable during the instance creation. This restores the behavior from before 5.1.0 where `props` and `state` could safely be observed during mount. Actually it is now possible to do similar things in constructors as well. Fixes [#478](/~https://github.com/mobxjs/mobx-react/issues/478). Thanks [@Strate](/~https://github.com/Strate) for the idea and PR! [#496](/~https://github.com/mobxjs/mobx-react/pull/496). +- Component `props` and `state` properties are now made observable during the instance creation. This restores the behavior from before 5.1.0 where `props` and `state` could safely be observed during mount. Actually it is now possible to do similar things in constructors as well. Fixes [#478](/~https://github.com/mobxjs/mobx-react/issues/478). Thanks [@Strate](/~https://github.com/Strate) for the idea and PR! [#496](/~https://github.com/mobxjs/mobx-react/pull/496). ### 5.2.0 -* Added backward compatible support for MobX 5. -* Fixed components sometimes being displayed as `undefined` in mobx-devtools. See [#470](/~https://github.com/mobxjs/mobx-react/pull/470) by [@MauricioAndrades](/~https://github.com/MauricioAndrades) -* Removed unnecessary warning `@observer` was used both on a sub and super class. See [#492](/~https://github.com/mobxjs/mobx-react/pull/476) by [@skiritsis](/~https://github.com/skiritsis). _N.B. putting `@observer` on a super and subclass is still not an supported pattern, use @observer on subclasses only!_ +- Added backward compatible support for MobX 5. +- Fixed components sometimes being displayed as `undefined` in mobx-devtools. See [#470](/~https://github.com/mobxjs/mobx-react/pull/470) by [@MauricioAndrades](/~https://github.com/MauricioAndrades) +- Removed unnecessary warning `@observer` was used both on a sub and super class. See [#492](/~https://github.com/mobxjs/mobx-react/pull/476) by [@skiritsis](/~https://github.com/skiritsis). _N.B. putting `@observer` on a super and subclass is still not an supported pattern, use @observer on subclasses only!_ ### 5.1.2 -* Fixed regression bug in integration with devtools. Fixed through [#465](/~https://github.com/mobxjs/mobx-react/pull/465) by @le0nik +- Fixed regression bug in integration with devtools. Fixed through [#465](/~https://github.com/mobxjs/mobx-react/pull/465) by @le0nik ### 5.1.0 -* Added support for React 16.3, including support for the `getDerivedStateFromProps` life-cycle hook. MobX will no longer use `componentWillMount` hook internally, so that it can be used in `StrictMode` react as well. Fixes [#447](/~https://github.com/mobx/mobx-react/447) -* Static properties of a function component are now automatically hoisted when the component is wrapped by `observer`. Implements [#427](/~https://github.com/mobx/mobx-react/427) -* Misspelled export `componentByNodeRegistery` is now properly export as `componentByNodeRegistry` as well, please update consumers, the mispelled version will be dropped in the next major. Fixes [#421](/~https://github.com/mobx/mobx-react/421) -* Deprecated the support for the `inject` property on `Observer`, it is fundamentally broken and should not be used. Use `inject` on the enclosing component instead and grab the necessary stores from the closure. Fixes [#423](/~https://github.com/mobx/mobx-react/423) -* Added warning about using `observer` on a React.PureComponent, this will become an exception in the next major. Fixes [#309](/~https://github.com/mobx/mobx-react/309) -* Mobx-react will now print a warning when combining `observer` with a custom `shouldComponentUpdate` implementation. Fixes [#417](/~https://github.com/mobx/mobx-react/417) +- Added support for React 16.3, including support for the `getDerivedStateFromProps` life-cycle hook. MobX will no longer use `componentWillMount` hook internally, so that it can be used in `StrictMode` react as well. Fixes [#447](/~https://github.com/mobx/mobx-react/447) +- Static properties of a function component are now automatically hoisted when the component is wrapped by `observer`. Implements [#427](/~https://github.com/mobx/mobx-react/427) +- Misspelled export `componentByNodeRegistery` is now properly export as `componentByNodeRegistry` as well, please update consumers, the mispelled version will be dropped in the next major. Fixes [#421](/~https://github.com/mobx/mobx-react/421) +- Deprecated the support for the `inject` property on `Observer`, it is fundamentally broken and should not be used. Use `inject` on the enclosing component instead and grab the necessary stores from the closure. Fixes [#423](/~https://github.com/mobx/mobx-react/423) +- Added warning about using `observer` on a React.PureComponent, this will become an exception in the next major. Fixes [#309](/~https://github.com/mobx/mobx-react/309) +- Mobx-react will now print a warning when combining `observer` with a custom `shouldComponentUpdate` implementation. Fixes [#417](/~https://github.com/mobx/mobx-react/417) ### 5.0.0 -* Added compatibility with MobX 4.x. This version is not compatible with older Mobx versions +- Added compatibility with MobX 4.x. This version is not compatible with older Mobx versions ### 4.4.3 -* The exposed React Native build now uses commonjs, to prevent the need of further transpilation. Fixes [#428](/~https://github.com/mobxjs/mobx-react/issues/428) +- The exposed React Native build now uses commonjs, to prevent the need of further transpilation. Fixes [#428](/~https://github.com/mobxjs/mobx-react/issues/428) ### 4.4.2 -* Fixed issue with mobx-react not compiling on react-native due to the presence of a `.babelrc` file. Fixes [#415](/~https://github.com/mobxjs/mobx-react/issues/415) by [Ryan Rampersad](/~https://github.com/ryanmr) through [#416](/~https://github.com/mobxjs/mobx-react/pull/416) +- Fixed issue with mobx-react not compiling on react-native due to the presence of a `.babelrc` file. Fixes [#415](/~https://github.com/mobxjs/mobx-react/issues/415) by [Ryan Rampersad](/~https://github.com/ryanmr) through [#416](/~https://github.com/mobxjs/mobx-react/pull/416) ### 4.4.1 -* Fixed syntax error in 4.4.0 that escaped +- Fixed syntax error in 4.4.0 that escaped ### 4.4.0 -* `Observer` now supports render props, `render` and `inject`. See the updated readme. By [ZiYingMai](/~https://github.com/Sunshine168) through [#403](/~https://github.com/mobxjs/mobx-react/pull/403) -* Fixed: `NaN` is now considered to be equal to `NaN` when doing reconciliation. Fixes [#363](/~https://github.com/mobxjs/mobx-react/issues/363), by [Andrew Branch](/~https://github.com/andrewbranch) through [#402](/~https://github.com/mobxjs/mobx-react/pull/402) -* Improved typings of `Observer` component, by [Rafał Filipek](/~https://github.com/RafalFilipek) through [#376](/~https://github.com/mobxjs/mobx-react/pull/376) -* Fixed incorrect generation of component name, by [Andy Kogut](/~https://github.com/andykog) through [#368](/~https://github.com/mobxjs/mobx-react/pull/368) -* Lot of internal repo upgrades: Test suite is now in Jest, Prettier is used etc. +- `Observer` now supports render props, `render` and `inject`. See the updated readme. By [ZiYingMai](/~https://github.com/Sunshine168) through [#403](/~https://github.com/mobxjs/mobx-react/pull/403) +- Fixed: `NaN` is now considered to be equal to `NaN` when doing reconciliation. Fixes [#363](/~https://github.com/mobxjs/mobx-react/issues/363), by [Andrew Branch](/~https://github.com/andrewbranch) through [#402](/~https://github.com/mobxjs/mobx-react/pull/402) +- Improved typings of `Observer` component, by [Rafał Filipek](/~https://github.com/RafalFilipek) through [#376](/~https://github.com/mobxjs/mobx-react/pull/376) +- Fixed incorrect generation of component name, by [Andy Kogut](/~https://github.com/andykog) through [#368](/~https://github.com/mobxjs/mobx-react/pull/368) +- Lot of internal repo upgrades: Test suite is now in Jest, Prettier is used etc. ### 4.3.5 @@ -166,71 +171,71 @@ Improved module rollup setup, enabling better tree shaking. See #324 / #328 ### 4.2.2 -* Fixed check for stateless components, by @leader22, see #280 +- Fixed check for stateless components, by @leader22, see #280 ### 4.2.1 _Note: Due to pull / rebase issue the release commit is incorrect. This is the released [commit](/~https://github.com/mobxjs/mobx-react/commit/f1b3eefc5239cb451b317204fa8aad94b4dcfc2f)_ -* Reduced module size by 31% (switched to rollup.js). See #244 by @rossipedia -* Skip creation of `.wrappedInstance` reference for stateless components. See #254 by @farwayer -* Introduced global `onError` handler hook to be notified on errors thrown by `@observer` components. See #262 by @andykog -* Improved typescript typings of the exposed `propTypes`, See #263 by @panjiesw +- Reduced module size by 31% (switched to rollup.js). See #244 by @rossipedia +- Skip creation of `.wrappedInstance` reference for stateless components. See #254 by @farwayer +- Introduced global `onError` handler hook to be notified on errors thrown by `@observer` components. See #262 by @andykog +- Improved typescript typings of the exposed `propTypes`, See #263 by @panjiesw ### 4.2.0 -* Same as 4.2.1, but contained build issue and is unpublished +- Same as 4.2.1, but contained build issue and is unpublished ### 4.1.8 -* Undid change introduced in 4.1.4 where the lifecycle hooks were protected, as this breaks react-hot-loader.... Fixes #231 +- Undid change introduced in 4.1.4 where the lifecycle hooks were protected, as this breaks react-hot-loader.... Fixes #231 ### 4.1.7 -* Added support for React 15.5 (no deprecation warnings) and 16.0 (no proptypes / createClass), by @andykog, see #238. Fixes #233, #237 +- Added support for React 15.5 (no deprecation warnings) and 16.0 (no proptypes / createClass), by @andykog, see #238. Fixes #233, #237 ### 4.1.5 -* Improved typescript typings, fixes #223 +- Improved typescript typings, fixes #223 ### 4.1.4 -* Made lifecycle hooks used by mobx-react read-only to make sure they are not accidentally overwritten in component instances. Fixes, #195, #202. Note that they can still be defined, just make sure to define them on the prototype (`componentWillMount() {}`) instead of the instance (`componentWillMount = () => {}`). Which is best practice anyway. +- Made lifecycle hooks used by mobx-react read-only to make sure they are not accidentally overwritten in component instances. Fixes, #195, #202. Note that they can still be defined, just make sure to define them on the prototype (`componentWillMount() {}`) instead of the instance (`componentWillMount = () => {}`). Which is best practice anyway. ### 4.1.3 -* Fixed `ReactDOM.findDOMNode` exception when using react-test-runner, #216 +- Fixed `ReactDOM.findDOMNode` exception when using react-test-runner, #216 ### 4.1.2 -* Exceptions caught during render are now rethrown with proper stack, fixes #206 +- Exceptions caught during render are now rethrown with proper stack, fixes #206 ### 4.1.1 -* Exposed `wrappedInstance` and `wrappedComponent` in typings -* Fixed accidental use of `default` import from `mobx` package. +- Exposed `wrappedInstance` and `wrappedComponent` in typings +- Fixed accidental use of `default` import from `mobx` package. ### 4.1.0 -* Added support for MobX3. Note that using MobX3 changes the error semantics. If an `observer` component throws, it will no longer crash the app, but just log the exceptions instead. +- Added support for MobX3. Note that using MobX3 changes the error semantics. If an `observer` component throws, it will no longer crash the app, but just log the exceptions instead. ### 4.0.4 -* Introduced `suppressChangedStoreWarning` to optionally supresss change store warnings, by @dropfen, see #182, #183 +- Introduced `suppressChangedStoreWarning` to optionally supresss change store warnings, by @dropfen, see #182, #183 ### 4.0.3 -* Fixed issue where userland componentWilMount was run before observer componentWillMount +- Fixed issue where userland componentWilMount was run before observer componentWillMount ### 4.0.2 -* Fixed order of `inject` overloads, see #169 -* Fixed import of `mobx` when using Webpack without commonjs plugin, see: #168 +- Fixed order of `inject` overloads, see #169 +- Fixed import of `mobx` when using Webpack without commonjs plugin, see: #168 ### 4.0.1 -* Improved typings, by @timmolendijk, fixes #164, #166 -* Fixed `inject` signature in readme, by @farwayer +- Improved typings, by @timmolendijk, fixes #164, #166 +- Fixed `inject` signature in readme, by @farwayer ### 4.0.0 @@ -246,8 +251,8 @@ In general this should cause no trouble, as typically mutable data in mobx based If you need to pass in a deeply modified object and still want to make sure to cause a re-render, either -* make sure the object / array is an observable -* do not decorate your component with `observer`, but use `Observer` regions instead (see below) +- make sure the object / array is an observable +- do not decorate your component with `observer`, but use `Observer` regions instead (see below) See [#160](/~https://github.com/mobxjs/mobx-react/issues/160) for more details. @@ -338,89 +343,89 @@ For more info see the related [discussion](/~https://github.com/mobxjs/mobx-react/ #### Other improvements -* If `mobx` and `mobx-react` are used in combination, all reactions are run as part of React's batched updates. This minimizes the work of the reconciler, guarantees optimal rendering order of components (if the rendering was not triggered from within a React event). Tnx @gkaemmer for the suggestion. -* It is now possible to directly define `propTypes` and `defaultProps` on components wrapped with `inject` (or `observer(["stores"])`) again, see #120, #142. Removed the warnings for this, and instead improved the docs. -* Clean up data subscriptions if an error is thrown by an `observer` component, see [#134](/~https://github.com/mobxjs/mobx-react/pull/134) by @andykog -* export `PropTypes` as well in typescript typings, fixes #153 -* Add react as a peer dependency -* Added minified browser build: `index.min.js`, fixes #147 -* Generate better component names when using `inject` +- If `mobx` and `mobx-react` are used in combination, all reactions are run as part of React's batched updates. This minimizes the work of the reconciler, guarantees optimal rendering order of components (if the rendering was not triggered from within a React event). Tnx @gkaemmer for the suggestion. +- It is now possible to directly define `propTypes` and `defaultProps` on components wrapped with `inject` (or `observer(["stores"])`) again, see #120, #142. Removed the warnings for this, and instead improved the docs. +- Clean up data subscriptions if an error is thrown by an `observer` component, see [#134](/~https://github.com/mobxjs/mobx-react/pull/134) by @andykog +- export `PropTypes` as well in typescript typings, fixes #153 +- Add react as a peer dependency +- Added minified browser build: `index.min.js`, fixes #147 +- Generate better component names when using `inject` --- ### 3.5.9 -* Print warning when `inject` and `observer` are used in the wrong order, see #146, by @delaetthomas +- Print warning when `inject` and `observer` are used in the wrong order, see #146, by @delaetthomas ### 3.5.8 -* Fixed issue where `props` where not passed properly to components in very rare cases. Also fixed #115 +- Fixed issue where `props` where not passed properly to components in very rare cases. Also fixed #115 ### 3.5.7 -* Bundles are no longer minified, fixes #127 +- Bundles are no longer minified, fixes #127 ### 3.5.6 -* Export `propTypes` as `PropTypes`, like React (@andykog, ##117) +- Export `propTypes` as `PropTypes`, like React (@andykog, ##117) ### 3.5.5 -* Removed `experimental` status of `inject` / `Provider`. Official feature now. -* Fixed hot-reloading issue, #101 +- Removed `experimental` status of `inject` / `Provider`. Official feature now. +- Fixed hot-reloading issue, #101 ### 3.5.4 -* Introduced `wrappedInstance` by @rossipedia on `inject` decorated HOC's, see /~https://github.com/mobxjs/mobx-react/pull/90/ -* print warnings when assign values to `propTypes`, `defaultProps`, or `contextTypes` of a HOC. (by @jtraub, see /~https://github.com/mobxjs/mobx-react/pull/88/) -* Static properties are now hoisted to HoC components when, #92 -* If `inject` is used incombination with a function, the object return from the function will now be merged into the `nextProps` instead of replacing them, #80 -* Always do propType checking untracked, partially fixes #56, #305 +- Introduced `wrappedInstance` by @rossipedia on `inject` decorated HOC's, see /~https://github.com/mobxjs/mobx-react/pull/90/ +- print warnings when assign values to `propTypes`, `defaultProps`, or `contextTypes` of a HOC. (by @jtraub, see /~https://github.com/mobxjs/mobx-react/pull/88/) +- Static properties are now hoisted to HoC components when, #92 +- If `inject` is used incombination with a function, the object return from the function will now be merged into the `nextProps` instead of replacing them, #80 +- Always do propType checking untracked, partially fixes #56, #305 ### 3.5.3 -* Fixed error `Cannot read property 'renderReporter' of undefined` (#96) +- Fixed error `Cannot read property 'renderReporter' of undefined` (#96) ### 3.5.2 -* Added propTypes.observableArrayOf and propTypes.arrayOrObservableArrayOf (#91) +- Added propTypes.observableArrayOf and propTypes.arrayOrObservableArrayOf (#91) ### 3.5.1 -* Fixed regression #85, changes caused by the constructor results in inconsistent rendering (N.B.: that is un-idiomatic React usage and React will warn about this!) +- Fixed regression #85, changes caused by the constructor results in inconsistent rendering (N.B.: that is un-idiomatic React usage and React will warn about this!) ### 3.5.0 -* Introduced `inject("store1", "store2")(component)` as alternative syntax to inject stores. Should address #77, #70 -* Introduced the `wrappedComponent` property on injected higher order components, addresses #70, #72 -* Fixed #76: error when no stores are provided through context -* Added typings for devTools related features (@benjamingr). -* Added MobX specific propTypes (@mattruby) -* Merged #44, fixes #73: don't re-render if component was somehow unmounted +- Introduced `inject("store1", "store2")(component)` as alternative syntax to inject stores. Should address #77, #70 +- Introduced the `wrappedComponent` property on injected higher order components, addresses #70, #72 +- Fixed #76: error when no stores are provided through context +- Added typings for devTools related features (@benjamingr). +- Added MobX specific propTypes (@mattruby) +- Merged #44, fixes #73: don't re-render if component was somehow unmounted ### 3.4.0 -* Introduced `Provider` / context support (#53 / MobX #300) -* Fixed issues when using devtools with IE. #66 (By @pvasek) +- Introduced `Provider` / context support (#53 / MobX #300) +- Fixed issues when using devtools with IE. #66 (By @pvasek) ### 3.3.1 -* Added typescript typings form `mobx-react/native` and `mobx-react/custom` -* Fixed #63: error when using stateless function components when using babel and typescript +- Added typescript typings form `mobx-react/native` and `mobx-react/custom` +- Fixed #63: error when using stateless function components when using babel and typescript ### 3.3.0 -* Upgraded to MobX 2.2.0 +- Upgraded to MobX 2.2.0 ### 3.2.0 -* Added support for react-native 0.25 and higher. By @danieldunderfelt. +- Added support for react-native 0.25 and higher. By @danieldunderfelt. ### 3.1.0 -* Added support for custom renderers (without DOM), use: `mobx-react/custom` as import fixes #42 -* Fixed some issues with rollup #43 -* Minor optimization +- Added support for custom renderers (without DOM), use: `mobx-react/custom` as import fixes #42 +- Fixed some issues with rollup #43 +- Minor optimization ### 3.0.5 diff --git a/README.md b/README.md index ca066f04..40123ae8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![CDNJS](https://img.shields.io/cdnjs/v/mobx-react.svg)](https://cdnjs.com/libraries/mobx-react) Package with React component wrapper for combining React with MobX. -Exports the `observer` decorator and some development utilities. +Exports the `observer` decorator and other utilities. For documentation, see the [MobX](https://mobxjs.github.io/mobx) project. This package supports both React and React Native. @@ -13,64 +13,52 @@ This package supports both React and React Native. There are currently two actively maintained versions of mobx-react: -| NPM Version | Supported React versions | Supports hook based components | -| --- | --- | -- | -| v6 | 16.8.0 and higher | Yes | -| v5 | 0.13 and higher | No, but it is possible to use `` sections inside hook based components | +| NPM Version | Supported React versions | Supports hook based components | +| ----------- | ------------------------ | -------------------------------------------------------------------------------- | +| v6 | 16.8.0 and higher | Yes | +| v5 | 0.13 and higher | No, but it is possible to use `` sections inside hook based components | The V5 documentation can be found in the [README_v5](README_v5.md). Version 6 is a repackage of the [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite) package + following features from the `mobx-react@5` package added: -* Support for class based components for `observer` and `@observer` -* `Provider / inject` to pass stores around (but consider to use `React.createContext` instead) -* `PropTypes` to describe observable based property checkers (but consider to use TypeScript instead) -* The `disposeOnUnmount` utility / decorator to easily clean up resources such as reactions created in your class based components. + +- Support for class based components for `observer` and `@observer` +- `Provider / inject` to pass stores around (but consider to use `React.createContext` instead) +- `PropTypes` to describe observable based property checkers (but consider to use TypeScript instead) +- The `disposeOnUnmount` utility / decorator to easily clean up resources such as reactions created in your class based components. ## Installation `npm install mobx-react --save` -Or CDN: https://unpkg.com/mobx-react (namespace: `mobxReact`) +Or CDN: https://unpkg.com/mobx-react (UMD namespace: `mobxReact`) ```javascript import { observer } from "mobx-react" -// - or, for custom renderers without DOM: - -import { observer } from "mobx-react/custom" ``` This package provides the bindings for MobX and React. See the [official documentation](http://mobxjs.github.io/mobx/intro/overview.html) for how to get started. -If you are using [React hooks](https://reactjs.org/docs/hooks-intro.html) with latest React 16.7 and you like living on the bleeding edge then have a look at the new [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite). +For greenfield projects you might want to consider to use [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite), if you intend to only use function based components. `React.createContext` can be used to pass stores around. ## API documentation Please check [mobx.js.org](https://mobx.js.org) for the general documentation. The documentation below highlights some specifics. -### observer(componentClass) +### `observer(componentClass)` Function (and decorator) that converts a React component definition, React component class or stand-alone render function into a reactive component, which tracks which observables are used by `render` and automatically re-renders the component when one of these values changes. -Apart from observables passed/injected in or defined inside an `observer` component, `this.props` and `this.state` are also observables themselves, so the component will react to all changes in props and state that are used by `render`. +When using component classes, `this.props` and `this.state` will be made observables, so the component will react to all changes in props and state that are used by `render`. +Note that `observer` automatically applies `React.memo` to any component you pass to it. See the [MobX](https://mobxjs.github.io/mobx/refguide/observer-component.html) documentation for more details. ```javascript import { observer } from "mobx-react" -// ---- ES5 syntax ---- - -const TodoView = observer( - React.createClass({ - displayName: "TodoView", - render() { - return
{this.props.todo.title}
- } - }) -) - // ---- ES6 syntax ---- - const TodoView = observer( class TodoView extends React.Component { render() { @@ -79,8 +67,7 @@ const TodoView = observer( } ) -// ---- ESNext syntax with decorators ---- - +// ---- ESNext syntax with decorator syntax enabled ---- @observer class TodoView extends React.Component { render() { @@ -89,7 +76,6 @@ class TodoView extends React.Component { } // ---- or just use function components: ---- - const TodoView = observer(({ todo }) =>
{todo.title}
) ``` @@ -140,6 +126,88 @@ React.render(, document.body) person.name = "Mike" // will cause the Observer region to re-render ``` +### `useLocalStore` hook + +Local observable state can be introduced by using the `useLocalStore` hook, that runs once to create an observable store. A quick example would be: + +```javascript +import { useLocalStore, useObserver } from "mobx-react-lite" + +const Todo = () => { + const todo = useLocalStore(() => ({ + title: "Test", + done: true, + toggle() { + this.done = !this.done + } + })) + + return useObserver(() => ( +

+ {todo.title} {todo.done ? "[DONE]" : "[TODO]"} +

+ )) +}) +``` + +When using `useLocalStore`, all properties of the returned object will be made observable automatically, getters will be turned into computed properties, and methods will be bound to the store and apply mobx transactions automatically. If new class instances are returned from the initializer, they will be kept as is. + +It is important to realize that the store is created only once! It is not possible to specify dependencies to force re-creation, _nor should you directly be referring to props for the initializer function_, as changes in those won't propagate. + +Instead, if your store needs to refer to props (or `useState` based local state), the `useLocalStore` should be combined with the `useAsObservableSource` hook, see below. + +Note that in many cases it is possible to extract the initializer function to a function outside the component definition. Which makes it possible to test the store itself in a more straight-forward manner, and avoids creating the initializer closure on each re-render. + +_Note: using `useLocalStore` is mostly beneficial for really complex local state, or to obtain more uniform code base. Note that using a local store might conflict with future React features like concurrent rendering._ + +### `useAsObservableSource` hook + +The `useAsObservableSource` hook can be used to turn any set of values into an observable object that has a stable reference (the same object is returned every time from the hook). +The goal of this hook is to trap React primitives such as props or state (which are not observable themselves) into a local, observable object +so that the `store` or any reactions created by the component can safely refer to it, and get notified if any of the values change. + +The value passed to `useAsObservableSource` should always be an object, and is made only shallowly observable. + +The object returned by `useAsObservableSource`, although observable, should be considered read-only for all practical purposes. +Use `useLocalStore` instead if you want to create local, observable, mutable, state. + +Warning: \_the return value of `useAsObservableSource` should never be deconstructed! So, don't write: `const {multiplier} = useAsObservableSource({ multiplier })`!\_useObservable + +The following example combines all concepts mentioned so far: `useLocalStore` to create a local store, and `useAsObservableProps` to make the props observable, so that it can be uses savely in `store.multiplied`: + +```typescript +import { observer, useAsObservableSource, useLocalStore } from "mobx-react-lite" + +interface CounterProps { + multiplier: number +} + +export const Counter = observer(function Counter(props: CounterProps) { + const observableProps = useAsObservableSource(props) + const store = useLocalStore(() => ({ + count: 10, + get multiplied() { + return observableProps.multiplier * this.count + }, + inc() { + this.count += 1 + } + })) + + return ( +
+ Multiplied count: {store.multiplied} + +
+ ) +}) +``` + +Note that we cannot directly use `props.multiplier` in `multiplied` in the above example, it would not cause the `multiplied` to be invalidated, as it is not observable. Recreating the local store would also not have the desired state, as it would be a shame if it lost its local state such as `count`. + +_Performance tip: for optimal performance it is recommend to not use `useAsObservableSource` together on the same component as `observer`, as it might trigger double renderings. In those cases, use `` instead._ ### Server Side Rendering with `useStaticRendering` @@ -150,7 +218,7 @@ To avoid leaking memory, call `useStaticRendering(true)` when using server side ```javascript import { useStaticRendering } from "mobx-react" -useStaticRendering(true); +useStaticRendering(true) ``` This makes sure the component won't try to react to any future data changes. @@ -173,18 +241,20 @@ TL;DR: the conceptual distinction makes a lot of sense when using MobX as well, MobX-react provides the following additional `PropTypes` which can be used to validate against MobX structures: -* `observableArray` -* `observableArrayOf(React.PropTypes.number)` -* `observableMap` -* `observableObject` -* `arrayOrObservableArray` -* `arrayOrObservableArrayOf(React.PropTypes.number)` -* `objectOrObservableObject` +- `observableArray` +- `observableArrayOf(React.PropTypes.number)` +- `observableMap` +- `observableObject` +- `arrayOrObservableArray` +- `arrayOrObservableArrayOf(React.PropTypes.number)` +- `objectOrObservableObject` Use `import { PropTypes } from "mobx-react"` to import them, then use for example `PropTypes.observableArray` ### `Provider` and `inject` +_Note: usually there is no need anymore to use `Provider` / `inject` in new code bases; most of its features are now covered by `React.createContext`._ + `Provider` is a component that can pass stores (or other stuff) using React's context mechanism to child components. This is useful if you have things that you don't want to pass through multiple layers of components explicitly. @@ -225,10 +295,11 @@ class MessageList extends React.Component { Notes: -* If a component asks for a store and receives a store via a property with the same name, the property takes precedence. Use this to your advantage when testing! -* Values provided through `Provider` should be final, to avoid issues like mentioned in [React #2517](/~https://github.com/facebook/react/issues/2517) and [React #3973](/~https://github.com/facebook/react/pull/3973), where optimizations might stop the propagation of new context. Instead, make sure that if you put things in `context` that might change over time, that they are `@observable` or provide some other means to listen to changes, like callbacks. However, if your stores will change over time, like an observable value of another store, MobX will warn you. To suppress that warning explicitly, you can use `suppressChangedStoreWarning={true}` as a prop at your own risk. -* When using both `@inject` and `@observer`, make sure to apply them in the correct order: `observer` should be the inner decorator, `inject` the outer. There might be additional decorators in between. -* The original component wrapped by `inject` is available as the `wrappedComponent` property of the created higher order component. +- It is possible to read the stores provided by `Provider` using `React.useContext`, by using the `MobXProviderContext` context that can be imported from `mobx-react`. +- If a component asks for a store and receives a store via a property with the same name, the property takes precedence. Use this to your advantage when testing! +- Values provided through `Provider` should be final, to avoid issues like mentioned in [React #2517](/~https://github.com/facebook/react/issues/2517) and [React #3973](/~https://github.com/facebook/react/pull/3973), where optimizations might stop the propagation of new context. Instead, make sure that if you put things in `context` that might change over time, that they are `@observable` or provide some other means to listen to changes, like callbacks. However, if your stores will change over time, like an observable value of another store, MobX will warn you. To suppress that warning explicitly, you can use `suppressChangedStoreWarning={true}` as a prop at your own risk. +- When using both `@inject` and `@observer`, make sure to apply them in the correct order: `observer` should be the inner decorator, `inject` the outer. There might be additional decorators in between. +- The original component wrapped by `inject` is available as the `wrappedComponent` property of the created higher order component. #### Inject as function @@ -286,7 +357,7 @@ ReactDOM.render(, document.body) _N.B. note that in this *specific* case neither `NameDisplayer` nor `UserNameDisplayer` needs to be decorated with `observer`, since the observable dereferencing is done in the mapper function_ -#### Using `propTypes` and `defaultProps` and other static properties in combination with `inject` +#### Using `PropTypes` and `defaultProps` and other static properties in combination with `inject` Inject wraps a new component around the component you pass into it. This means that assigning a static property to the resulting component, will be applied to the HoC, and not to the original component. @@ -411,15 +482,13 @@ class SomeComponent extends React.Component { ## DevTools -`mobx-react@6` and higher are no longer compatible with the mobx-react-devtools. -That is, the MobX react devtools will no longer show render timings or dependency trees of the component. -The reason is that the standard React devtools are no also capable of highlighting re-rendering components. +`mobx-react@6` and higher are no longer compatible with the mobx-react-devtools. +That is, the MobX react devtools will no longer show render timings or dependency trees of the component. +The reason is that the standard React devtools are also capable of highlighting re-rendering components. And the dependency tree of a component can now be inspected by the standard devtools as well, as shown in the image below: ![hooks.png](hooks.png) -The event spy will still work as is. - ## FAQ **Should I use `observer` for each component?** diff --git a/src/Provider.js b/src/Provider.js index 805b20ba..7a07db72 100644 --- a/src/Provider.js +++ b/src/Provider.js @@ -25,11 +25,13 @@ export class Provider extends Component { } static getDerivedStateFromProps(nextProps, prevState) { - const newStores = { ...prevState, ...grabStores(nextProps) } // spread in prevState for the context based stores - if (!shallowEqual(prevState, newStores)) - throw new Error( - "MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" - ) + if (process.env.NODE_ENV !== "production") { + const newStores = { ...prevState, ...grabStores(nextProps) } // spread in prevState for the context based stores + if (!shallowEqual(prevState, newStores)) + throw new Error( + "MobX Provider: The set of provided stores has changed. Please avoid changing stores as the change might not propagate to all children" + ) + } return prevState // because they didn't change, remember! } } diff --git a/src/index.js b/src/index.js index 8ace8529..87008ac5 100644 --- a/src/index.js +++ b/src/index.js @@ -11,7 +11,7 @@ export { Observer, useAsObservableSource, useLocalStore } from "mobx-react-lite" export { observer, useStaticRendering } from "./observer" -export { Provider } from "./Provider" +export { Provider, MobXProviderContext } from "./Provider" export { inject } from "./inject" export { disposeOnUnmount } from "./disposeOnUnmount" export { PropTypes } from "./propTypes" From d5c832f32471ec1650ae0ab3b2b033a26f818ffe Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 29 May 2019 16:40:36 +0200 Subject: [PATCH 46/46] Some changelog / readme improvements --- CHANGELOG.md | 6 +----- README.md | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd76215b..1ef7c9e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,7 +21,7 @@ - The MobX-react devtools (either as package or browser plugin) are no longer supported. Instead, the following tools can be analyzed to analyze your mobx-react application: - Visualizing re-rendering of components is now part of the standard React devtools - The dependency tree of a compent tree can be inspected by showing the state of the `useObserver` hook in the React devtools (at the time of this release it displays as just `Object`, but the next iteration of the React devtools will support those properly) - - Spying on events can still be done with the [MobX-react browser plugin](TODO: link), through the [mobx-logger](TODO: link) package or manually by using the `spy` or `trace` utility from the mobx package. + - Spying on events can still be done with the [MobX-react browser plugin](/~https://github.com/mobxjs/mobx-devtools), through the [mobx-logger](/~https://github.com/winterbe/mobx-logger) package or manually by using the `spy` or `trace` utility from the mobx package. **Improvements** @@ -31,10 +31,6 @@ - Two new hooks have been exposed, in case you want to manage local state in observable: `useLocalStore` and `useAsObservableSource`. - `MobXProviderContext` is now exposed from the package, in case you want to consume the context used by `Provider` with a `useContext` hook. -**Migration guide** - -TODO: answer FAQ: https://twitter.com/winterbe_/status/1108768407925780482 - ### 5.4.3 - Fixed [#612](/~https://github.com/mobxjs/mobx-react/issues/612), `contextType` was hoisted by `inject`, which shouldn't the case. diff --git a/README.md b/README.md index 40123ae8..1db35e11 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ There are currently two actively maintained versions of mobx-react: The V5 documentation can be found in the [README_v5](README_v5.md). +Both mobx-react 5 and 6 are compatible with mobx 4 and 5 + Version 6 is a repackage of the [mobx-react-lite](/~https://github.com/mobxjs/mobx-react-lite) package + following features from the `mobx-react@5` package added: - Support for class based components for `observer` and `@observer`

-P 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 literal 0 HcmV?d00001 From 2f6c76ee811f761bde41f8f1bd5e603ce6b769e2 Mon Sep 17 00:00:00 2001 From: Daniel K Date: Tue, 19 Feb 2019 16:22:03 +0100 Subject: [PATCH 35/46] Apply suggestions from code review Co-Authored-By: mweststrate --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 911370ac..ee96265c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,8 @@ **Breaking changes** -* The minimum support version of React is 16.8.0 -* Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecate for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. +* The minimal supported version of React is 16.8.0 +* Killed the possibility to directly pass store names to `observer`. Always use `inject` instead. (This was deprecated for a long time already). `observer(["a", "b"], component)` should now be written as `inject("a", "b")(component)`. * `observer` components no longer automatically recover from errors (to prevent potential memory leaks). Instead, this is the responsibility of error boundaries. * `inject` now supports ref forwarding. As such, the `.wrappedInstance` property has been removed since refs can be used instead. (Fixes [#616](/~https://github.com/mobxjs/mobx-react/issues/616) (See also [#619](/~https://github.com/mobxjs/mobx-react/pull/619) by [42shadow42](/~https://github.com/42shadow42)) * Changing the set of stores in `Provider` is no longer supported and while throw a hard error (this was a warning before), as the model of `Provider` / `inject` has always been to inject final values into the tree. (That is, fixed references, injected objects themselves can be stateful without problem). If you want to dynamically swap what is provided into the tree, use `React.createContext` instead of `Provider` / `inject`. The suppressChangedStoreWarning` flag for `Provider` has been dropped. From 96c9102837de5b773e72ef3d6e0892e8e4282900 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Sun, 10 Mar 2019 22:42:38 +0100 Subject: [PATCH 36/46] Fixed changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee96265c..cb98f655 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * `propTypes` is no longer exposed, use `PropTypes` instead * `disposeOnUnmount` now only supports direct subclasses of `React.Component` and `React.PureComponent`. This prevents several unreliable edge cases that silently leaked memory before. Either only extend React.(Pure)Component when using `disposeOnUnmount`, or manually clean up stuff in `componentWillUnmount`. * The `onError` global error handler has been removed. Use error boundaries instead. +* Improved dev tool names for `inject` wrapped components, see [#472](/~https://github.com/mobxjs/mobx-react/pull/472) by [SimeonC](/~https://github.com/SimeonC). Fixes [#466](/~https://github.com/mobxjs/mobx-react/issues/466) **Improvements** From 5116529c0812bbe177bfe595bf24e65b527aeecc Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 21 Mar 2019 14:06:03 +0100 Subject: [PATCH 37/46] Removed hoist-statics dependency --- package.json | 1 - src/inject.js | 5 ++--- src/observer.js | 1 - src/utils/utils.js | 25 +++++++++++++++++++++++++ yarn.lock | 9 +-------- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 30611bc2..45fb15f8 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "typescript": "^2.6.0" }, "dependencies": { - "hoist-non-react-statics": "^3.0.0", "mobx-react-lite": "1.1.0" }, "files": [ diff --git a/src/inject.js b/src/inject.js index c282d58e..a2cbac26 100644 --- a/src/inject.js +++ b/src/inject.js @@ -1,7 +1,6 @@ import React, { Component, createElement } from "react" -import hoistStatics from "hoist-non-react-statics" import { observer } from "./observer" -import { isStateless } from "./utils/utils" +import { isStateless, copyStaticProperties } from "./utils/utils" import { MobXProviderContext } from "./Provider" /** @@ -33,7 +32,7 @@ function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) React.createElement(Injector, { ...props, forwardRef: ref }) ) // Static fields from component should be visible on the generated Injector - hoistStatics(InjectHocRef, component) + copyStaticProperties(component, InjectHocRef) InjectHocRef.wrappedComponent = component InjectHocRef.displayName = displayName return InjectHocRef diff --git a/src/observer.js b/src/observer.js index c29b3bab..bba203d7 100644 --- a/src/observer.js +++ b/src/observer.js @@ -1,5 +1,4 @@ import React, { Component, PureComponent, forwardRef } from "react" -import hoistStatics from "hoist-non-react-statics" import { createAtom, _allowStateChanges } from "mobx" import { observer as observerLite, diff --git a/src/utils/utils.js b/src/utils/utils.js index 641ce6d9..0c7a9243 100644 --- a/src/utils/utils.js +++ b/src/utils/utils.js @@ -47,3 +47,28 @@ function is(x, y) { return x !== x && y !== y } } + +// based on /~https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js +const hoistBlackList = { + $$typeof: 1, + render: 1, + compare: 1, + type: 1, + childContextTypes: 1, + contextType: 1, + contextTypes: 1, + defaultProps: 1, + getDefaultProps: 1, + getDerivedStateFromError: 1, + getDerivedStateFromProps: 1, + mixins: 1, + propTypes: 1 +} + +export function copyStaticProperties(base, target) { + Object.keys(base).forEach(key => { + if (base.hasOwnProperty(key) && !hoistBlackList[key]) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)) + } + }) +} diff --git a/yarn.lock b/yarn.lock index cb351541..e0e606c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2740,13 +2740,6 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -hoist-non-react-statics@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" - integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== - dependencies: - react-is "^16.7.0" - hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -5581,7 +5574,7 @@ react-dom@^16.8.2: prop-types "^15.6.2" scheduler "^0.13.2" -react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.8.1: version "16.8.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.1.tgz#a80141e246eb894824fb4f2901c0c50ef31d4cdb" integrity sha512-ioMCzVDWvCvKD8eeT+iukyWrBGrA3DiFYkXfBsVYIRdaREZuBjENG+KjrikavCLasozqRWTwFUagU/O4vPpRMA== From 464035b1f0a5367a6550bb3b590de62facdead78 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 21 Mar 2019 14:12:23 +0100 Subject: [PATCH 38/46] Fixed several typescript issues --- package.json | 12 ++++++------ src/index.d.ts | 17 +++++++++-------- src/index.js | 9 +-------- test/ts/compile-ts.tsx | 14 +++++++++++++- test/ts/tsconfig.json | 2 +- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 45fb15f8..2fdfcadb 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "description": "React bindings for MobX. Create fully reactive components.", "source": "src/index.js", "main": "dist/mobx-react.js", - "jsnext:main": "dist/mobx-react.mjs", - "umd:main": "dist/core.umd.js", - "unpkg": "dist/core.umd.js", - "module": "dist/mobx-react.mjs", - "react-native": "dist/mobx-react.mjs", - "typings": "dist/mobx-react.d.ts", + "jsnext:main": "dist/mobx-react.module.js", + "umd:main": "dist/mobx-react.umd.js", + "unpkg": "dist/mobx-react.umd.js", + "module": "dist/mobx-react.module.js", + "react-native": "dist/mobx-react.module.js", + "types": "dist/mobx-react.d.ts", "repository": { "type": "git", "url": "/~https://github.com/mobxjs/mobx-react.git" diff --git a/src/index.d.ts b/src/index.d.ts index aeba5266..a979e4b1 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -3,6 +3,15 @@ */ import * as React from "react" +export { + useObservable, + useComputed, + useDisposable, + IObserverOptions, + useObserver, + Observer +} from "mobx-react-lite" + export type IReactComponent