@samitouri / QOS-React / commits / a4d122f2d1

Add <ViewTransition> Component (#31975)

This will provide the opt-in for using [View Transitions](https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API) in React. View Transitions only trigger for async updates like `startTransition`, `useDeferredValue`, Actions or `<Suspense>` revealing from fallback to content. Synchronous updates provide an opt-out but also guarantee that they commit immediately which View Transitions can't. There's no need to opt-in to View Transitions at the "cause" side like event handlers or actions. They don't know what UI will change and whether that has an animated transition described. Conceptually the `<ViewTransition>` component is like a DOM fragment that transitions its children in its own isolate/snapshot. The API works by wrapping a DOM node or inner component: ```js import {ViewTransition} from 'react'; <ViewTransition><Component /></ViewTransition> ``` The default is `name="auto"` which will automatically assign a `view-transition-name` to the inner DOM node. That way you can add a View Transition to a Component without controlling its DOM nodes styling otherwise. A difference between this and the browser's built-in `view-transition-name: auto` is that switching the DOM nodes within the `<ViewTransition>` component preserves the same name so this example cross-fades between the DOM nodes instead of causing an exit and enter: ```js <ViewTransition>{condition ? <ComponentA /> : <ComponentB />}</ViewTransition> ``` This becomes especially useful with `<Suspense>` as this example cross-fades between Skeleton and Content: ```js <ViewTransition> <Suspense fallback={<Skeleton />}> <Content /> </Suspense> </ViewTransition> ``` Where as this example triggers an exit of the Skeleton and an enter of the Content: ```js <Suspense fallback={<ViewTransition><Skeleton /></ViewTransition>}> <ViewTransition><Content /></ViewTransition> </Suspense> ``` Managing instances and keys becomes extra important. You can also specify an explicit `name` property for example for animating the same conceptual item from one page onto another. However, best practices is to property namespace these since they can easily collide. It's also useful to add an `id` to it if available. ```js <ViewTransition name="my-shared-view"> ``` The model in general is the same as plain `view-transition-name` except React manages a set of heuristics for when to apply it. A problem with the naive View Transitions model is that it overly opts in every boundary that *might* transition into transitioning. This is leads to unfortunate effects like things floating around when unrelated updates happen. This leads the whole document to animate which means that nothing is clickable in the meantime. It makes it not useful for smaller and more local transitions. Best practice is to add `view-transition-name` only right before you're about to need to animate the thing. This is tricky to manage globally on complex apps and is not compositional. Instead we let React manage when a `<ViewTransition>` "activates" and add/remove the `view-transition-name`. This is also when React calls `startViewTransition` behind the scenes while it mutates the DOM. I've come up with a number of heuristics that I think will make a lot easier to coordinate this. The principle is that only if something that updates that particular boundary do we activate it. I hope that one day maybe browsers will have something like these built-in and we can remove our implementation. A `<ViewTransition>` only activates if: - If a mounted Component renders a `<ViewTransition>` within it outside the first DOM node, and it is within the viewport, then that ViewTransition activates as an "enter" animation. This avoids inner "enter" animations trigger when the parent mounts. - If an unmounted Component had a `<ViewTransition>` within it outside the first DOM node, and it was within the viewport, then that ViewTransition activates as an "exit" animation. This avoids inner "exit" animations triggering when the parent unmounts. - If an explicitly named `<ViewTransition name="...">` is deep within an unmounted tree and one with the same name appears in a mounted tree at the same time, then both are activated as a pair, but only if they're both in the viewport. This avoids these triggering "enter" or "exit" animations when going between parents that don't have a pair. - If an already mounted `<ViewTransition>` is visible and a DOM mutation, that might affect how it's painted, happens within its children but outside any nested `<ViewTransition>`. This allows it to "cross-fade" between its updates. - If an already mounted `<ViewTransition>` resizes or moves as the result of direct DOM nodes siblings changing or moving around. This allows insertion, deletion and reorders into a list to animate all children. It is only within one DOM node though, to avoid unrelated changes in the parent to trigger this. If an item is outside the viewport before and after, then it's skipped to avoid things flying across the screen. - If a `<ViewTransition>` boundary changes size, due to a DOM mutation within it, then the parent activates (or the root document if there are no more parents). This ensures that the container can cross-fade to avoid abrupt relayout. This can be avoided by using absolutely positioned children. When this can avoid bubbling to the root document, whatever is not animating is still responsive to clicks during the transition. Conceptually each DOM node has its own default that activates the parent `<ViewTransition>` or no transition if the parent is the root. That means that if you add a DOM node like `<div><ViewTransition><Component /></ViewTransition></div>` this won't trigger an "enter" animation since it was the div that was added, not the ViewTransition. Instead, it might cause a cross-fade of the parent ViewTransition or no transition if it had no parent. This ensures that only explicit boundaries perform coarse animations instead of every single node which is really the benefit of the View Transitions model. This ends up working out well for simple cases like switching between two pages immediately while transitioning one floating item that appears on both pages. Because only the floating item transitions by default. Note that it's possible to add manual `view-transition-name` with CSS or `style={{ viewTransitionName: 'auto' }}` that always transitions as long as something else has a `<ViewTransition>` that activates. For example a `<ViewTransition>` can wrap a whole page for a cross-fade but inside of it an explicit name can be added to something to ensure it animates as a move when something relates else changes its layout. Instead of just cross-fading it along with the Page which would be the default. There's more PRs coming with some optimizations, fixes and expanded APIs. This first PR explores the above core heuristic. --------- Co-authored-by: Sebastian "Sebbie" Silbermann <silbermann.sebastian@gmail.com>

Sebastian Markbåge committed Jan 8, 2025 at 12:11 UTC a4d122f2d192fe0b6480e669cca43c8f953aaf85
57 files changed +9473 -98
fixtures/view-transition/README.md new
+30
@@ -0,0 +1,30 @@
1 +# View Transition
2 +
3 +A test case for View Transitions.
4 +
5 +## Setup
6 +
7 +To reference a local build of React, first run `npm run build` at the root
8 +of the React project. Then:
9 +
10 +```
11 +cd fixtures/view-transition
12 +yarn
13 +yarn start
14 +```
15 +
16 +The `start` command runs a webpack dev server and a server-side rendering server in development mode with hot reloading.
17 +
18 +**Note: whenever you make changes to React and rebuild it, you need to re-run `yarn` in this folder:**
19 +
20 +```
21 +yarn
22 +```
23 +
24 +If you want to try the production mode instead run:
25 +
26 +```
27 +yarn start:prod
28 +```
29 +
30 +This will pre-build all static resources and then start a server-side rendering HTTP server that hosts the React app and service the static resources (without hot reloading).
fixtures/view-transition/package.json new
+28
@@ -0,0 +1,28 @@
1 +{
2 + "name": "react-fixtures-view-transition",
3 + "version": "0.1.0",
4 + "private": true,
5 + "devDependencies": {
6 + "concurrently": "3.1.0",
7 + "http-proxy-middleware": "0.17.3",
8 + "react-scripts": "0.9.5"
9 + },
10 + "dependencies": {
11 + "express": "^4.14.0",
12 + "ignore-styles": "^5.0.1",
13 + "react": "^19.0.0",
14 + "react-dom": "^19.0.0"
15 + },
16 + "scripts": {
17 + "predev": "cp -r ../../build/oss-experimental/* ./node_modules/",
18 + "prestart": "cp -r ../../build/oss-experimental/* ./node_modules/",
19 + "prebuild": "cp -r ../../build/oss-experimental/* ./node_modules/",
20 + "dev": "concurrently \"npm run dev:server\" \"npm run dev:client\"",
21 + "dev:client": "PORT=3001 react-scripts start",
22 + "dev:server": "NODE_ENV=development node server",
23 + "start": "react-scripts build && NODE_ENV=production node server",
24 + "build": "react-scripts build",
25 + "test": "react-scripts test --env=jsdom",
26 + "eject": "react-scripts eject"
27 + }
28 +}
fixtures/view-transition/public/favicon.ico
Binary files /dev/null and b/fixtures/view-transition/public/favicon.ico differ
fixtures/view-transition/public/index.html new
+13
@@ -0,0 +1,13 @@
1 +<!doctype html>
2 +<html>
3 + <body>
4 + <script>
5 + /*
6 + This is just a placeholder to make react-scripts happy.
7 + We're not using it. If we end up here, redirect to the
8 + primary server.
9 + */
10 + location.href = '//localhost:3000/';
11 + </script>
12 + </body>
13 +</html>
fixtures/view-transition/server/index.js new
+70
@@ -0,0 +1,70 @@
1 +require('ignore-styles');
2 +const babelRegister = require('babel-register');
3 +const proxy = require('http-proxy-middleware');
4 +
5 +babelRegister({
6 + ignore: /\/(build|node_modules)\//,
7 + presets: ['react-app'],
8 +});
9 +
10 +const express = require('express');
11 +const path = require('path');
12 +
13 +const app = express();
14 +
15 +// Application
16 +if (process.env.NODE_ENV === 'development') {
17 + app.get('/', function (req, res) {
18 + // In development mode we clear the module cache between each request to
19 + // get automatic hot reloading.
20 + for (var key in require.cache) {
21 + delete require.cache[key];
22 + }
23 + const render = require('./render').default;
24 + render(req.url, res);
25 + });
26 +} else {
27 + const render = require('./render').default;
28 + app.get('/', function (req, res) {
29 + render(req.url, res);
30 + });
31 +}
32 +
33 +// Static resources
34 +app.use(express.static(path.resolve(__dirname, '..', 'build')));
35 +
36 +// Proxy everything else to create-react-app's webpack development server
37 +if (process.env.NODE_ENV === 'development') {
38 + app.use(
39 + '/',
40 + proxy({
41 + ws: true,
42 + target: 'http://localhost:3001',
43 + })
44 + );
45 +}
46 +
47 +app.listen(3000, () => {
48 + console.log('Listening on port 3000...');
49 +});
50 +
51 +app.on('error', function (error) {
52 + if (error.syscall !== 'listen') {
53 + throw error;
54 + }
55 +
56 + var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
57 +
58 + switch (error.code) {
59 + case 'EACCES':
60 + console.error(bind + ' requires elevated privileges');
61 + process.exit(1);
62 + break;
63 + case 'EADDRINUSE':
64 + console.error(bind + ' is already in use');
65 + process.exit(1);
66 + break;
67 + default:
68 + throw error;
69 + }
70 +});
fixtures/view-transition/server/render.js new
+44
@@ -0,0 +1,44 @@
1 +import React from 'react';
2 +import {renderToPipeableStream} from 'react-dom/server';
3 +
4 +import App from '../src/components/App';
5 +
6 +let assets;
7 +if (process.env.NODE_ENV === 'development') {
8 + // Use the bundle from create-react-app's server in development mode.
9 + assets = {
10 + 'main.js': '/static/js/bundle.js',
11 + // 'main.css': '',
12 + };
13 +} else {
14 + assets = require('../build/asset-manifest.json');
15 +}
16 +
17 +export default function render(url, res) {
18 + res.socket.on('error', error => {
19 + // Log fatal errors
20 + console.error('Fatal', error);
21 + });
22 + let didError = false;
23 + const {pipe, abort} = renderToPipeableStream(<App assets={assets} />, {
24 + bootstrapScripts: [assets['main.js']],
25 + onShellReady() {
26 + // If something errored before we started streaming, we set the error code appropriately.
27 + res.statusCode = didError ? 500 : 200;
28 + res.setHeader('Content-type', 'text/html');
29 + pipe(res);
30 + },
31 + onShellError(x) {
32 + // Something errored before we could complete the shell so we emit an alternative shell.
33 + res.statusCode = 500;
34 + res.send('<!doctype><p>Error</p>');
35 + },
36 + onError(x) {
37 + didError = true;
38 + console.error(x);
39 + },
40 + });
41 + // Abandon and switch to client rendering after 5 seconds.
42 + // Try lowering this to see the client recover.
43 + setTimeout(abort, 5000);
44 +}
fixtures/view-transition/src/components/App.js new
+12
@@ -0,0 +1,12 @@
1 +import React from 'react';
2 +
3 +import Chrome from './Chrome';
4 +import Page from './Page';
5 +
6 +export default function App({assets}) {
7 + return (
8 + <Chrome title="Hello World" assets={assets}>
9 + <Page />
10 + </Chrome>
11 + );
12 +}
fixtures/view-transition/src/components/Chrome.css new
+5
@@ -0,0 +1,5 @@
1 +body {
2 + margin: 10px;
3 + padding: 0;
4 + font-family: sans-serif;
5 +}
fixtures/view-transition/src/components/Chrome.js new
+33
@@ -0,0 +1,33 @@
1 +import React, {Component} from 'react';
2 +
3 +import './Chrome.css';
4 +
5 +export default class Chrome extends Component {
6 + render() {
7 + const assets = this.props.assets;
8 + return (
9 + <html lang="en">
10 + <head>
11 + <meta charSet="utf-8" />
12 + <meta name="viewport" content="width=device-width, initial-scale=1" />
13 + <link rel="shortcut icon" href="favicon.ico" />
14 + <link rel="stylesheet" href={assets['main.css']} />
15 + <title>{this.props.title}</title>
16 + </head>
17 + <body>
18 + <noscript
19 + dangerouslySetInnerHTML={{
20 + __html: `<b>Enable JavaScript to run this app.</b>`,
21 + }}
22 + />
23 + {this.props.children}
24 + <script
25 + dangerouslySetInnerHTML={{
26 + __html: `assetManifest = ${JSON.stringify(assets)};`,
27 + }}
28 + />
29 + </body>
30 + </html>
31 + );
32 + }
33 +}
fixtures/view-transition/src/components/Page.css
fixtures/view-transition/src/components/Page.js new
+79
@@ -0,0 +1,79 @@
1 +import React, {
2 + unstable_ViewTransition as ViewTransition,
3 + startTransition,
4 + useEffect,
5 + useState,
6 + unstable_Activity as Activity,
7 +} from 'react';
8 +
9 +import './Page.css';
10 +
11 +const a = (
12 + <div key="a">
13 + <ViewTransition>
14 + <div>a</div>
15 + </ViewTransition>
16 + </div>
17 +);
18 +
19 +const b = (
20 + <div key="b">
21 + <ViewTransition>
22 + <div>b</div>
23 + </ViewTransition>
24 + </div>
25 +);
26 +
27 +export default function Page() {
28 + const [show, setShow] = useState(false);
29 + useEffect(() => {
30 + startTransition(() => {
31 + setShow(true);
32 + });
33 + }, []);
34 + const exclamation = (
35 + <ViewTransition name="exclamation">
36 + <span>!</span>
37 + </ViewTransition>
38 + );
39 + return (
40 + <div>
41 + <button
42 + onClick={() => {
43 + startTransition(() => {
44 + setShow(show => !show);
45 + });
46 + }}>
47 + {show ? 'A' : 'B'}
48 + </button>
49 + <ViewTransition>
50 + <div>
51 + {show ? (
52 + <div>
53 + {a}
54 + {b}
55 + </div>
56 + ) : (
57 + <div>
58 + {b}
59 + {a}
60 + </div>
61 + )}
62 + <ViewTransition>
63 + {show ? <div>hello{exclamation}</div> : <section>Loading</section>}
64 + </ViewTransition>
65 + {show ? null : (
66 + <ViewTransition>
67 + <div>world{exclamation}</div>
68 + </ViewTransition>
69 + )}
70 + <Activity mode={show ? 'visible' : 'hidden'}>
71 + <ViewTransition>
72 + <div>!!</div>
73 + </ViewTransition>
74 + </Activity>
75 + </div>
76 + </ViewTransition>
77 + </div>
78 + );
79 +}
fixtures/view-transition/src/index.js new
+6
@@ -0,0 +1,6 @@
1 +import React from 'react';
2 +import {hydrateRoot} from 'react-dom/client';
3 +
4 +import App from './components/App';
5 +
6 +hydrateRoot(document, <App assets={window.assetManifest} />);
fixtures/view-transition/yarn.lock new
+7049
@@ -0,0 +1,7049 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +abab@^1.0.3:
6 + version "1.0.4"
7 + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
8 + integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
9 +
10 +abbrev@1:
11 + version "1.1.1"
12 + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
13 + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
14 +
15 +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
16 + version "1.3.7"
17 + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
18 + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
19 + dependencies:
20 + mime-types "~2.1.24"
21 + negotiator "0.6.2"
22 +
23 +acorn-globals@^3.1.0:
24 + version "3.1.0"
25 + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
26 + integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=
27 + dependencies:
28 + acorn "^4.0.4"
29 +
30 +acorn-jsx@^3.0.0:
31 + version "3.0.1"
32 + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
33 + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
34 + dependencies:
35 + acorn "^3.0.4"
36 +
37 +acorn@^3.0.0, acorn@^3.0.4:
38 + version "3.3.0"
39 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
40 + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
41 +
42 +acorn@^4.0.4:
43 + version "4.0.13"
44 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
45 + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
46 +
47 +acorn@^5.5.0:
48 + version "5.7.4"
49 + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
50 + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
51 +
52 +ajv-keywords@^1.0.0:
53 + version "1.5.1"
54 + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
55 + integrity sha1-MU3QpLM2j609/NxU7eYXG4htrzw=
56 +
57 +ajv@^4.7.0, ajv@^4.9.1:
58 + version "4.11.8"
59 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
60 + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
61 + dependencies:
62 + co "^4.6.0"
63 + json-stable-stringify "^1.0.1"
64 +
65 +ajv@^6.12.3:
66 + version "6.12.6"
67 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
68 + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
69 + dependencies:
70 + fast-deep-equal "^3.1.1"
71 + fast-json-stable-stringify "^2.0.0"
72 + json-schema-traverse "^0.4.1"
73 + uri-js "^4.2.2"
74 +
75 +align-text@^0.1.1, align-text@^0.1.3:
76 + version "0.1.4"
77 + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
78 + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
79 + dependencies:
80 + kind-of "^3.0.2"
81 + longest "^1.0.1"
82 + repeat-string "^1.5.2"
83 +
84 +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
85 + version "1.0.2"
86 + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
87 + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
88 +
89 +amdefine@>=0.0.4:
90 + version "1.0.1"
91 + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
92 + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
93 +
94 +ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
95 + version "1.4.0"
96 + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
97 + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
98 +
99 +ansi-escapes@^3.1.0:
100 + version "3.2.0"
101 + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
102 + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
103 +
104 +ansi-html@0.0.5:
105 + version "0.0.5"
106 + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.5.tgz#0dcaa5a081206866bc240a3b773a184ea3b88b64"
107 + integrity sha1-DcqloIEgaGa8JAo7dzoYTqO4i2Q=
108 +
109 +ansi-regex@^0.2.0, ansi-regex@^0.2.1:
110 + version "0.2.1"
111 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
112 + integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=
113 +
114 +ansi-regex@^2.0.0:
115 + version "2.1.1"
116 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
117 + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
118 +
119 +ansi-regex@^3.0.0:
120 + version "3.0.0"
121 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
122 + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
123 +
124 +ansi-styles@^1.1.0:
125 + version "1.1.0"
126 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
127 + integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=
128 +
129 +ansi-styles@^2.2.1:
130 + version "2.2.1"
131 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
132 + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
133 +
134 +ansi-styles@^3.2.1:
135 + version "3.2.1"
136 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
137 + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
138 + dependencies:
139 + color-convert "^1.9.0"
140 +
141 +ansicolors@~0.3.2:
142 + version "0.3.2"
143 + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
144 + integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=
145 +
146 +anymatch@^1.3.0:
147 + version "1.3.2"
148 + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
149 + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
150 + dependencies:
151 + micromatch "^2.1.5"
152 + normalize-path "^2.0.0"
153 +
154 +append-transform@^0.4.0:
155 + version "0.4.0"
156 + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
157 + integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
158 + dependencies:
159 + default-require-extensions "^1.0.0"
160 +
161 +aproba@^1.0.3:
162 + version "1.2.0"
163 + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
164 + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
165 +
166 +are-we-there-yet@~1.1.2:
167 + version "1.1.5"
168 + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
169 + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
170 + dependencies:
171 + delegates "^1.0.0"
172 + readable-stream "^2.0.6"
173 +
174 +argparse@^1.0.7:
175 + version "1.0.10"
176 + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
177 + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
178 + dependencies:
179 + sprintf-js "~1.0.2"
180 +
181 +aria-query@^0.3.0:
182 + version "0.3.0"
183 + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467"
184 + integrity sha1-y4qZhOKGJxHIPICt5bj1yg3itGc=
185 + dependencies:
186 + ast-types-flow "0.0.7"
187 +
188 +arr-diff@^2.0.0:
189 + version "2.0.0"
190 + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
191 + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
192 + dependencies:
193 + arr-flatten "^1.0.1"
194 +
195 +arr-diff@^4.0.0:
196 + version "4.0.0"
197 + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
198 + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
199 +
200 +arr-flatten@^1.0.1, arr-flatten@^1.1.0:
201 + version "1.1.0"
202 + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
203 + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
204 +
205 +arr-union@^3.1.0:
206 + version "3.1.0"
207 + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
208 + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
209 +
210 +array-equal@^1.0.0:
211 + version "1.0.0"
212 + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
213 + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
214 +
215 +array-flatten@1.1.1:
216 + version "1.1.1"
217 + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
218 + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
219 +
220 +array-unique@^0.2.1:
221 + version "0.2.1"
222 + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
223 + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
224 +
225 +array-unique@^0.3.2:
226 + version "0.3.2"
227 + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
228 + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
229 +
230 +arrify@^1.0.1:
231 + version "1.0.1"
232 + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
233 + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
234 +
235 +asap@~2.0.3:
236 + version "2.0.6"
237 + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
238 + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
239 +
240 +asn1@~0.2.3:
241 + version "0.2.4"
242 + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
243 + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
244 + dependencies:
245 + safer-buffer "~2.1.0"
246 +
247 +assert-plus@1.0.0, assert-plus@^1.0.0:
248 + version "1.0.0"
249 + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
250 + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
251 +
252 +assert-plus@^0.2.0:
253 + version "0.2.0"
254 + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
255 + integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
256 +
257 +assert@^1.1.1:
258 + version "1.5.0"
259 + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
260 + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
261 + dependencies:
262 + object-assign "^4.1.1"
263 + util "0.10.3"
264 +
265 +assign-symbols@^1.0.0:
266 + version "1.0.0"
267 + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
268 + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
269 +
270 +ast-types-flow@0.0.7:
271 + version "0.0.7"
272 + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
273 + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
274 +
275 +async-each@^1.0.0:
276 + version "1.0.3"
277 + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
278 + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
279 +
280 +async@^0.9.0:
281 + version "0.9.2"
282 + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
283 + integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
284 +
285 +async@^1.3.0, async@^1.5.0:
286 + version "1.5.2"
287 + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
288 + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
289 +
290 +async@^2.1.4:
291 + version "2.6.3"
292 + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
293 + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
294 + dependencies:
295 + lodash "^4.17.14"
296 +
297 +async@~0.2.6:
298 + version "0.2.10"
299 + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
300 + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
301 +
302 +asynckit@^0.4.0:
303 + version "0.4.0"
304 + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
305 + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
306 +
307 +atob@^2.1.2:
308 + version "2.1.2"
309 + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
310 + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
311 +
312 +autoprefixer@6.7.2:
313 + version "6.7.2"
314 + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.2.tgz#172ab07b998ae9b957530928a59a40be54a45023"
315 + integrity sha1-Fyqwe5mK6blXUwkopZpAvlSkUCM=
316 + dependencies:
317 + browserslist "^1.7.1"
318 + caniuse-db "^1.0.30000618"
319 + normalize-range "^0.1.2"
320 + num2fraction "^1.2.2"
321 + postcss "^5.2.11"
322 + postcss-value-parser "^3.2.3"
323 +
324 +autoprefixer@^6.3.1:
325 + version "6.7.7"
326 + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
327 + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
328 + dependencies:
329 + browserslist "^1.7.6"
330 + caniuse-db "^1.0.30000634"
331 + normalize-range "^0.1.2"
332 + num2fraction "^1.2.2"
333 + postcss "^5.2.16"
334 + postcss-value-parser "^3.2.3"
335 +
336 +aws-sign2@~0.6.0:
337 + version "0.6.0"
338 + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
339 + integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
340 +
341 +aws-sign2@~0.7.0:
342 + version "0.7.0"
343 + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
344 + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
345 +
346 +aws4@^1.2.1, aws4@^1.8.0:
347 + version "1.11.0"
348 + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
349 + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
350 +
351 +babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
352 + version "6.26.0"
353 + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
354 + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
355 + dependencies:
356 + chalk "^1.1.3"
357 + esutils "^2.0.2"
358 + js-tokens "^3.0.2"
359 +
360 +babel-core@6.22.1:
361 + version "6.22.1"
362 + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
363 + integrity sha1-nF/WWLoXctKNch9tJdlo/HriFkg=
364 + dependencies:
365 + babel-code-frame "^6.22.0"
366 + babel-generator "^6.22.0"
367 + babel-helpers "^6.22.0"
368 + babel-messages "^6.22.0"
369 + babel-register "^6.22.0"
370 + babel-runtime "^6.22.0"
371 + babel-template "^6.22.0"
372 + babel-traverse "^6.22.1"
373 + babel-types "^6.22.0"
374 + babylon "^6.11.0"
375 + convert-source-map "^1.1.0"
376 + debug "^2.1.1"
377 + json5 "^0.5.0"
378 + lodash "^4.2.0"
379 + minimatch "^3.0.2"
380 + path-is-absolute "^1.0.0"
381 + private "^0.1.6"
382 + slash "^1.0.0"
383 + source-map "^0.5.0"
384 +
385 +babel-core@^6.0.0, babel-core@^6.26.0:
386 + version "6.26.3"
387 + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
388 + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
389 + dependencies:
390 + babel-code-frame "^6.26.0"
391 + babel-generator "^6.26.0"
392 + babel-helpers "^6.24.1"
393 + babel-messages "^6.23.0"
394 + babel-register "^6.26.0"
395 + babel-runtime "^6.26.0"
396 + babel-template "^6.26.0"
397 + babel-traverse "^6.26.0"
398 + babel-types "^6.26.0"
399 + babylon "^6.18.0"
400 + convert-source-map "^1.5.1"
401 + debug "^2.6.9"
402 + json5 "^0.5.1"
403 + lodash "^4.17.4"
404 + minimatch "^3.0.4"
405 + path-is-absolute "^1.0.1"
406 + private "^0.1.8"
407 + slash "^1.0.0"
408 + source-map "^0.5.7"
409 +
410 +babel-eslint@7.1.1:
411 + version "7.1.1"
412 + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.1.1.tgz#8a6a884f085aa7060af69cfc77341c2f99370fb2"
413 + integrity sha1-imqITwhapwYK9pz8dzQcL5k3D7I=
414 + dependencies:
415 + babel-code-frame "^6.16.0"
416 + babel-traverse "^6.15.0"
417 + babel-types "^6.15.0"
418 + babylon "^6.13.0"
419 + lodash.pickby "^4.6.0"
420 +
421 +babel-generator@^6.18.0, babel-generator@^6.22.0, babel-generator@^6.26.0:
422 + version "6.26.1"
423 + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
424 + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
425 + dependencies:
426 + babel-messages "^6.23.0"
427 + babel-runtime "^6.26.0"
428 + babel-types "^6.26.0"
429 + detect-indent "^4.0.0"
430 + jsesc "^1.3.0"
431 + lodash "^4.17.4"
432 + source-map "^0.5.7"
433 + trim-right "^1.0.1"
434 +
435 +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
436 + version "6.24.1"
437 + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
438 + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
439 + dependencies:
440 + babel-helper-explode-assignable-expression "^6.24.1"
441 + babel-runtime "^6.22.0"
442 + babel-types "^6.24.1"
443 +
444 +babel-helper-builder-react-jsx@^6.22.0, babel-helper-builder-react-jsx@^6.24.1:
445 + version "6.26.0"
446 + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
447 + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=
448 + dependencies:
449 + babel-runtime "^6.26.0"
450 + babel-types "^6.26.0"
451 + esutils "^2.0.2"
452 +
453 +babel-helper-call-delegate@^6.24.1:
454 + version "6.24.1"
455 + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
456 + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
457 + dependencies:
458 + babel-helper-hoist-variables "^6.24.1"
459 + babel-runtime "^6.22.0"
460 + babel-traverse "^6.24.1"
461 + babel-types "^6.24.1"
462 +
463 +babel-helper-define-map@^6.24.1:
464 + version "6.26.0"
465 + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
466 + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
467 + dependencies:
468 + babel-helper-function-name "^6.24.1"
469 + babel-runtime "^6.26.0"
470 + babel-types "^6.26.0"
471 + lodash "^4.17.4"
472 +
473 +babel-helper-explode-assignable-expression@^6.24.1:
474 + version "6.24.1"
475 + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
476 + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
477 + dependencies:
478 + babel-runtime "^6.22.0"
479 + babel-traverse "^6.24.1"
480 + babel-types "^6.24.1"
481 +
482 +babel-helper-function-name@^6.22.0, babel-helper-function-name@^6.24.1:
483 + version "6.24.1"
484 + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
485 + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
486 + dependencies:
487 + babel-helper-get-function-arity "^6.24.1"
488 + babel-runtime "^6.22.0"
489 + babel-template "^6.24.1"
490 + babel-traverse "^6.24.1"
491 + babel-types "^6.24.1"
492 +
493 +babel-helper-get-function-arity@^6.24.1:
494 + version "6.24.1"
495 + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
496 + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
497 + dependencies:
498 + babel-runtime "^6.22.0"
499 + babel-types "^6.24.1"
500 +
501 +babel-helper-hoist-variables@^6.24.1:
502 + version "6.24.1"
503 + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
504 + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
505 + dependencies:
506 + babel-runtime "^6.22.0"
507 + babel-types "^6.24.1"
508 +
509 +babel-helper-optimise-call-expression@^6.24.1:
510 + version "6.24.1"
511 + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
512 + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
513 + dependencies:
514 + babel-runtime "^6.22.0"
515 + babel-types "^6.24.1"
516 +
517 +babel-helper-regex@^6.24.1:
518 + version "6.26.0"
519 + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
520 + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
521 + dependencies:
522 + babel-runtime "^6.26.0"
523 + babel-types "^6.26.0"
524 + lodash "^4.17.4"
525 +
526 +babel-helper-remap-async-to-generator@^6.24.1:
527 + version "6.24.1"
528 + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
529 + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
530 + dependencies:
531 + babel-helper-function-name "^6.24.1"
532 + babel-runtime "^6.22.0"
533 + babel-template "^6.24.1"
534 + babel-traverse "^6.24.1"
535 + babel-types "^6.24.1"
536 +
537 +babel-helper-replace-supers@^6.24.1:
538 + version "6.24.1"
539 + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
540 + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
541 + dependencies:
542 + babel-helper-optimise-call-expression "^6.24.1"
543 + babel-messages "^6.23.0"
544 + babel-runtime "^6.22.0"
545 + babel-template "^6.24.1"
546 + babel-traverse "^6.24.1"
547 + babel-types "^6.24.1"
548 +
549 +babel-helpers@^6.22.0, babel-helpers@^6.24.1:
550 + version "6.24.1"
551 + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
552 + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
553 + dependencies:
554 + babel-runtime "^6.22.0"
555 + babel-template "^6.24.1"
556 +
557 +babel-jest@18.0.0, babel-jest@^18.0.0:
558 + version "18.0.0"
559 + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-18.0.0.tgz#17ebba8cb3285c906d859e8707e4e79795fb65e3"
560 + integrity sha1-F+u6jLMoXJBthZ6HB+Tnl5X7ZeM=
561 + dependencies:
562 + babel-core "^6.0.0"
563 + babel-plugin-istanbul "^3.0.0"
564 + babel-preset-jest "^18.0.0"
565 +
566 +babel-loader@6.2.10:
567 + version "6.2.10"
568 + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.2.10.tgz#adefc2b242320cd5d15e65b31cea0e8b1b02d4b0"
569 + integrity sha1-re/CskIyDNXRXmWzHOoOixsC1LA=
570 + dependencies:
571 + find-cache-dir "^0.1.1"
572 + loader-utils "^0.2.11"
573 + mkdirp "^0.5.1"
574 + object-assign "^4.0.1"
575 +
576 +babel-messages@^6.22.0, babel-messages@^6.23.0:
577 + version "6.23.0"
578 + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
579 + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
580 + dependencies:
581 + babel-runtime "^6.22.0"
582 +
583 +babel-plugin-check-es2015-constants@^6.3.13:
584 + version "6.22.0"
585 + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
586 + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
587 + dependencies:
588 + babel-runtime "^6.22.0"
589 +
590 +babel-plugin-istanbul@^3.0.0:
591 + version "3.1.2"
592 + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-3.1.2.tgz#11d5abde18425ec24b5d648c7e0b5d25cd354a22"
593 + integrity sha1-EdWr3hhCXsJLXWSMfgtdJc01SiI=
594 + dependencies:
595 + find-up "^1.1.2"
596 + istanbul-lib-instrument "^1.4.2"
597 + object-assign "^4.1.0"
598 + test-exclude "^3.3.0"
599 +
600 +babel-plugin-jest-hoist@^18.0.0:
601 + version "18.0.0"
602 + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz#4150e70ecab560e6e7344adc849498072d34e12a"
603 + integrity sha1-QVDnDsq1YObnNErchJSYBy004So=
604 +
605 +babel-plugin-syntax-async-functions@^6.8.0:
606 + version "6.13.0"
607 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
608 + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
609 +
610 +babel-plugin-syntax-class-properties@^6.8.0:
611 + version "6.13.0"
612 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
613 + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=
614 +
615 +babel-plugin-syntax-exponentiation-operator@^6.8.0:
616 + version "6.13.0"
617 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
618 + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
619 +
620 +babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13:
621 + version "6.18.0"
622 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
623 + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=
624 +
625 +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
626 + version "6.18.0"
627 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
628 + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
629 +
630 +babel-plugin-syntax-object-rest-spread@^6.8.0:
631 + version "6.13.0"
632 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
633 + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
634 +
635 +babel-plugin-syntax-trailing-function-commas@^6.13.0:
636 + version "6.22.0"
637 + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
638 + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
639 +
640 +babel-plugin-transform-async-to-generator@^6.8.0:
641 + version "6.24.1"
642 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
643 + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
644 + dependencies:
645 + babel-helper-remap-async-to-generator "^6.24.1"
646 + babel-plugin-syntax-async-functions "^6.8.0"
647 + babel-runtime "^6.22.0"
648 +
649 +babel-plugin-transform-class-properties@6.22.0:
650 + version "6.22.0"
651 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8"
652 + integrity sha1-qnj4E0SVx94GwJcRi6BhhE4dwdg=
653 + dependencies:
654 + babel-helper-function-name "^6.22.0"
655 + babel-plugin-syntax-class-properties "^6.8.0"
656 + babel-runtime "^6.22.0"
657 + babel-template "^6.22.0"
658 +
659 +babel-plugin-transform-es2015-arrow-functions@^6.3.13:
660 + version "6.22.0"
661 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
662 + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
663 + dependencies:
664 + babel-runtime "^6.22.0"
665 +
666 +babel-plugin-transform-es2015-block-scoped-functions@^6.3.13:
667 + version "6.22.0"
668 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
669 + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
670 + dependencies:
671 + babel-runtime "^6.22.0"
672 +
673 +babel-plugin-transform-es2015-block-scoping@^6.6.0:
674 + version "6.26.0"
675 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
676 + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
677 + dependencies:
678 + babel-runtime "^6.26.0"
679 + babel-template "^6.26.0"
680 + babel-traverse "^6.26.0"
681 + babel-types "^6.26.0"
682 + lodash "^4.17.4"
683 +
684 +babel-plugin-transform-es2015-classes@^6.6.0:
685 + version "6.24.1"
686 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
687 + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
688 + dependencies:
689 + babel-helper-define-map "^6.24.1"
690 + babel-helper-function-name "^6.24.1"
691 + babel-helper-optimise-call-expression "^6.24.1"
692 + babel-helper-replace-supers "^6.24.1"
693 + babel-messages "^6.23.0"
694 + babel-runtime "^6.22.0"
695 + babel-template "^6.24.1"
696 + babel-traverse "^6.24.1"
697 + babel-types "^6.24.1"
698 +
699 +babel-plugin-transform-es2015-computed-properties@^6.3.13:
700 + version "6.24.1"
701 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
702 + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
703 + dependencies:
704 + babel-runtime "^6.22.0"
705 + babel-template "^6.24.1"
706 +
707 +babel-plugin-transform-es2015-destructuring@^6.6.0:
708 + version "6.23.0"
709 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
710 + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
711 + dependencies:
712 + babel-runtime "^6.22.0"
713 +
714 +babel-plugin-transform-es2015-duplicate-keys@^6.6.0:
715 + version "6.24.1"
716 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
717 + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
718 + dependencies:
719 + babel-runtime "^6.22.0"
720 + babel-types "^6.24.1"
721 +
722 +babel-plugin-transform-es2015-for-of@^6.6.0:
723 + version "6.23.0"
724 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
725 + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
726 + dependencies:
727 + babel-runtime "^6.22.0"
728 +
729 +babel-plugin-transform-es2015-function-name@^6.3.13:
730 + version "6.24.1"
731 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
732 + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
733 + dependencies:
734 + babel-helper-function-name "^6.24.1"
735 + babel-runtime "^6.22.0"
736 + babel-types "^6.24.1"
737 +
738 +babel-plugin-transform-es2015-literals@^6.3.13:
739 + version "6.22.0"
740 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
741 + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
742 + dependencies:
743 + babel-runtime "^6.22.0"
744 +
745 +babel-plugin-transform-es2015-modules-amd@^6.24.1, babel-plugin-transform-es2015-modules-amd@^6.8.0:
746 + version "6.24.1"
747 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
748 + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
749 + dependencies:
750 + babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
751 + babel-runtime "^6.22.0"
752 + babel-template "^6.24.1"
753 +
754 +babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.6.0:
755 + version "6.26.2"
756 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
757 + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
758 + dependencies:
759 + babel-plugin-transform-strict-mode "^6.24.1"
760 + babel-runtime "^6.26.0"
761 + babel-template "^6.26.0"
762 + babel-types "^6.26.0"
763 +
764 +babel-plugin-transform-es2015-modules-systemjs@^6.12.0:
765 + version "6.24.1"
766 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
767 + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
768 + dependencies:
769 + babel-helper-hoist-variables "^6.24.1"
770 + babel-runtime "^6.22.0"
771 + babel-template "^6.24.1"
772 +
773 +babel-plugin-transform-es2015-modules-umd@^6.12.0:
774 + version "6.24.1"
775 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
776 + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
777 + dependencies:
778 + babel-plugin-transform-es2015-modules-amd "^6.24.1"
779 + babel-runtime "^6.22.0"
780 + babel-template "^6.24.1"
781 +
782 +babel-plugin-transform-es2015-object-super@^6.3.13:
783 + version "6.24.1"
784 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
785 + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
786 + dependencies:
787 + babel-helper-replace-supers "^6.24.1"
788 + babel-runtime "^6.22.0"
789 +
790 +babel-plugin-transform-es2015-parameters@^6.6.0:
791 + version "6.24.1"
792 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
793 + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
794 + dependencies:
795 + babel-helper-call-delegate "^6.24.1"
796 + babel-helper-get-function-arity "^6.24.1"
797 + babel-runtime "^6.22.0"
798 + babel-template "^6.24.1"
799 + babel-traverse "^6.24.1"
800 + babel-types "^6.24.1"
801 +
802 +babel-plugin-transform-es2015-shorthand-properties@^6.3.13:
803 + version "6.24.1"
804 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
805 + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
806 + dependencies:
807 + babel-runtime "^6.22.0"
808 + babel-types "^6.24.1"
809 +
810 +babel-plugin-transform-es2015-spread@^6.3.13:
811 + version "6.22.0"
812 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
813 + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
814 + dependencies:
815 + babel-runtime "^6.22.0"
816 +
817 +babel-plugin-transform-es2015-sticky-regex@^6.3.13:
818 + version "6.24.1"
819 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
820 + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
821 + dependencies:
822 + babel-helper-regex "^6.24.1"
823 + babel-runtime "^6.22.0"
824 + babel-types "^6.24.1"
825 +
826 +babel-plugin-transform-es2015-template-literals@^6.6.0:
827 + version "6.22.0"
828 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
829 + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
830 + dependencies:
831 + babel-runtime "^6.22.0"
832 +
833 +babel-plugin-transform-es2015-typeof-symbol@^6.6.0:
834 + version "6.23.0"
835 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
836 + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
837 + dependencies:
838 + babel-runtime "^6.22.0"
839 +
840 +babel-plugin-transform-es2015-unicode-regex@^6.3.13:
841 + version "6.24.1"
842 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
843 + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
844 + dependencies:
845 + babel-helper-regex "^6.24.1"
846 + babel-runtime "^6.22.0"
847 + regexpu-core "^2.0.0"
848 +
849 +babel-plugin-transform-exponentiation-operator@^6.8.0:
850 + version "6.24.1"
851 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
852 + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
853 + dependencies:
854 + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
855 + babel-plugin-syntax-exponentiation-operator "^6.8.0"
856 + babel-runtime "^6.22.0"
857 +
858 +babel-plugin-transform-flow-strip-types@^6.22.0:
859 + version "6.22.0"
860 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
861 + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=
862 + dependencies:
863 + babel-plugin-syntax-flow "^6.18.0"
864 + babel-runtime "^6.22.0"
865 +
866 +babel-plugin-transform-object-rest-spread@6.22.0:
867 + version "6.22.0"
868 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.22.0.tgz#1d419b55e68d2e4f64a5ff3373bd67d73c8e83bc"
869 + integrity sha1-HUGbVeaNLk9kpf8zc71n1zyOg7w=
870 + dependencies:
871 + babel-plugin-syntax-object-rest-spread "^6.8.0"
872 + babel-runtime "^6.22.0"
873 +
874 +babel-plugin-transform-react-constant-elements@6.22.0:
875 + version "6.22.0"
876 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.22.0.tgz#4af456f80d283e8be00f00f12852354defa08ee1"
877 + integrity sha1-SvRW+A0oPovgDwDxKFI1Te+gjuE=
878 + dependencies:
879 + babel-runtime "^6.22.0"
880 +
881 +babel-plugin-transform-react-display-name@^6.22.0:
882 + version "6.25.0"
883 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
884 + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=
885 + dependencies:
886 + babel-runtime "^6.22.0"
887 +
888 +babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-self@^6.22.0:
889 + version "6.22.0"
890 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
891 + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24=
892 + dependencies:
893 + babel-plugin-syntax-jsx "^6.8.0"
894 + babel-runtime "^6.22.0"
895 +
896 +babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx-source@^6.22.0:
897 + version "6.22.0"
898 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
899 + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=
900 + dependencies:
901 + babel-plugin-syntax-jsx "^6.8.0"
902 + babel-runtime "^6.22.0"
903 +
904 +babel-plugin-transform-react-jsx@6.22.0:
905 + version "6.22.0"
906 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.22.0.tgz#48556b7dd4c3fe97d1c943bcd54fc3f2561c1817"
907 + integrity sha1-SFVrfdTD/pfRyUO81U/D8lYcGBc=
908 + dependencies:
909 + babel-helper-builder-react-jsx "^6.22.0"
910 + babel-plugin-syntax-jsx "^6.8.0"
911 + babel-runtime "^6.22.0"
912 +
913 +babel-plugin-transform-react-jsx@^6.22.0:
914 + version "6.24.1"
915 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
916 + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM=
917 + dependencies:
918 + babel-helper-builder-react-jsx "^6.24.1"
919 + babel-plugin-syntax-jsx "^6.8.0"
920 + babel-runtime "^6.22.0"
921 +
922 +babel-plugin-transform-regenerator@6.22.0:
923 + version "6.22.0"
924 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6"
925 + integrity sha1-ZXQFk6MZxEUiFXU41pC4QJRhfqY=
926 + dependencies:
927 + regenerator-transform "0.9.8"
928 +
929 +babel-plugin-transform-regenerator@^6.6.0:
930 + version "6.26.0"
931 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
932 + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
933 + dependencies:
934 + regenerator-transform "^0.10.0"
935 +
936 +babel-plugin-transform-runtime@6.22.0:
937 + version "6.22.0"
938 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.22.0.tgz#10968d760bbf6517243081eec778e10fa828551c"
939 + integrity sha1-EJaNdgu/ZRckMIHux3jhD6goVRw=
940 + dependencies:
941 + babel-runtime "^6.22.0"
942 +
943 +babel-plugin-transform-strict-mode@^6.24.1:
944 + version "6.24.1"
945 + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
946 + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
947 + dependencies:
948 + babel-runtime "^6.22.0"
949 + babel-types "^6.24.1"
950 +
951 +babel-preset-env@1.2.1:
952 + version "1.2.1"
953 + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.2.1.tgz#659178f54df74a74765f796be4d290b5beeb3f5f"
954 + integrity sha1-ZZF49U33SnR2X3lr5NKQtb7rP18=
955 + dependencies:
956 + babel-plugin-check-es2015-constants "^6.3.13"
957 + babel-plugin-syntax-trailing-function-commas "^6.13.0"
958 + babel-plugin-transform-async-to-generator "^6.8.0"
959 + babel-plugin-transform-es2015-arrow-functions "^6.3.13"
960 + babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
961 + babel-plugin-transform-es2015-block-scoping "^6.6.0"
962 + babel-plugin-transform-es2015-classes "^6.6.0"
963 + babel-plugin-transform-es2015-computed-properties "^6.3.13"
964 + babel-plugin-transform-es2015-destructuring "^6.6.0"
965 + babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
966 + babel-plugin-transform-es2015-for-of "^6.6.0"
967 + babel-plugin-transform-es2015-function-name "^6.3.13"
968 + babel-plugin-transform-es2015-literals "^6.3.13"
969 + babel-plugin-transform-es2015-modules-amd "^6.8.0"
970 + babel-plugin-transform-es2015-modules-commonjs "^6.6.0"
971 + babel-plugin-transform-es2015-modules-systemjs "^6.12.0"
972 + babel-plugin-transform-es2015-modules-umd "^6.12.0"
973 + babel-plugin-transform-es2015-object-super "^6.3.13"
974 + babel-plugin-transform-es2015-parameters "^6.6.0"
975 + babel-plugin-transform-es2015-shorthand-properties "^6.3.13"
976 + babel-plugin-transform-es2015-spread "^6.3.13"
977 + babel-plugin-transform-es2015-sticky-regex "^6.3.13"
978 + babel-plugin-transform-es2015-template-literals "^6.6.0"
979 + babel-plugin-transform-es2015-typeof-symbol "^6.6.0"
980 + babel-plugin-transform-es2015-unicode-regex "^6.3.13"
981 + babel-plugin-transform-exponentiation-operator "^6.8.0"
982 + babel-plugin-transform-regenerator "^6.6.0"
983 + browserslist "^1.4.0"
984 + electron-to-chromium "^1.1.0"
985 + invariant "^2.2.2"
986 +
987 +babel-preset-jest@^18.0.0:
988 + version "18.0.0"
989 + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-18.0.0.tgz#84faf8ca3ec65aba7d5e3f59bbaed935ab24049e"
990 + integrity sha1-hPr4yj7GWrp9Xj9Zu67ZNaskBJ4=
991 + dependencies:
992 + babel-plugin-jest-hoist "^18.0.0"
993 +
994 +babel-preset-react-app@^2.2.0:
995 + version "2.2.0"
996 + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-2.2.0.tgz#3143bcf316049f78b5f9d0422fd7822ca4715ca4"
997 + integrity sha1-MUO88xYEn3i1+dBCL9eCLKRxXKQ=
998 + dependencies:
999 + babel-plugin-transform-class-properties "6.22.0"
1000 + babel-plugin-transform-object-rest-spread "6.22.0"
1001 + babel-plugin-transform-react-constant-elements "6.22.0"
1002 + babel-plugin-transform-react-jsx "6.22.0"
1003 + babel-plugin-transform-react-jsx-self "6.22.0"
1004 + babel-plugin-transform-react-jsx-source "6.22.0"
1005 + babel-plugin-transform-regenerator "6.22.0"
1006 + babel-plugin-transform-runtime "6.22.0"
1007 + babel-preset-env "1.2.1"
1008 + babel-preset-react "6.22.0"
1009 + babel-runtime "6.22.0"
1010 +
1011 +babel-preset-react@6.22.0:
1012 + version "6.22.0"
1013 + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.22.0.tgz#7bc97e2d73eec4b980fb6b4e4e0884e81ccdc165"
1014 + integrity sha1-e8l+LXPuxLmA+2tOTgiE6BzNwWU=
1015 + dependencies:
1016 + babel-plugin-syntax-flow "^6.3.13"
1017 + babel-plugin-syntax-jsx "^6.3.13"
1018 + babel-plugin-transform-flow-strip-types "^6.22.0"
1019 + babel-plugin-transform-react-display-name "^6.22.0"
1020 + babel-plugin-transform-react-jsx "^6.22.0"
1021 + babel-plugin-transform-react-jsx-self "^6.22.0"
1022 + babel-plugin-transform-react-jsx-source "^6.22.0"
1023 +
1024 +babel-register@^6.22.0, babel-register@^6.26.0:
1025 + version "6.26.0"
1026 + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
1027 + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
1028 + dependencies:
1029 + babel-core "^6.26.0"
1030 + babel-runtime "^6.26.0"
1031 + core-js "^2.5.0"
1032 + home-or-tmp "^2.0.0"
1033 + lodash "^4.17.4"
1034 + mkdirp "^0.5.1"
1035 + source-map-support "^0.4.15"
1036 +
1037 +babel-runtime@6.22.0:
1038 + version "6.22.0"
1039 + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611"
1040 + integrity sha1-HPi0rGfHek3bDbKuH3TeUqxMphE=
1041 + dependencies:
1042 + core-js "^2.4.0"
1043 + regenerator-runtime "^0.10.0"
1044 +
1045 +babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
1046 + version "6.26.0"
1047 + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
1048 + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
1049 + dependencies:
1050 + core-js "^2.4.0"
1051 + regenerator-runtime "^0.11.0"
1052 +
1053 +babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.24.1, babel-template@^6.26.0:
1054 + version "6.26.0"
1055 + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
1056 + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
1057 + dependencies:
1058 + babel-runtime "^6.26.0"
1059 + babel-traverse "^6.26.0"
1060 + babel-types "^6.26.0"
1061 + babylon "^6.18.0"
1062 + lodash "^4.17.4"
1063 +
1064 +babel-traverse@^6.15.0, babel-traverse@^6.18.0, babel-traverse@^6.22.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
1065 + version "6.26.0"
1066 + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
1067 + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
1068 + dependencies:
1069 + babel-code-frame "^6.26.0"
1070 + babel-messages "^6.23.0"
1071 + babel-runtime "^6.26.0"
1072 + babel-types "^6.26.0"
1073 + babylon "^6.18.0"
1074 + debug "^2.6.8"
1075 + globals "^9.18.0"
1076 + invariant "^2.2.2"
1077 + lodash "^4.17.4"
1078 +
1079 +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.24.1, babel-types@^6.26.0:
1080 + version "6.26.0"
1081 + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
1082 + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
1083 + dependencies:
1084 + babel-runtime "^6.26.0"
1085 + esutils "^2.0.2"
1086 + lodash "^4.17.4"
1087 + to-fast-properties "^1.0.3"
1088 +
1089 +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.18.0:
1090 + version "6.18.0"
1091 + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
1092 + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
1093 +
1094 +balanced-match@^0.4.2:
1095 + version "0.4.2"
1096 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
1097 + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
1098 +
1099 +balanced-match@^1.0.0:
1100 + version "1.0.2"
1101 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
1102 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
1103 +
1104 +base64-js@^1.0.2:
1105 + version "1.5.1"
1106 + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
1107 + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
1108 +
1109 +base@^0.11.1:
1110 + version "0.11.2"
1111 + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
1112 + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
1113 + dependencies:
1114 + cache-base "^1.0.1"
1115 + class-utils "^0.3.5"
1116 + component-emitter "^1.2.1"
1117 + define-property "^1.0.0"
1118 + isobject "^3.0.1"
1119 + mixin-deep "^1.2.0"
1120 + pascalcase "^0.1.1"
1121 +
1122 +batch@0.6.1:
1123 + version "0.6.1"
1124 + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
1125 + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
1126 +
1127 +bcrypt-pbkdf@^1.0.0:
1128 + version "1.0.2"
1129 + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
1130 + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
1131 + dependencies:
1132 + tweetnacl "^0.14.3"
1133 +
1134 +big.js@^3.1.3:
1135 + version "3.2.0"
1136 + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
1137 + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
1138 +
1139 +binary-extensions@^1.0.0:
1140 + version "1.13.1"
1141 + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
1142 + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
1143 +
1144 +bindings@^1.5.0:
1145 + version "1.5.0"
1146 + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
1147 + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
1148 + dependencies:
1149 + file-uri-to-path "1.0.0"
1150 +
1151 +block-stream@*:
1152 + version "0.0.9"
1153 + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
1154 + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
1155 + dependencies:
1156 + inherits "~2.0.0"
1157 +
1158 +bluebird@2.9.6:
1159 + version "2.9.6"
1160 + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.9.6.tgz#1fc3a6b1685267dc121b5ec89b32ce069d81ab7d"
1161 + integrity sha1-H8OmsWhSZ9wSG17ImzLOBp2Bq30=
1162 +
1163 +bluebird@^3.4.6:
1164 + version "3.7.2"
1165 + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
1166 + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
1167 +
1168 +body-parser@1.19.0:
1169 + version "1.19.0"
1170 + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
1171 + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
1172 + dependencies:
1173 + bytes "3.1.0"
1174 + content-type "~1.0.4"
1175 + debug "2.6.9"
1176 + depd "~1.1.2"
1177 + http-errors "1.7.2"
1178 + iconv-lite "0.4.24"
1179 + on-finished "~2.3.0"
1180 + qs "6.7.0"
1181 + raw-body "2.4.0"
1182 + type-is "~1.6.17"
1183 +
1184 +boolbase@^1.0.0, boolbase@~1.0.0:
1185 + version "1.0.0"
1186 + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
1187 + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
1188 +
1189 +boom@2.x.x:
1190 + version "2.10.1"
1191 + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
1192 + integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
1193 + dependencies:
1194 + hoek "2.x.x"
1195 +
1196 +brace-expansion@^1.0.0, brace-expansion@^1.1.7:
1197 + version "1.1.11"
1198 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
1199 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
1200 + dependencies:
1201 + balanced-match "^1.0.0"
1202 + concat-map "0.0.1"
1203 +
1204 +braces@^1.8.2:
1205 + version "1.8.5"
1206 + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
1207 + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
1208 + dependencies:
1209 + expand-range "^1.8.1"
1210 + preserve "^0.2.0"
1211 + repeat-element "^1.1.2"
1212 +
1213 +braces@^2.3.1:
1214 + version "2.3.2"
1215 + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
1216 + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
1217 + dependencies:
1218 + arr-flatten "^1.1.0"
1219 + array-unique "^0.3.2"
1220 + extend-shallow "^2.0.1"
1221 + fill-range "^4.0.0"
1222 + isobject "^3.0.1"
1223 + repeat-element "^1.1.2"
1224 + snapdragon "^0.8.1"
1225 + snapdragon-node "^2.0.1"
1226 + split-string "^3.0.2"
1227 + to-regex "^3.0.1"
1228 +
1229 +browser-resolve@^1.11.2:
1230 + version "1.11.3"
1231 + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
1232 + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
1233 + dependencies:
1234 + resolve "1.1.7"
1235 +
1236 +browserify-aes@0.4.0:
1237 + version "0.4.0"
1238 + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
1239 + integrity sha1-BnFJtmjfMcS1hTPgLQHoBthgjiw=
1240 + dependencies:
1241 + inherits "^2.0.1"
1242 +
1243 +browserify-zlib@^0.1.4:
1244 + version "0.1.4"
1245 + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
1246 + integrity sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=
1247 + dependencies:
1248 + pako "~0.2.0"
1249 +
1250 +browserslist@^1.3.6, browserslist@^1.4.0, browserslist@^1.5.2, browserslist@^1.7.1, browserslist@^1.7.6:
1251 + version "1.7.7"
1252 + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
1253 + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
1254 + dependencies:
1255 + caniuse-db "^1.0.30000639"
1256 + electron-to-chromium "^1.2.7"
1257 +
1258 +bser@1.0.2:
1259 + version "1.0.2"
1260 + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
1261 + integrity sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=
1262 + dependencies:
1263 + node-int64 "^0.4.0"
1264 +
1265 +buffer-from@^1.0.0:
1266 + version "1.1.1"
1267 + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
1268 + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
1269 +
1270 +buffer@^4.9.0:
1271 + version "4.9.2"
1272 + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
1273 + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
1274 + dependencies:
1275 + base64-js "^1.0.2"
1276 + ieee754 "^1.1.4"
1277 + isarray "^1.0.0"
1278 +
1279 +builtin-modules@^1.1.1:
1280 + version "1.1.1"
1281 + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
1282 + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
1283 +
1284 +builtin-status-codes@^3.0.0:
1285 + version "3.0.0"
1286 + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
1287 + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
1288 +
1289 +bytes@3.0.0:
1290 + version "3.0.0"
1291 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
1292 + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
1293 +
1294 +bytes@3.1.0:
1295 + version "3.1.0"
1296 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
1297 + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
1298 +
1299 +cache-base@^1.0.1:
1300 + version "1.0.1"
1301 + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
1302 + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
1303 + dependencies:
1304 + collection-visit "^1.0.0"
1305 + component-emitter "^1.2.1"
1306 + get-value "^2.0.6"
1307 + has-value "^1.0.0"
1308 + isobject "^3.0.1"
1309 + set-value "^2.0.0"
1310 + to-object-path "^0.3.0"
1311 + union-value "^1.0.0"
1312 + unset-value "^1.0.0"
1313 +
1314 +caller-path@^0.1.0:
1315 + version "0.1.0"
1316 + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
1317 + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
1318 + dependencies:
1319 + callsites "^0.2.0"
1320 +
1321 +callsites@^0.2.0:
1322 + version "0.2.0"
1323 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
1324 + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
1325 +
1326 +callsites@^2.0.0:
1327 + version "2.0.0"
1328 + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
1329 + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
1330 +
1331 +camel-case@3.0.x:
1332 + version "3.0.0"
1333 + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
1334 + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
1335 + dependencies:
1336 + no-case "^2.2.0"
1337 + upper-case "^1.1.1"
1338 +
1339 +camelcase@^1.0.2:
1340 + version "1.2.1"
1341 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
1342 + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
1343 +
1344 +camelcase@^3.0.0:
1345 + version "3.0.0"
1346 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
1347 + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
1348 +
1349 +caniuse-api@^1.5.2:
1350 + version "1.6.1"
1351 + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
1352 + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
1353 + dependencies:
1354 + browserslist "^1.3.6"
1355 + caniuse-db "^1.0.30000529"
1356 + lodash.memoize "^4.1.2"
1357 + lodash.uniq "^4.5.0"
1358 +
1359 +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000618, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
1360 + version "1.0.30001208"
1361 + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001208.tgz#8ddfaddceab26486ffe3f258e5cc43d4fa8728d4"
1362 + integrity sha512-GAfBXnzg9WDo0z/Noiio2KknZzxbrqQhbYMwPDb9ZEbVwttGA2T1+LqSt7enFdzbu7ykYuNfswgXJW7vdaUfZQ==
1363 +
1364 +cardinal@^2.1.1:
1365 + version "2.1.1"
1366 + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505"
1367 + integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU=
1368 + dependencies:
1369 + ansicolors "~0.3.2"
1370 + redeyed "~2.1.0"
1371 +
1372 +case-sensitive-paths-webpack-plugin@1.1.4:
1373 + version "1.1.4"
1374 + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-1.1.4.tgz#8aaedd5699a86cac2b34cf40d9b4145758978472"
1375 + integrity sha1-iq7dVpmobKwrNM9A2bQUV1iXhHI=
1376 +
1377 +caseless@~0.12.0:
1378 + version "0.12.0"
1379 + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
1380 + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
1381 +
1382 +center-align@^0.1.1:
1383 + version "0.1.3"
1384 + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
1385 + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
1386 + dependencies:
1387 + align-text "^0.1.3"
1388 + lazy-cache "^1.0.3"
1389 +
1390 +chalk@0.5.1:
1391 + version "0.5.1"
1392 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
1393 + integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=
1394 + dependencies:
1395 + ansi-styles "^1.1.0"
1396 + escape-string-regexp "^1.0.0"
1397 + has-ansi "^0.1.0"
1398 + strip-ansi "^0.3.0"
1399 + supports-color "^0.2.0"
1400 +
1401 +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
1402 + version "1.1.3"
1403 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
1404 + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
1405 + dependencies:
1406 + ansi-styles "^2.2.1"
1407 + escape-string-regexp "^1.0.2"
1408 + has-ansi "^2.0.0"
1409 + strip-ansi "^3.0.0"
1410 + supports-color "^2.0.0"
1411 +
1412 +chalk@^2.4.1:
1413 + version "2.4.2"
1414 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
1415 + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
1416 + dependencies:
1417 + ansi-styles "^3.2.1"
1418 + escape-string-regexp "^1.0.5"
1419 + supports-color "^5.3.0"
1420 +
1421 +chokidar@^1.0.0:
1422 + version "1.7.0"
1423 + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
1424 + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=
1425 + dependencies:
1426 + anymatch "^1.3.0"
1427 + async-each "^1.0.0"
1428 + glob-parent "^2.0.0"
1429 + inherits "^2.0.1"
1430 + is-binary-path "^1.0.0"
1431 + is-glob "^2.0.0"
1432 + path-is-absolute "^1.0.0"
1433 + readdirp "^2.0.0"
1434 + optionalDependencies:
1435 + fsevents "^1.0.0"
1436 +
1437 +ci-info@^1.5.0:
1438 + version "1.6.0"
1439 + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
1440 + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
1441 +
1442 +circular-json@^0.3.1:
1443 + version "0.3.3"
1444 + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
1445 + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
1446 +
1447 +clap@^1.0.9:
1448 + version "1.2.3"
1449 + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
1450 + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
1451 + dependencies:
1452 + chalk "^1.1.3"
1453 +
1454 +class-utils@^0.3.5:
1455 + version "0.3.6"
1456 + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
1457 + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
1458 + dependencies:
1459 + arr-union "^3.1.0"
1460 + define-property "^0.2.5"
1461 + isobject "^3.0.0"
1462 + static-extend "^0.1.1"
1463 +
1464 +clean-css@4.2.x:
1465 + version "4.2.3"
1466 + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78"
1467 + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==
1468 + dependencies:
1469 + source-map "~0.6.0"
1470 +
1471 +cli-cursor@^1.0.1:
1472 + version "1.0.2"
1473 + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
1474 + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=
1475 + dependencies:
1476 + restore-cursor "^1.0.1"
1477 +
1478 +cli-table@^0.3.1:
1479 + version "0.3.6"
1480 + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc"
1481 + integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==
1482 + dependencies:
1483 + colors "1.0.3"
1484 +
1485 +cli-usage@^0.1.1:
1486 + version "0.1.10"
1487 + resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.10.tgz#2c9d30a3824b48d161580a8f8d5dfe53d66b00d2"
1488 + integrity sha512-Q/s1S4Jz5LYI0LQ+XiFQCXkhMzn244ddyIffni8JIq/kL95DvQomVQ0cJC41c76hH9/FmZGY7rZB53y/bXHtRA==
1489 + dependencies:
1490 + marked "^0.7.0"
1491 + marked-terminal "^3.3.0"
1492 +
1493 +cli-width@^2.0.0:
1494 + version "2.2.1"
1495 + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
1496 + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
1497 +
1498 +cliui@^2.1.0:
1499 + version "2.1.0"
1500 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
1501 + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
1502 + dependencies:
1503 + center-align "^0.1.1"
1504 + right-align "^0.1.1"
1505 + wordwrap "0.0.2"
1506 +
1507 +cliui@^3.2.0:
1508 + version "3.2.0"
1509 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
1510 + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
1511 + dependencies:
1512 + string-width "^1.0.1"
1513 + strip-ansi "^3.0.1"
1514 + wrap-ansi "^2.0.0"
1515 +
1516 +clone@^1.0.2:
1517 + version "1.0.4"
1518 + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
1519 + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
1520 +
1521 +co@^4.6.0:
1522 + version "4.6.0"
1523 + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
1524 + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
1525 +
1526 +coa@~1.0.1:
1527 + version "1.0.4"
1528 + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
1529 + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
1530 + dependencies:
1531 + q "^1.1.2"
1532 +
1533 +code-point-at@^1.0.0:
1534 + version "1.1.0"
1535 + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
1536 + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
1537 +
1538 +collection-visit@^1.0.0:
1539 + version "1.0.0"
1540 + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
1541 + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
1542 + dependencies:
1543 + map-visit "^1.0.0"
1544 + object-visit "^1.0.0"
1545 +
1546 +color-convert@^1.3.0, color-convert@^1.9.0:
1547 + version "1.9.3"
1548 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
1549 + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
1550 + dependencies:
1551 + color-name "1.1.3"
1552 +
1553 +color-name@1.1.3:
1554 + version "1.1.3"
1555 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
1556 + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
1557 +
1558 +color-name@^1.0.0:
1559 + version "1.1.4"
1560 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
1561 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
1562 +
1563 +color-string@^0.3.0:
1564 + version "0.3.0"
1565 + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
1566 + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
1567 + dependencies:
1568 + color-name "^1.0.0"
1569 +
1570 +color@^0.11.0:
1571 + version "0.11.4"
1572 + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
1573 + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=
1574 + dependencies:
1575 + clone "^1.0.2"
1576 + color-convert "^1.3.0"
1577 + color-string "^0.3.0"
1578 +
1579 +colormin@^1.0.5:
1580 + version "1.1.2"
1581 + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
1582 + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
1583 + dependencies:
1584 + color "^0.11.0"
1585 + css-color-names "0.0.4"
1586 + has "^1.0.1"
1587 +
1588 +colors@1.0.3:
1589 + version "1.0.3"
1590 + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
1591 + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
1592 +
1593 +colors@~1.1.2:
1594 + version "1.1.2"
1595 + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
1596 + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
1597 +
1598 +combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6:
1599 + version "1.0.8"
1600 + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
1601 + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
1602 + dependencies:
1603 + delayed-stream "~1.0.0"
1604 +
1605 +commander@2.17.x:
1606 + version "2.17.1"
1607 + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
1608 + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
1609 +
1610 +commander@2.6.0:
1611 + version "2.6.0"
1612 + resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d"
1613 + integrity sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=
1614 +
1615 +commander@~2.19.0:
1616 + version "2.19.0"
1617 + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
1618 + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
1619 +
1620 +commondir@^1.0.1:
1621 + version "1.0.1"
1622 + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
1623 + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
1624 +
1625 +component-emitter@^1.2.1:
1626 + version "1.3.0"
1627 + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
1628 + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
1629 +
1630 +compressible@~2.0.16:
1631 + version "2.0.18"
1632 + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
1633 + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
1634 + dependencies:
1635 + mime-db ">= 1.43.0 < 2"
1636 +
1637 +compression@^1.5.2:
1638 + version "1.7.4"
1639 + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
1640 + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
1641 + dependencies:
1642 + accepts "~1.3.5"
1643 + bytes "3.0.0"
1644 + compressible "~2.0.16"
1645 + debug "2.6.9"
1646 + on-headers "~1.0.2"
1647 + safe-buffer "5.1.2"
1648 + vary "~1.1.2"
1649 +
1650 +concat-map@0.0.1:
1651 + version "0.0.1"
1652 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1653 + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
1654 +
1655 +concat-stream@^1.4.6:
1656 + version "1.6.2"
1657 + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
1658 + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
1659 + dependencies:
1660 + buffer-from "^1.0.0"
1661 + inherits "^2.0.3"
1662 + readable-stream "^2.2.2"
1663 + typedarray "^0.0.6"
1664 +
1665 +concurrently@3.1.0:
1666 + version "3.1.0"
1667 + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-3.1.0.tgz#dc5ef0459090012604756668894c04b434ef90d1"
1668 + integrity sha1-3F7wRZCQASYEdWZoiUwEtDTvkNE=
1669 + dependencies:
1670 + bluebird "2.9.6"
1671 + chalk "0.5.1"
1672 + commander "2.6.0"
1673 + lodash "^4.5.1"
1674 + moment "^2.11.2"
1675 + rx "2.3.24"
1676 + spawn-default-shell "^1.1.0"
1677 + tree-kill "^1.1.0"
1678 +
1679 +connect-history-api-fallback@1.3.0:
1680 + version "1.3.0"
1681 + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
1682 + integrity sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=
1683 +
1684 +connect-history-api-fallback@^1.3.0:
1685 + version "1.6.0"
1686 + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
1687 + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
1688 +
1689 +console-browserify@^1.1.0:
1690 + version "1.2.0"
1691 + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
1692 + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
1693 +
1694 +console-control-strings@^1.0.0, console-control-strings@~1.1.0:
1695 + version "1.1.0"
1696 + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
1697 + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
1698 +
1699 +constants-browserify@^1.0.0:
1700 + version "1.0.0"
1701 + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
1702 + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
1703 +
1704 +contains-path@^0.1.0:
1705 + version "0.1.0"
1706 + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
1707 + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
1708 +
1709 +content-disposition@0.5.3:
1710 + version "0.5.3"
1711 + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
1712 + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
1713 + dependencies:
1714 + safe-buffer "5.1.2"
1715 +
1716 +content-type-parser@^1.0.1:
1717 + version "1.0.2"
1718 + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
1719 + integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==
1720 +
1721 +content-type@~1.0.4:
1722 + version "1.0.4"
1723 + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
1724 + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
1725 +
1726 +convert-source-map@^1.1.0, convert-source-map@^1.5.1:
1727 + version "1.7.0"
1728 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
1729 + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
1730 + dependencies:
1731 + safe-buffer "~5.1.1"
1732 +
1733 +cookie-signature@1.0.6:
1734 + version "1.0.6"
1735 + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
1736 + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
1737 +
1738 +cookie@0.4.0:
1739 + version "0.4.0"
1740 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
1741 + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
1742 +
1743 +copy-descriptor@^0.1.0:
1744 + version "0.1.1"
1745 + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
1746 + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
1747 +
1748 +core-js@^2.4.0, core-js@^2.5.0:
1749 + version "2.6.12"
1750 + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
1751 + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
1752 +
1753 +core-util-is@1.0.2, core-util-is@~1.0.0:
1754 + version "1.0.2"
1755 + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
1756 + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
1757 +
1758 +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
1759 + version "2.2.2"
1760 + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
1761 + integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==
1762 + dependencies:
1763 + is-directory "^0.3.1"
1764 + js-yaml "^3.4.3"
1765 + minimist "^1.2.0"
1766 + object-assign "^4.1.0"
1767 + os-homedir "^1.0.1"
1768 + parse-json "^2.2.0"
1769 + require-from-string "^1.1.0"
1770 +
1771 +cross-spawn@4.0.2:
1772 + version "4.0.2"
1773 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
1774 + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=
1775 + dependencies:
1776 + lru-cache "^4.0.1"
1777 + which "^1.2.9"
1778 +
1779 +cryptiles@2.x.x:
1780 + version "2.0.5"
1781 + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
1782 + integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
1783 + dependencies:
1784 + boom "2.x.x"
1785 +
1786 +crypto-browserify@3.3.0:
1787 + version "3.3.0"
1788 + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
1789 + integrity sha1-ufx1u0oO1h3PHNXa6W6zDJw+UGw=
1790 + dependencies:
1791 + browserify-aes "0.4.0"
1792 + pbkdf2-compat "2.0.1"
1793 + ripemd160 "0.2.0"
1794 + sha.js "2.2.6"
1795 +
1796 +css-color-names@0.0.4:
1797 + version "0.0.4"
1798 + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
1799 + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
1800 +
1801 +css-loader@0.26.1:
1802 + version "0.26.1"
1803 + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.1.tgz#2ba7f20131b93597496b3e9bb500785a49cd29ea"
1804 + integrity sha1-K6fyATG5NZdJaz6btQB4WknNKeo=
1805 + dependencies:
1806 + babel-code-frame "^6.11.0"
1807 + css-selector-tokenizer "^0.7.0"
1808 + cssnano ">=2.6.1 <4"
1809 + loader-utils "~0.2.2"
1810 + lodash.camelcase "^4.3.0"
1811 + object-assign "^4.0.1"
1812 + postcss "^5.0.6"
1813 + postcss-modules-extract-imports "^1.0.0"
1814 + postcss-modules-local-by-default "^1.0.1"
1815 + postcss-modules-scope "^1.0.0"
1816 + postcss-modules-values "^1.1.0"
1817 + source-list-map "^0.1.4"
1818 +
1819 +css-select@^2.0.2:
1820 + version "2.1.0"
1821 + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef"
1822 + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==
1823 + dependencies:
1824 + boolbase "^1.0.0"
1825 + css-what "^3.2.1"
1826 + domutils "^1.7.0"
1827 + nth-check "^1.0.2"
1828 +
1829 +css-selector-tokenizer@^0.7.0:
1830 + version "0.7.3"
1831 + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1"
1832 + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==
1833 + dependencies:
1834 + cssesc "^3.0.0"
1835 + fastparse "^1.1.2"
1836 +
1837 +css-what@^3.2.1:
1838 + version "3.4.2"
1839 + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4"
1840 + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==
1841 +
1842 +cssesc@^3.0.0:
1843 + version "3.0.0"
1844 + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
1845 + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
1846 +
1847 +"cssnano@>=2.6.1 <4":
1848 + version "3.10.0"
1849 + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
1850 + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
1851 + dependencies:
1852 + autoprefixer "^6.3.1"
1853 + decamelize "^1.1.2"
1854 + defined "^1.0.0"
1855 + has "^1.0.1"
1856 + object-assign "^4.0.1"
1857 + postcss "^5.0.14"
1858 + postcss-calc "^5.2.0"
1859 + postcss-colormin "^2.1.8"
1860 + postcss-convert-values "^2.3.4"
1861 + postcss-discard-comments "^2.0.4"
1862 + postcss-discard-duplicates "^2.0.1"
1863 + postcss-discard-empty "^2.0.1"
1864 + postcss-discard-overridden "^0.1.1"
1865 + postcss-discard-unused "^2.2.1"
1866 + postcss-filter-plugins "^2.0.0"
1867 + postcss-merge-idents "^2.1.5"
1868 + postcss-merge-longhand "^2.0.1"
1869 + postcss-merge-rules "^2.0.3"
1870 + postcss-minify-font-values "^1.0.2"
1871 + postcss-minify-gradients "^1.0.1"
1872 + postcss-minify-params "^1.0.4"
1873 + postcss-minify-selectors "^2.0.4"
1874 + postcss-normalize-charset "^1.1.0"
1875 + postcss-normalize-url "^3.0.7"
1876 + postcss-ordered-values "^2.1.0"
1877 + postcss-reduce-idents "^2.2.2"
1878 + postcss-reduce-initial "^1.0.0"
1879 + postcss-reduce-transforms "^1.0.3"
1880 + postcss-svgo "^2.1.1"
1881 + postcss-unique-selectors "^2.0.2"
1882 + postcss-value-parser "^3.2.3"
1883 + postcss-zindex "^2.0.1"
1884 +
1885 +csso@~2.3.1:
1886 + version "2.3.2"
1887 + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
1888 + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=
1889 + dependencies:
1890 + clap "^1.0.9"
1891 + source-map "^0.5.3"
1892 +
1893 +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
1894 + version "0.3.8"
1895 + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
1896 + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
1897 +
1898 +"cssstyle@>= 0.2.37 < 0.3.0":
1899 + version "0.2.37"
1900 + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
1901 + integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
1902 + dependencies:
1903 + cssom "0.3.x"
1904 +
1905 +d@1, d@^1.0.1:
1906 + version "1.0.1"
1907 + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
1908 + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
1909 + dependencies:
1910 + es5-ext "^0.10.50"
1911 + type "^1.0.1"
1912 +
1913 +damerau-levenshtein@^1.0.0:
1914 + version "1.0.6"
1915 + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791"
1916 + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==
1917 +
1918 +dashdash@^1.12.0:
1919 + version "1.14.1"
1920 + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
1921 + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
1922 + dependencies:
1923 + assert-plus "^1.0.0"
1924 +
1925 +debug@2.2.0:
1926 + version "2.2.0"
1927 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
1928 + integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=
1929 + dependencies:
1930 + ms "0.7.1"
1931 +
1932 +debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9:
1933 + version "2.6.9"
1934 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
1935 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1936 + dependencies:
1937 + ms "2.0.0"
1938 +
1939 +debug@^3.1.0, debug@^3.2.6:
1940 + version "3.2.7"
1941 + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
1942 + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
1943 + dependencies:
1944 + ms "^2.1.1"
1945 +
1946 +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
1947 + version "1.2.0"
1948 + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
1949 + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
1950 +
1951 +decode-uri-component@^0.2.0:
1952 + version "0.2.2"
1953 + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
1954 + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
1955 +
1956 +deep-extend@^0.6.0:
1957 + version "0.6.0"
1958 + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
1959 + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
1960 +
1961 +deep-is@~0.1.3:
1962 + version "0.1.3"
1963 + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
1964 + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
1965 +
1966 +default-require-extensions@^1.0.0:
1967 + version "1.0.0"
1968 + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
1969 + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
1970 + dependencies:
1971 + strip-bom "^2.0.0"
1972 +
1973 +define-property@^0.2.5:
1974 + version "0.2.5"
1975 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
1976 + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
1977 + dependencies:
1978 + is-descriptor "^0.1.0"
1979 +
1980 +define-property@^1.0.0:
1981 + version "1.0.0"
1982 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
1983 + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
1984 + dependencies:
1985 + is-descriptor "^1.0.0"
1986 +
1987 +define-property@^2.0.2:
1988 + version "2.0.2"
1989 + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
1990 + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
1991 + dependencies:
1992 + is-descriptor "^1.0.2"
1993 + isobject "^3.0.1"
1994 +
1995 +defined@^1.0.0:
1996 + version "1.0.0"
1997 + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
1998 + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
1999 +
2000 +delayed-stream@~1.0.0:
2001 + version "1.0.0"
2002 + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
2003 + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
2004 +
2005 +delegates@^1.0.0:
2006 + version "1.0.0"
2007 + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
2008 + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
2009 +
2010 +depd@~1.1.2:
2011 + version "1.1.2"
2012 + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
2013 + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
2014 +
2015 +destroy@~1.0.4:
2016 + version "1.0.4"
2017 + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
2018 + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
2019 +
2020 +detect-indent@^4.0.0:
2021 + version "4.0.0"
2022 + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
2023 + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
2024 + dependencies:
2025 + repeating "^2.0.0"
2026 +
2027 +detect-libc@^1.0.2:
2028 + version "1.0.3"
2029 + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
2030 + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
2031 +
2032 +detect-port@1.1.0:
2033 + version "1.1.0"
2034 + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.1.0.tgz#fde7574591ea3de74445782643c3f921b2a4618c"
2035 + integrity sha1-/edXRZHqPedERXgmQ8P5IbKkYYw=
2036 + dependencies:
2037 + debug "^2.6.0"
2038 +
2039 +diff@^3.0.0:
2040 + version "3.5.0"
2041 + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
2042 + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
2043 +
2044 +doctrine@1.3.x:
2045 + version "1.3.0"
2046 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.3.0.tgz#13e75682b55518424276f7c173783456ef913d26"
2047 + integrity sha1-E+dWgrVVGEJCdvfBc3g0Vu+RPSY=
2048 + dependencies:
2049 + esutils "^2.0.2"
2050 + isarray "^1.0.0"
2051 +
2052 +doctrine@^1.2.2:
2053 + version "1.5.0"
2054 + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
2055 + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
2056 + dependencies:
2057 + esutils "^2.0.2"
2058 + isarray "^1.0.0"
2059 +
2060 +dom-converter@^0.2:
2061 + version "0.2.0"
2062 + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
2063 + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
2064 + dependencies:
2065 + utila "~0.4"
2066 +
2067 +dom-serializer@0:
2068 + version "0.2.2"
2069 + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
2070 + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
2071 + dependencies:
2072 + domelementtype "^2.0.1"
2073 + entities "^2.0.0"
2074 +
2075 +domain-browser@^1.1.1:
2076 + version "1.2.0"
2077 + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
2078 + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
2079 +
2080 +domelementtype@1, domelementtype@^1.3.1:
2081 + version "1.3.1"
2082 + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
2083 + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
2084 +
2085 +domelementtype@^2.0.1:
2086 + version "2.2.0"
2087 + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57"
2088 + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==
2089 +
2090 +domhandler@^2.3.0:
2091 + version "2.4.2"
2092 + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
2093 + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
2094 + dependencies:
2095 + domelementtype "1"
2096 +
2097 +domutils@^1.5.1, domutils@^1.7.0:
2098 + version "1.7.0"
2099 + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
2100 + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
2101 + dependencies:
2102 + dom-serializer "0"
2103 + domelementtype "1"
2104 +
2105 +dotenv@2.0.0:
2106 + version "2.0.0"
2107 + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-2.0.0.tgz#bd759c357aaa70365e01c96b7b0bec08a6e0d949"
2108 + integrity sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=
2109 +
2110 +duplexer@^0.1.1:
2111 + version "0.1.2"
2112 + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
2113 + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
2114 +
2115 +ecc-jsbn@~0.1.1:
2116 + version "0.1.2"
2117 + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
2118 + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
2119 + dependencies:
2120 + jsbn "~0.1.0"
2121 + safer-buffer "^2.1.0"
2122 +
2123 +ee-first@1.1.1:
2124 + version "1.1.1"
2125 + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
2126 + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
2127 +
2128 +electron-to-chromium@^1.1.0, electron-to-chromium@^1.2.7:
2129 + version "1.3.717"
2130 + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz#78d4c857070755fb58ab64bcc173db1d51cbc25f"
2131 + integrity sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==
2132 +
2133 +emoji-regex@^6.1.0:
2134 + version "6.5.1"
2135 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
2136 + integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==
2137 +
2138 +emojis-list@^2.0.0:
2139 + version "2.1.0"
2140 + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
2141 + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
2142 +
2143 +encodeurl@~1.0.2:
2144 + version "1.0.2"
2145 + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
2146 + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
2147 +
2148 +enhanced-resolve@~0.9.0:
2149 + version "0.9.1"
2150 + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
2151 + integrity sha1-TW5omzcl+GCQknzMhs2fFjW4ni4=
2152 + dependencies:
2153 + graceful-fs "^4.1.2"
2154 + memory-fs "^0.2.0"
2155 + tapable "^0.1.8"
2156 +
2157 +entities@^1.1.1:
2158 + version "1.1.2"
2159 + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
2160 + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
2161 +
2162 +entities@^2.0.0:
2163 + version "2.2.0"
2164 + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
2165 + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
2166 +
2167 +errno@^0.1.3, errno@~0.1.7:
2168 + version "0.1.8"
2169 + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
2170 + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
2171 + dependencies:
2172 + prr "~1.0.1"
2173 +
2174 +error-ex@^1.2.0:
2175 + version "1.3.2"
2176 + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
2177 + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
2178 + dependencies:
2179 + is-arrayish "^0.2.1"
2180 +
2181 +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14:
2182 + version "0.10.53"
2183 + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
2184 + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
2185 + dependencies:
2186 + es6-iterator "~2.0.3"
2187 + es6-symbol "~3.1.3"
2188 + next-tick "~1.0.0"
2189 +
2190 +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
2191 + version "2.0.3"
2192 + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
2193 + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
2194 + dependencies:
2195 + d "1"
2196 + es5-ext "^0.10.35"
2197 + es6-symbol "^3.1.1"
2198 +
2199 +es6-map@^0.1.3:
2200 + version "0.1.5"
2201 + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
2202 + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
2203 + dependencies:
2204 + d "1"
2205 + es5-ext "~0.10.14"
2206 + es6-iterator "~2.0.1"
2207 + es6-set "~0.1.5"
2208 + es6-symbol "~3.1.1"
2209 + event-emitter "~0.3.5"
2210 +
2211 +es6-set@~0.1.5:
2212 + version "0.1.5"
2213 + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
2214 + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
2215 + dependencies:
2216 + d "1"
2217 + es5-ext "~0.10.14"
2218 + es6-iterator "~2.0.1"
2219 + es6-symbol "3.1.1"
2220 + event-emitter "~0.3.5"
2221 +
2222 +es6-symbol@3.1.1:
2223 + version "3.1.1"
2224 + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
2225 + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
2226 + dependencies:
2227 + d "1"
2228 + es5-ext "~0.10.14"
2229 +
2230 +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3:
2231 + version "3.1.3"
2232 + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
2233 + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
2234 + dependencies:
2235 + d "^1.0.1"
2236 + ext "^1.1.2"
2237 +
2238 +es6-weak-map@^2.0.1:
2239 + version "2.0.3"
2240 + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
2241 + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
2242 + dependencies:
2243 + d "1"
2244 + es5-ext "^0.10.46"
2245 + es6-iterator "^2.0.3"
2246 + es6-symbol "^3.1.1"
2247 +
2248 +escape-html@~1.0.3:
2249 + version "1.0.3"
2250 + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
2251 + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
2252 +
2253 +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
2254 + version "1.0.5"
2255 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
2256 + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
2257 +
2258 +escodegen@^1.6.1:
2259 + version "1.14.3"
2260 + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
2261 + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
2262 + dependencies:
2263 + esprima "^4.0.1"
2264 + estraverse "^4.2.0"
2265 + esutils "^2.0.2"
2266 + optionator "^0.8.1"
2267 + optionalDependencies:
2268 + source-map "~0.6.1"
2269 +
2270 +escope@^3.6.0:
2271 + version "3.6.0"
2272 + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
2273 + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
2274 + dependencies:
2275 + es6-map "^0.1.3"
2276 + es6-weak-map "^2.0.1"
2277 + esrecurse "^4.1.0"
2278 + estraverse "^4.1.1"
2279 +
2280 +eslint-config-react-app@^0.6.2:
2281 + version "0.6.2"
2282 + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-0.6.2.tgz#ee535cbaaf9e3576ea16b99afe720353d8730ec0"
2283 + integrity sha1-7lNcuq+eNXbqFrma/nIDU9hzDsA=
2284 +
2285 +eslint-import-resolver-node@^0.2.0:
2286 + version "0.2.3"
2287 + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
2288 + integrity sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=
2289 + dependencies:
2290 + debug "^2.2.0"
2291 + object-assign "^4.0.1"
2292 + resolve "^1.1.6"
2293 +
2294 +eslint-loader@1.6.0:
2295 + version "1.6.0"
2296 + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.6.0.tgz#38f9a1e6c602a4f1f3f3516289726e5d26e6e165"
2297 + integrity sha1-OPmh5sYCpPHz81FiiXJuXSbm4WU=
2298 + dependencies:
2299 + find-cache-dir "^0.1.1"
2300 + loader-utils "^0.2.7"
2301 + object-assign "^4.0.1"
2302 +
2303 +eslint-module-utils@^1.0.0:
2304 + version "1.0.0"
2305 + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-1.0.0.tgz#c4a57fd3a53efd8426cc2d5550aadab9bbd05fd0"
2306 + integrity sha1-xKV/06U+/YQmzC1VUKraubvQX9A=
2307 + dependencies:
2308 + debug "2.2.0"
2309 + pkg-dir "^1.0.0"
2310 +
2311 +eslint-plugin-flowtype@2.21.0:
2312 + version "2.21.0"
2313 + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.21.0.tgz#a47e85abcdd181d37a336054bd552149ae387d9c"
2314 + integrity sha1-pH6Fq83RgdN6M2BUvVUhSa44fZw=
2315 + dependencies:
2316 + lodash "^4.15.0"
2317 +
2318 +eslint-plugin-import@2.0.1:
2319 + version "2.0.1"
2320 + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.0.1.tgz#dcfe96357d476b3f822570d42c29bec66f5d9c5c"
2321 + integrity sha1-3P6WNX1Haz+CJXDULCm+xm9dnFw=
2322 + dependencies:
2323 + builtin-modules "^1.1.1"
2324 + contains-path "^0.1.0"
2325 + debug "^2.2.0"
2326 + doctrine "1.3.x"
2327 + eslint-import-resolver-node "^0.2.0"
2328 + eslint-module-utils "^1.0.0"
2329 + has "^1.0.1"
2330 + lodash.cond "^4.3.0"
2331 + minimatch "^3.0.3"
2332 + pkg-up "^1.0.0"
2333 +
2334 +eslint-plugin-jsx-a11y@4.0.0:
2335 + version "4.0.0"
2336 + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee"
2337 + integrity sha1-d5uw/nsI2lZKQiYkkR3hAGHgSO4=
2338 + dependencies:
2339 + aria-query "^0.3.0"
2340 + ast-types-flow "0.0.7"
2341 + damerau-levenshtein "^1.0.0"
2342 + emoji-regex "^6.1.0"
2343 + jsx-ast-utils "^1.0.0"
2344 + object-assign "^4.0.1"
2345 +
2346 +eslint-plugin-react@6.4.1:
2347 + version "6.4.1"
2348 + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.4.1.tgz#7d1aade747db15892f71eee1fea4addf97bcfa2b"
2349 + integrity sha1-fRqt50fbFYkvce7h/qSt35e8+is=
2350 + dependencies:
2351 + doctrine "^1.2.2"
2352 + jsx-ast-utils "^1.3.1"
2353 +
2354 +eslint@3.16.1:
2355 + version "3.16.1"
2356 + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609"
2357 + integrity sha1-m8MfxzQWks93LoBgdQj2fXEcVgk=
2358 + dependencies:
2359 + babel-code-frame "^6.16.0"
2360 + chalk "^1.1.3"
2361 + concat-stream "^1.4.6"
2362 + debug "^2.1.1"
2363 + doctrine "^1.2.2"
2364 + escope "^3.6.0"
2365 + espree "^3.4.0"
2366 + estraverse "^4.2.0"
2367 + esutils "^2.0.2"
2368 + file-entry-cache "^2.0.0"
2369 + glob "^7.0.3"
2370 + globals "^9.14.0"
2371 + ignore "^3.2.0"
2372 + imurmurhash "^0.1.4"
2373 + inquirer "^0.12.0"
2374 + is-my-json-valid "^2.10.0"
2375 + is-resolvable "^1.0.0"
2376 + js-yaml "^3.5.1"
2377 + json-stable-stringify "^1.0.0"
2378 + levn "^0.3.0"
2379 + lodash "^4.0.0"
2380 + mkdirp "^0.5.0"
2381 + natural-compare "^1.4.0"
2382 + optionator "^0.8.2"
2383 + path-is-inside "^1.0.1"
2384 + pluralize "^1.2.1"
2385 + progress "^1.1.8"
2386 + require-uncached "^1.0.2"
2387 + shelljs "^0.7.5"
2388 + strip-bom "^3.0.0"
2389 + strip-json-comments "~2.0.1"
2390 + table "^3.7.8"
2391 + text-table "~0.2.0"
2392 + user-home "^2.0.0"
2393 +
2394 +espree@^3.4.0:
2395 + version "3.5.4"
2396 + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
2397 + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
2398 + dependencies:
2399 + acorn "^5.5.0"
2400 + acorn-jsx "^3.0.0"
2401 +
2402 +esprima@^2.6.0:
2403 + version "2.7.3"
2404 + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
2405 + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
2406 +
2407 +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
2408 + version "4.0.1"
2409 + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
2410 + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
2411 +
2412 +esrecurse@^4.1.0:
2413 + version "4.3.0"
2414 + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
2415 + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
2416 + dependencies:
2417 + estraverse "^5.2.0"
2418 +
2419 +estraverse@^4.1.1, estraverse@^4.2.0:
2420 + version "4.3.0"
2421 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
2422 + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
2423 +
2424 +estraverse@^5.2.0:
2425 + version "5.2.0"
2426 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
2427 + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
2428 +
2429 +esutils@^2.0.2:
2430 + version "2.0.3"
2431 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
2432 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
2433 +
2434 +etag@~1.8.1:
2435 + version "1.8.1"
2436 + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
2437 + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
2438 +
2439 +event-emitter@~0.3.5:
2440 + version "0.3.5"
2441 + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
2442 + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
2443 + dependencies:
2444 + d "1"
2445 + es5-ext "~0.10.14"
2446 +
2447 +eventemitter3@^4.0.0:
2448 + version "4.0.7"
2449 + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
2450 + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
2451 +
2452 +events@^1.0.0:
2453 + version "1.1.1"
2454 + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
2455 + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
2456 +
2457 +eventsource@^0.1.3:
2458 + version "0.1.6"
2459 + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
2460 + integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=
2461 + dependencies:
2462 + original ">=0.0.5"
2463 +
2464 +eventsource@^1.0.7:
2465 + version "1.1.0"
2466 + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf"
2467 + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==
2468 + dependencies:
2469 + original "^1.0.0"
2470 +
2471 +exec-sh@^0.2.0:
2472 + version "0.2.2"
2473 + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
2474 + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
2475 + dependencies:
2476 + merge "^1.2.0"
2477 +
2478 +exit-hook@^1.0.0:
2479 + version "1.1.1"
2480 + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
2481 + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=
2482 +
2483 +expand-brackets@^0.1.4:
2484 + version "0.1.5"
2485 + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
2486 + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
2487 + dependencies:
2488 + is-posix-bracket "^0.1.0"
2489 +
2490 +expand-brackets@^2.1.4:
2491 + version "2.1.4"
2492 + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
2493 + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
2494 + dependencies:
2495 + debug "^2.3.3"
2496 + define-property "^0.2.5"
2497 + extend-shallow "^2.0.1"
2498 + posix-character-classes "^0.1.0"
2499 + regex-not "^1.0.0"
2500 + snapdragon "^0.8.1"
2501 + to-regex "^3.0.1"
2502 +
2503 +expand-range@^1.8.1:
2504 + version "1.8.2"
2505 + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
2506 + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
2507 + dependencies:
2508 + fill-range "^2.1.0"
2509 +
2510 +express@^4.13.3, express@^4.14.0:
2511 + version "4.17.1"
2512 + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
2513 + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
2514 + dependencies:
2515 + accepts "~1.3.7"
2516 + array-flatten "1.1.1"
2517 + body-parser "1.19.0"
2518 + content-disposition "0.5.3"
2519 + content-type "~1.0.4"
2520 + cookie "0.4.0"
2521 + cookie-signature "1.0.6"
2522 + debug "2.6.9"
2523 + depd "~1.1.2"
2524 + encodeurl "~1.0.2"
2525 + escape-html "~1.0.3"
2526 + etag "~1.8.1"
2527 + finalhandler "~1.1.2"
2528 + fresh "0.5.2"
2529 + merge-descriptors "1.0.1"
2530 + methods "~1.1.2"
2531 + on-finished "~2.3.0"
2532 + parseurl "~1.3.3"
2533 + path-to-regexp "0.1.7"
2534 + proxy-addr "~2.0.5"
2535 + qs "6.7.0"
2536 + range-parser "~1.2.1"
2537 + safe-buffer "5.1.2"
2538 + send "0.17.1"
2539 + serve-static "1.14.1"
2540 + setprototypeof "1.1.1"
2541 + statuses "~1.5.0"
2542 + type-is "~1.6.18"
2543 + utils-merge "1.0.1"
2544 + vary "~1.1.2"
2545 +
2546 +ext@^1.1.2:
2547 + version "1.4.0"
2548 + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
2549 + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
2550 + dependencies:
2551 + type "^2.0.0"
2552 +
2553 +extend-shallow@^2.0.1:
2554 + version "2.0.1"
2555 + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
2556 + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
2557 + dependencies:
2558 + is-extendable "^0.1.0"
2559 +
2560 +extend-shallow@^3.0.0, extend-shallow@^3.0.2:
2561 + version "3.0.2"
2562 + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
2563 + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
2564 + dependencies:
2565 + assign-symbols "^1.0.0"
2566 + is-extendable "^1.0.1"
2567 +
2568 +extend@~3.0.0, extend@~3.0.2:
2569 + version "3.0.2"
2570 + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
2571 + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
2572 +
2573 +extglob@^0.3.1:
2574 + version "0.3.2"
2575 + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
2576 + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
2577 + dependencies:
2578 + is-extglob "^1.0.0"
2579 +
2580 +extglob@^2.0.4:
2581 + version "2.0.4"
2582 + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
2583 + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
2584 + dependencies:
2585 + array-unique "^0.3.2"
2586 + define-property "^1.0.0"
2587 + expand-brackets "^2.1.4"
2588 + extend-shallow "^2.0.1"
2589 + fragment-cache "^0.2.1"
2590 + regex-not "^1.0.0"
2591 + snapdragon "^0.8.1"
2592 + to-regex "^3.0.1"
2593 +
2594 +extract-text-webpack-plugin@1.0.1:
2595 + version "1.0.1"
2596 + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-1.0.1.tgz#c95bf3cbaac49dc96f1dc6e072549fbb654ccd2c"
2597 + integrity sha1-yVvzy6rEnclvHcbgclSfu2VMzSw=
2598 + dependencies:
2599 + async "^1.5.0"
2600 + loader-utils "^0.2.3"
2601 + webpack-sources "^0.1.0"
2602 +
2603 +extsprintf@1.3.0:
2604 + version "1.3.0"
2605 + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
2606 + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
2607 +
2608 +extsprintf@^1.2.0:
2609 + version "1.4.0"
2610 + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
2611 + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
2612 +
2613 +fast-deep-equal@^3.1.1:
2614 + version "3.1.3"
2615 + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
2616 + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
2617 +
2618 +fast-json-stable-stringify@^2.0.0:
2619 + version "2.1.0"
2620 + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
2621 + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
2622 +
2623 +fast-levenshtein@~2.0.6:
2624 + version "2.0.6"
2625 + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
2626 + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
2627 +
2628 +fastparse@^1.1.2:
2629 + version "1.1.2"
2630 + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
2631 + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
2632 +
2633 +faye-websocket@^0.11.3:
2634 + version "0.11.3"
2635 + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
2636 + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
2637 + dependencies:
2638 + websocket-driver ">=0.5.1"
2639 +
2640 +faye-websocket@~0.7.3:
2641 + version "0.7.3"
2642 + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11"
2643 + integrity sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=
2644 + dependencies:
2645 + websocket-driver ">=0.3.6"
2646 +
2647 +fb-watchman@^1.8.0, fb-watchman@^1.9.0:
2648 + version "1.9.2"
2649 + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
2650 + integrity sha1-okz0eCf4LTj7Waaa1wt247auc4M=
2651 + dependencies:
2652 + bser "1.0.2"
2653 +
2654 +figures@^1.3.5:
2655 + version "1.7.0"
2656 + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
2657 + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=
2658 + dependencies:
2659 + escape-string-regexp "^1.0.5"
2660 + object-assign "^4.1.0"
2661 +
2662 +file-entry-cache@^2.0.0:
2663 + version "2.0.0"
2664 + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
2665 + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
2666 + dependencies:
2667 + flat-cache "^1.2.1"
2668 + object-assign "^4.0.1"
2669 +
2670 +file-loader@0.10.0:
2671 + version "0.10.0"
2672 + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.0.tgz#bbe6db7474ac92c7f54fdc197cf547e98b6b8e12"
2673 + integrity sha1-u+bbdHSsksf1T9wZfPVH6YtrjhI=
2674 + dependencies:
2675 + loader-utils "~0.2.5"
2676 +
2677 +file-uri-to-path@1.0.0:
2678 + version "1.0.0"
2679 + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
2680 + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
2681 +
2682 +filename-regex@^2.0.0:
2683 + version "2.0.1"
2684 + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
2685 + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
2686 +
2687 +fileset@^2.0.2:
2688 + version "2.0.3"
2689 + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
2690 + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
2691 + dependencies:
2692 + glob "^7.0.3"
2693 + minimatch "^3.0.3"
2694 +
2695 +filesize@3.3.0:
2696 + version "3.3.0"
2697 + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122"
2698 + integrity sha1-UxSeo0YOOy4CSWKlFkiqVyz5gSI=
2699 +
2700 +fill-range@^2.1.0:
2701 + version "2.2.4"
2702 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
2703 + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
2704 + dependencies:
2705 + is-number "^2.1.0"
2706 + isobject "^2.0.0"
2707 + randomatic "^3.0.0"
2708 + repeat-element "^1.1.2"
2709 + repeat-string "^1.5.2"
2710 +
2711 +fill-range@^4.0.0:
2712 + version "4.0.0"
2713 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
2714 + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
2715 + dependencies:
2716 + extend-shallow "^2.0.1"
2717 + is-number "^3.0.0"
2718 + repeat-string "^1.6.1"
2719 + to-regex-range "^2.1.0"
2720 +
2721 +finalhandler@~1.1.2:
2722 + version "1.1.2"
2723 + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
2724 + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
2725 + dependencies:
2726 + debug "2.6.9"
2727 + encodeurl "~1.0.2"
2728 + escape-html "~1.0.3"
2729 + on-finished "~2.3.0"
2730 + parseurl "~1.3.3"
2731 + statuses "~1.5.0"
2732 + unpipe "~1.0.0"
2733 +
2734 +find-cache-dir@^0.1.1:
2735 + version "0.1.1"
2736 + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
2737 + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
2738 + dependencies:
2739 + commondir "^1.0.1"
2740 + mkdirp "^0.5.1"
2741 + pkg-dir "^1.0.0"
2742 +
2743 +find-up@^1.0.0, find-up@^1.1.2:
2744 + version "1.1.2"
2745 + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
2746 + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
2747 + dependencies:
2748 + path-exists "^2.0.0"
2749 + pinkie-promise "^2.0.0"
2750 +
2751 +flat-cache@^1.2.1:
2752 + version "1.3.4"
2753 + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
2754 + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
2755 + dependencies:
2756 + circular-json "^0.3.1"
2757 + graceful-fs "^4.1.2"
2758 + rimraf "~2.6.2"
2759 + write "^0.2.1"
2760 +
2761 +flatten@^1.0.2:
2762 + version "1.0.3"
2763 + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b"
2764 + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==
2765 +
2766 +follow-redirects@^1.0.0:
2767 + version "1.15.6"
2768 + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
2769 + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
2770 +
2771 +for-in@^1.0.1, for-in@^1.0.2:
2772 + version "1.0.2"
2773 + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
2774 + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
2775 +
2776 +for-own@^0.1.4:
2777 + version "0.1.5"
2778 + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
2779 + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
2780 + dependencies:
2781 + for-in "^1.0.1"
2782 +
2783 +forever-agent@~0.6.1:
2784 + version "0.6.1"
2785 + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
2786 + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
2787 +
2788 +form-data@~2.1.1:
2789 + version "2.1.4"
2790 + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
2791 + integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=
2792 + dependencies:
2793 + asynckit "^0.4.0"
2794 + combined-stream "^1.0.5"
2795 + mime-types "^2.1.12"
2796 +
2797 +form-data@~2.3.2:
2798 + version "2.3.3"
2799 + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
2800 + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
2801 + dependencies:
2802 + asynckit "^0.4.0"
2803 + combined-stream "^1.0.6"
2804 + mime-types "^2.1.12"
2805 +
2806 +forwarded@~0.1.2:
2807 + version "0.1.2"
2808 + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
2809 + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
2810 +
2811 +fragment-cache@^0.2.1:
2812 + version "0.2.1"
2813 + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
2814 + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
2815 + dependencies:
2816 + map-cache "^0.2.2"
2817 +
2818 +fresh@0.5.2:
2819 + version "0.5.2"
2820 + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
2821 + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
2822 +
2823 +fs-extra@0.30.0, fs-extra@^0.30.0:
2824 + version "0.30.0"
2825 + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
2826 + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
2827 + dependencies:
2828 + graceful-fs "^4.1.2"
2829 + jsonfile "^2.1.0"
2830 + klaw "^1.0.0"
2831 + path-is-absolute "^1.0.0"
2832 + rimraf "^2.2.8"
2833 +
2834 +fs.realpath@^1.0.0:
2835 + version "1.0.0"
2836 + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
2837 + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
2838 +
2839 +fsevents@1.0.17:
2840 + version "1.0.17"
2841 + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558"
2842 + integrity sha1-hTfz8SJyZ4dltP1lKMDx9m+PRVg=
2843 + dependencies:
2844 + nan "^2.3.0"
2845 + node-pre-gyp "^0.6.29"
2846 +
2847 +fsevents@^1.0.0:
2848 + version "1.2.13"
2849 + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
2850 + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
2851 + dependencies:
2852 + bindings "^1.5.0"
2853 + nan "^2.12.1"
2854 +
2855 +fstream-ignore@^1.0.5:
2856 + version "1.0.5"
2857 + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
2858 + integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
2859 + dependencies:
2860 + fstream "^1.0.0"
2861 + inherits "2"
2862 + minimatch "^3.0.0"
2863 +
2864 +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.12:
2865 + version "1.0.12"
2866 + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
2867 + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
2868 + dependencies:
2869 + graceful-fs "^4.1.2"
2870 + inherits "~2.0.0"
2871 + mkdirp ">=0.5 0"
2872 + rimraf "2"
2873 +
2874 +function-bind@^1.1.1:
2875 + version "1.1.1"
2876 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
2877 + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
2878 +
2879 +gauge@~2.7.3:
2880 + version "2.7.4"
2881 + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
2882 + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
2883 + dependencies:
2884 + aproba "^1.0.3"
2885 + console-control-strings "^1.0.0"
2886 + has-unicode "^2.0.0"
2887 + object-assign "^4.1.0"
2888 + signal-exit "^3.0.0"
2889 + string-width "^1.0.1"
2890 + strip-ansi "^3.0.1"
2891 + wide-align "^1.1.0"
2892 +
2893 +generate-function@^2.0.0:
2894 + version "2.3.1"
2895 + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
2896 + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
2897 + dependencies:
2898 + is-property "^1.0.2"
2899 +
2900 +generate-object-property@^1.1.0:
2901 + version "1.2.0"
2902 + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
2903 + integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=
2904 + dependencies:
2905 + is-property "^1.0.0"
2906 +
2907 +get-caller-file@^1.0.1:
2908 + version "1.0.3"
2909 + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
2910 + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
2911 +
2912 +get-value@^2.0.3, get-value@^2.0.6:
2913 + version "2.0.6"
2914 + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
2915 + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
2916 +
2917 +getpass@^0.1.1:
2918 + version "0.1.7"
2919 + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
2920 + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
2921 + dependencies:
2922 + assert-plus "^1.0.0"
2923 +
2924 +glob-base@^0.3.0:
2925 + version "0.3.0"
2926 + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
2927 + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
2928 + dependencies:
2929 + glob-parent "^2.0.0"
2930 + is-glob "^2.0.0"
2931 +
2932 +glob-parent@^2.0.0:
2933 + version "2.0.0"
2934 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
2935 + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
2936 + dependencies:
2937 + is-glob "^2.0.0"
2938 +
2939 +glob@^7.0.0, glob@^7.0.3, glob@^7.1.3:
2940 + version "7.1.6"
2941 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
2942 + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
2943 + dependencies:
2944 + fs.realpath "^1.0.0"
2945 + inflight "^1.0.4"
2946 + inherits "2"
2947 + minimatch "^3.0.4"
2948 + once "^1.3.0"
2949 + path-is-absolute "^1.0.0"
2950 +
2951 +globals@^9.14.0, globals@^9.18.0:
2952 + version "9.18.0"
2953 + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
2954 + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
2955 +
2956 +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
2957 + version "4.2.6"
2958 + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
2959 + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
2960 +
2961 +growly@^1.2.0:
2962 + version "1.3.0"
2963 + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
2964 + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
2965 +
2966 +gzip-size@3.0.0:
2967 + version "3.0.0"
2968 + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
2969 + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
2970 + dependencies:
2971 + duplexer "^0.1.1"
2972 +
2973 +handlebars@^4.0.3:
2974 + version "4.7.7"
2975 + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1"
2976 + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==
2977 + dependencies:
2978 + minimist "^1.2.5"
2979 + neo-async "^2.6.0"
2980 + source-map "^0.6.1"
2981 + wordwrap "^1.0.0"
2982 + optionalDependencies:
2983 + uglify-js "^3.1.4"
2984 +
2985 +har-schema@^1.0.5:
2986 + version "1.0.5"
2987 + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
2988 + integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=
2989 +
2990 +har-schema@^2.0.0:
2991 + version "2.0.0"
2992 + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
2993 + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
2994 +
2995 +har-validator@~4.2.1:
2996 + version "4.2.1"
2997 + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
2998 + integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio=
2999 + dependencies:
3000 + ajv "^4.9.1"
3001 + har-schema "^1.0.5"
3002 +
3003 +har-validator@~5.1.3:
3004 + version "5.1.5"
3005 + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
3006 + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
3007 + dependencies:
3008 + ajv "^6.12.3"
3009 + har-schema "^2.0.0"
3010 +
3011 +has-ansi@^0.1.0:
3012 + version "0.1.0"
3013 + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
3014 + integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=
3015 + dependencies:
3016 + ansi-regex "^0.2.0"
3017 +
3018 +has-ansi@^2.0.0:
3019 + version "2.0.0"
3020 + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
3021 + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
3022 + dependencies:
3023 + ansi-regex "^2.0.0"
3024 +
3025 +has-flag@^1.0.0:
3026 + version "1.0.0"
3027 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
3028 + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
3029 +
3030 +has-flag@^2.0.0:
3031 + version "2.0.0"
3032 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
3033 + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
3034 +
3035 +has-flag@^3.0.0:
3036 + version "3.0.0"
3037 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
3038 + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
3039 +
3040 +has-unicode@^2.0.0:
3041 + version "2.0.1"
3042 + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
3043 + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
3044 +
3045 +has-value@^0.3.1:
3046 + version "0.3.1"
3047 + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
3048 + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
3049 + dependencies:
3050 + get-value "^2.0.3"
3051 + has-values "^0.1.4"
3052 + isobject "^2.0.0"
3053 +
3054 +has-value@^1.0.0:
3055 + version "1.0.0"
3056 + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
3057 + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
3058 + dependencies:
3059 + get-value "^2.0.6"
3060 + has-values "^1.0.0"
3061 + isobject "^3.0.0"
3062 +
3063 +has-values@^0.1.4:
3064 + version "0.1.4"
3065 + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
3066 + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
3067 +
3068 +has-values@^1.0.0:
3069 + version "1.0.0"
3070 + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
3071 + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
3072 + dependencies:
3073 + is-number "^3.0.0"
3074 + kind-of "^4.0.0"
3075 +
3076 +has@^1.0.1, has@^1.0.3:
3077 + version "1.0.3"
3078 + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
3079 + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
3080 + dependencies:
3081 + function-bind "^1.1.1"
3082 +
3083 +hawk@3.1.3, hawk@~3.1.3:
3084 + version "3.1.3"
3085 + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
3086 + integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
3087 + dependencies:
3088 + boom "2.x.x"
3089 + cryptiles "2.x.x"
3090 + hoek "2.x.x"
3091 + sntp "1.x.x"
3092 +
3093 +he@1.2.x:
3094 + version "1.2.0"
3095 + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
3096 + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
3097 +
3098 +hoek@2.x.x:
3099 + version "2.16.3"
3100 + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
3101 + integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
3102 +
3103 +home-or-tmp@^2.0.0:
3104 + version "2.0.0"
3105 + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
3106 + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
3107 + dependencies:
3108 + os-homedir "^1.0.0"
3109 + os-tmpdir "^1.0.1"
3110 +
3111 +hosted-git-info@^2.1.4:
3112 + version "2.8.9"
3113 + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
3114 + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
3115 +
3116 +html-comment-regex@^1.1.0:
3117 + version "1.1.2"
3118 + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
3119 + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
3120 +
3121 +html-encoding-sniffer@^1.0.1:
3122 + version "1.0.2"
3123 + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
3124 + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
3125 + dependencies:
3126 + whatwg-encoding "^1.0.1"
3127 +
3128 +html-entities@1.2.0:
3129 + version "1.2.0"
3130 + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.0.tgz#41948caf85ce82fed36e4e6a0ed371a6664379e2"
3131 + integrity sha1-QZSMr4XOgv7Tbk5qDtNxpmZDeeI=
3132 +
3133 +html-minifier@^3.1.0:
3134 + version "3.5.21"
3135 + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
3136 + integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
3137 + dependencies:
3138 + camel-case "3.0.x"
3139 + clean-css "4.2.x"
3140 + commander "2.17.x"
3141 + he "1.2.x"
3142 + param-case "2.1.x"
3143 + relateurl "0.2.x"
3144 + uglify-js "3.4.x"
3145 +
3146 +html-webpack-plugin@2.24.0:
3147 + version "2.24.0"
3148 + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.24.0.tgz#53697cea79a9f3cd1f8c239ac71f949d5673cacb"
3149 + integrity sha1-U2l86nmp880fjCOaxx+UnVZzyss=
3150 + dependencies:
3151 + bluebird "^3.4.6"
3152 + html-minifier "^3.1.0"
3153 + loader-utils "^0.2.16"
3154 + lodash "^4.16.4"
3155 + pretty-error "^2.0.2"
3156 + toposort "^1.0.0"
3157 +
3158 +htmlparser2@^3.10.1:
3159 + version "3.10.1"
3160 + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
3161 + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
3162 + dependencies:
3163 + domelementtype "^1.3.1"
3164 + domhandler "^2.3.0"
3165 + domutils "^1.5.1"
3166 + entities "^1.1.1"
3167 + inherits "^2.0.1"
3168 + readable-stream "^3.1.1"
3169 +
3170 +http-errors@1.7.2:
3171 + version "1.7.2"
3172 + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
3173 + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
3174 + dependencies:
3175 + depd "~1.1.2"
3176 + inherits "2.0.3"
3177 + setprototypeof "1.1.1"
3178 + statuses ">= 1.5.0 < 2"
3179 + toidentifier "1.0.0"
3180 +
3181 +http-errors@~1.6.2:
3182 + version "1.6.3"
3183 + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
3184 + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
3185 + dependencies:
3186 + depd "~1.1.2"
3187 + inherits "2.0.3"
3188 + setprototypeof "1.1.0"
3189 + statuses ">= 1.4.0 < 2"
3190 +
3191 +http-errors@~1.7.2:
3192 + version "1.7.3"
3193 + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
3194 + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
3195 + dependencies:
3196 + depd "~1.1.2"
3197 + inherits "2.0.4"
3198 + setprototypeof "1.1.1"
3199 + statuses ">= 1.5.0 < 2"
3200 + toidentifier "1.0.0"
3201 +
3202 +http-parser-js@>=0.5.1:
3203 + version "0.5.3"
3204 + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9"
3205 + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==
3206 +
3207 +http-proxy-middleware@0.17.3:
3208 + version "0.17.3"
3209 + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.3.tgz#940382147149b856084f5534752d5b5a8168cd1d"
3210 + integrity sha1-lAOCFHFJuFYIT1U0dS1bWoFozR0=
3211 + dependencies:
3212 + http-proxy "^1.16.2"
3213 + is-glob "^3.1.0"
3214 + lodash "^4.17.2"
3215 + micromatch "^2.3.11"
3216 +
3217 +http-proxy-middleware@~0.17.1:
3218 + version "0.17.4"
3219 + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
3220 + integrity sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=
3221 + dependencies:
3222 + http-proxy "^1.16.2"
3223 + is-glob "^3.1.0"
3224 + lodash "^4.17.2"
3225 + micromatch "^2.3.11"
3226 +
3227 +http-proxy@^1.16.2:
3228 + version "1.18.1"
3229 + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
3230 + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
3231 + dependencies:
3232 + eventemitter3 "^4.0.0"
3233 + follow-redirects "^1.0.0"
3234 + requires-port "^1.0.0"
3235 +
3236 +http-signature@~1.1.0:
3237 + version "1.1.1"
3238 + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
3239 + integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
3240 + dependencies:
3241 + assert-plus "^0.2.0"
3242 + jsprim "^1.2.2"
3243 + sshpk "^1.7.0"
3244 +
3245 +http-signature@~1.2.0:
3246 + version "1.2.0"
3247 + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
3248 + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
3249 + dependencies:
3250 + assert-plus "^1.0.0"
3251 + jsprim "^1.2.2"
3252 + sshpk "^1.7.0"
3253 +
3254 +https-browserify@0.0.1:
3255 + version "0.0.1"
3256 + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
3257 + integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
3258 +
3259 +iconv-lite@0.4.24:
3260 + version "0.4.24"
3261 + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
3262 + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
3263 + dependencies:
3264 + safer-buffer ">= 2.1.2 < 3"
3265 +
3266 +icss-replace-symbols@^1.1.0:
3267 + version "1.1.0"
3268 + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
3269 + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
3270 +
3271 +ieee754@^1.1.4:
3272 + version "1.2.1"
3273 + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
3274 + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
3275 +
3276 +ignore-styles@^5.0.1:
3277 + version "5.0.1"
3278 + resolved "https://registry.yarnpkg.com/ignore-styles/-/ignore-styles-5.0.1.tgz#b49ef2274bdafcd8a4880a966bfe38d1a0bf4671"
3279 + integrity sha1-tJ7yJ0va/NikiAqWa/440aC/RnE=
3280 +
3281 +ignore@^3.2.0:
3282 + version "3.3.10"
3283 + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
3284 + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
3285 +
3286 +imurmurhash@^0.1.4:
3287 + version "0.1.4"
3288 + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
3289 + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
3290 +
3291 +indexes-of@^1.0.1:
3292 + version "1.0.1"
3293 + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
3294 + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
3295 +
3296 +indexof@0.0.1:
3297 + version "0.0.1"
3298 + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
3299 + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
3300 +
3301 +inflight@^1.0.4:
3302 + version "1.0.6"
3303 + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
3304 + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
3305 + dependencies:
3306 + once "^1.3.0"
3307 + wrappy "1"
3308 +
3309 +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
3310 + version "2.0.4"
3311 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
3312 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
3313 +
3314 +inherits@2.0.1:
3315 + version "2.0.1"
3316 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
3317 + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
3318 +
3319 +inherits@2.0.3:
3320 + version "2.0.3"
3321 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
3322 + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
3323 +
3324 +ini@~1.3.0:
3325 + version "1.3.8"
3326 + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
3327 + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
3328 +
3329 +inquirer@^0.12.0:
3330 + version "0.12.0"
3331 + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
3332 + integrity sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=
3333 + dependencies:
3334 + ansi-escapes "^1.1.0"
3335 + ansi-regex "^2.0.0"
3336 + chalk "^1.0.0"
3337 + cli-cursor "^1.0.1"
3338 + cli-width "^2.0.0"
3339 + figures "^1.3.5"
3340 + lodash "^4.3.0"
3341 + readline2 "^1.0.1"
3342 + run-async "^0.1.0"
3343 + rx-lite "^3.1.2"
3344 + string-width "^1.0.1"
3345 + strip-ansi "^3.0.0"
3346 + through "^2.3.6"
3347 +
3348 +interpret@^0.6.4:
3349 + version "0.6.6"
3350 + resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
3351 + integrity sha1-/s16GOfOXKar+5U+H4YhOknxYls=
3352 +
3353 +interpret@^1.0.0:
3354 + version "1.4.0"
3355 + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
3356 + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
3357 +
3358 +invariant@^2.2.2:
3359 + version "2.2.4"
3360 + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
3361 + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
3362 + dependencies:
3363 + loose-envify "^1.0.0"
3364 +
3365 +invert-kv@^1.0.0:
3366 + version "1.0.0"
3367 + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
3368 + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
3369 +
3370 +ipaddr.js@1.9.1:
3371 + version "1.9.1"
3372 + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
3373 + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
3374 +
3375 +is-absolute-url@^2.0.0:
3376 + version "2.1.0"
3377 + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
3378 + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
3379 +
3380 +is-accessor-descriptor@^0.1.6:
3381 + version "0.1.6"
3382 + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
3383 + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
3384 + dependencies:
3385 + kind-of "^3.0.2"
3386 +
3387 +is-accessor-descriptor@^1.0.0:
3388 + version "1.0.0"
3389 + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
3390 + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
3391 + dependencies:
3392 + kind-of "^6.0.0"
3393 +
3394 +is-arrayish@^0.2.1:
3395 + version "0.2.1"
3396 + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
3397 + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
3398 +
3399 +is-binary-path@^1.0.0:
3400 + version "1.0.1"
3401 + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
3402 + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
3403 + dependencies:
3404 + binary-extensions "^1.0.0"
3405 +
3406 +is-buffer@^1.1.5:
3407 + version "1.1.6"
3408 + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
3409 + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
3410 +
3411 +is-ci@^1.0.9:
3412 + version "1.2.1"
3413 + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
3414 + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
3415 + dependencies:
3416 + ci-info "^1.5.0"
3417 +
3418 +is-core-module@^2.2.0:
3419 + version "2.2.0"
3420 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
3421 + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
3422 + dependencies:
3423 + has "^1.0.3"
3424 +
3425 +is-data-descriptor@^0.1.4:
3426 + version "0.1.4"
3427 + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
3428 + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
3429 + dependencies:
3430 + kind-of "^3.0.2"
3431 +
3432 +is-data-descriptor@^1.0.0:
3433 + version "1.0.0"
3434 + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
3435 + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
3436 + dependencies:
3437 + kind-of "^6.0.0"
3438 +
3439 +is-descriptor@^0.1.0:
3440 + version "0.1.6"
3441 + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
3442 + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
3443 + dependencies:
3444 + is-accessor-descriptor "^0.1.6"
3445 + is-data-descriptor "^0.1.4"
3446 + kind-of "^5.0.0"
3447 +
3448 +is-descriptor@^1.0.0, is-descriptor@^1.0.2:
3449 + version "1.0.2"
3450 + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
3451 + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
3452 + dependencies:
3453 + is-accessor-descriptor "^1.0.0"
3454 + is-data-descriptor "^1.0.0"
3455 + kind-of "^6.0.2"
3456 +
3457 +is-directory@^0.3.1:
3458 + version "0.3.1"
3459 + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
3460 + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
3461 +
3462 +is-dotfile@^1.0.0:
3463 + version "1.0.3"
3464 + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
3465 + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
3466 +
3467 +is-equal-shallow@^0.1.3:
3468 + version "0.1.3"
3469 + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
3470 + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
3471 + dependencies:
3472 + is-primitive "^2.0.0"
3473 +
3474 +is-extendable@^0.1.0, is-extendable@^0.1.1:
3475 + version "0.1.1"
3476 + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
3477 + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
3478 +
3479 +is-extendable@^1.0.1:
3480 + version "1.0.1"
3481 + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
3482 + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
3483 + dependencies:
3484 + is-plain-object "^2.0.4"
3485 +
3486 +is-extglob@^1.0.0:
3487 + version "1.0.0"
3488 + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
3489 + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
3490 +
3491 +is-extglob@^2.1.0:
3492 + version "2.1.1"
3493 + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
3494 + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
3495 +
3496 +is-finite@^1.0.0:
3497 + version "1.1.0"
3498 + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3"
3499 + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==
3500 +
3501 +is-fullwidth-code-point@^1.0.0:
3502 + version "1.0.0"
3503 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
3504 + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
3505 + dependencies:
3506 + number-is-nan "^1.0.0"
3507 +
3508 +is-fullwidth-code-point@^2.0.0:
3509 + version "2.0.0"
3510 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
3511 + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
3512 +
3513 +is-glob@^2.0.0, is-glob@^2.0.1:
3514 + version "2.0.1"
3515 + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
3516 + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
3517 + dependencies:
3518 + is-extglob "^1.0.0"
3519 +
3520 +is-glob@^3.1.0:
3521 + version "3.1.0"
3522 + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
3523 + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
3524 + dependencies:
3525 + is-extglob "^2.1.0"
3526 +
3527 +is-my-ip-valid@^1.0.0:
3528 + version "1.0.0"
3529 + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824"
3530 + integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==
3531 +
3532 +is-my-json-valid@^2.10.0:
3533 + version "2.20.5"
3534 + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz#5eca6a8232a687f68869b7361be1612e7512e5df"
3535 + integrity sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==
3536 + dependencies:
3537 + generate-function "^2.0.0"
3538 + generate-object-property "^1.1.0"
3539 + is-my-ip-valid "^1.0.0"
3540 + jsonpointer "^4.0.0"
3541 + xtend "^4.0.0"
3542 +
3543 +is-number@^2.1.0:
3544 + version "2.1.0"
3545 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
3546 + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
3547 + dependencies:
3548 + kind-of "^3.0.2"
3549 +
3550 +is-number@^3.0.0:
3551 + version "3.0.0"
3552 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
3553 + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
3554 + dependencies:
3555 + kind-of "^3.0.2"
3556 +
3557 +is-number@^4.0.0:
3558 + version "4.0.0"
3559 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
3560 + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
3561 +
3562 +is-plain-obj@^1.0.0:
3563 + version "1.1.0"
3564 + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
3565 + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
3566 +
3567 +is-plain-object@^2.0.3, is-plain-object@^2.0.4:
3568 + version "2.0.4"
3569 + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
3570 + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
3571 + dependencies:
3572 + isobject "^3.0.1"
3573 +
3574 +is-posix-bracket@^0.1.0:
3575 + version "0.1.1"
3576 + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
3577 + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
3578 +
3579 +is-primitive@^2.0.0:
3580 + version "2.0.0"
3581 + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
3582 + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
3583 +
3584 +is-property@^1.0.0, is-property@^1.0.2:
3585 + version "1.0.2"
3586 + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
3587 + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=
3588 +
3589 +is-resolvable@^1.0.0:
3590 + version "1.1.0"
3591 + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
3592 + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
3593 +
3594 +is-svg@^2.0.0:
3595 + version "2.1.0"
3596 + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
3597 + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
3598 + dependencies:
3599 + html-comment-regex "^1.1.0"
3600 +
3601 +is-typedarray@~1.0.0:
3602 + version "1.0.0"
3603 + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
3604 + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
3605 +
3606 +is-utf8@^0.2.0:
3607 + version "0.2.1"
3608 + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
3609 + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
3610 +
3611 +is-windows@^1.0.2:
3612 + version "1.0.2"
3613 + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
3614 + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
3615 +
3616 +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
3617 + version "1.0.0"
3618 + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
3619 + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
3620 +
3621 +isexe@^2.0.0:
3622 + version "2.0.0"
3623 + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
3624 + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
3625 +
3626 +isobject@^2.0.0:
3627 + version "2.1.0"
3628 + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
3629 + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
3630 + dependencies:
3631 + isarray "1.0.0"
3632 +
3633 +isobject@^3.0.0, isobject@^3.0.1:
3634 + version "3.0.1"
3635 + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
3636 + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
3637 +
3638 +isstream@~0.1.2:
3639 + version "0.1.2"
3640 + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
3641 + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
3642 +
3643 +istanbul-api@^1.1.0-alpha.1:
3644 + version "1.3.7"
3645 + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
3646 + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==
3647 + dependencies:
3648 + async "^2.1.4"
3649 + fileset "^2.0.2"
3650 + istanbul-lib-coverage "^1.2.1"
3651 + istanbul-lib-hook "^1.2.2"
3652 + istanbul-lib-instrument "^1.10.2"
3653 + istanbul-lib-report "^1.1.5"
3654 + istanbul-lib-source-maps "^1.2.6"
3655 + istanbul-reports "^1.5.1"
3656 + js-yaml "^3.7.0"
3657 + mkdirp "^0.5.1"
3658 + once "^1.4.0"
3659 +
3660 +istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.2.1:
3661 + version "1.2.1"
3662 + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
3663 + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
3664 +
3665 +istanbul-lib-hook@^1.2.2:
3666 + version "1.2.2"
3667 + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
3668 + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==
3669 + dependencies:
3670 + append-transform "^0.4.0"
3671 +
3672 +istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.4.2:
3673 + version "1.10.2"
3674 + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
3675 + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
3676 + dependencies:
3677 + babel-generator "^6.18.0"
3678 + babel-template "^6.16.0"
3679 + babel-traverse "^6.18.0"
3680 + babel-types "^6.18.0"
3681 + babylon "^6.18.0"
3682 + istanbul-lib-coverage "^1.2.1"
3683 + semver "^5.3.0"
3684 +
3685 +istanbul-lib-report@^1.1.5:
3686 + version "1.1.5"
3687 + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
3688 + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==
3689 + dependencies:
3690 + istanbul-lib-coverage "^1.2.1"
3691 + mkdirp "^0.5.1"
3692 + path-parse "^1.0.5"
3693 + supports-color "^3.1.2"
3694 +
3695 +istanbul-lib-source-maps@^1.2.6:
3696 + version "1.2.6"
3697 + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
3698 + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==
3699 + dependencies:
3700 + debug "^3.1.0"
3701 + istanbul-lib-coverage "^1.2.1"
3702 + mkdirp "^0.5.1"
3703 + rimraf "^2.6.1"
3704 + source-map "^0.5.3"
3705 +
3706 +istanbul-reports@^1.5.1:
3707 + version "1.5.1"
3708 + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
3709 + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==
3710 + dependencies:
3711 + handlebars "^4.0.3"
3712 +
3713 +jest-changed-files@^17.0.2:
3714 + version "17.0.2"
3715 + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-17.0.2.tgz#f5657758736996f590a51b87e5c9369d904ba7b7"
3716 + integrity sha1-9WV3WHNplvWQpRuH5ck2nZBLp7c=
3717 +
3718 +jest-cli@^18.1.0:
3719 + version "18.1.0"
3720 + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-18.1.0.tgz#5ead36ecad420817c2c9baa2aa7574f63257b3d6"
3721 + integrity sha1-Xq027K1CCBfCybqiqnV09jJXs9Y=
3722 + dependencies:
3723 + ansi-escapes "^1.4.0"
3724 + callsites "^2.0.0"
3725 + chalk "^1.1.1"
3726 + graceful-fs "^4.1.6"
3727 + is-ci "^1.0.9"
3728 + istanbul-api "^1.1.0-alpha.1"
3729 + istanbul-lib-coverage "^1.0.0"
3730 + istanbul-lib-instrument "^1.1.1"
3731 + jest-changed-files "^17.0.2"
3732 + jest-config "^18.1.0"
3733 + jest-environment-jsdom "^18.1.0"
3734 + jest-file-exists "^17.0.0"
3735 + jest-haste-map "^18.1.0"
3736 + jest-jasmine2 "^18.1.0"
3737 + jest-mock "^18.0.0"
3738 + jest-resolve "^18.1.0"
3739 + jest-resolve-dependencies "^18.1.0"
3740 + jest-runtime "^18.1.0"
3741 + jest-snapshot "^18.1.0"
3742 + jest-util "^18.1.0"
3743 + json-stable-stringify "^1.0.0"
3744 + node-notifier "^4.6.1"
3745 + sane "~1.4.1"
3746 + strip-ansi "^3.0.1"
3747 + throat "^3.0.0"
3748 + which "^1.1.1"
3749 + worker-farm "^1.3.1"
3750 + yargs "^6.3.0"
3751 +
3752 +jest-config@^18.1.0:
3753 + version "18.1.0"
3754 + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-18.1.0.tgz#6111740a6d48aab86ff5a9e6ab0b98bd993b6ff4"
3755 + integrity sha1-YRF0Cm1Iqrhv9anmqwuYvZk7b/Q=
3756 + dependencies:
3757 + chalk "^1.1.1"
3758 + jest-environment-jsdom "^18.1.0"
3759 + jest-environment-node "^18.1.0"
3760 + jest-jasmine2 "^18.1.0"
3761 + jest-mock "^18.0.0"
3762 + jest-resolve "^18.1.0"
3763 + jest-util "^18.1.0"
3764 + json-stable-stringify "^1.0.0"
3765 +
3766 +jest-diff@^18.1.0:
3767 + version "18.1.0"
3768 + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-18.1.0.tgz#4ff79e74dd988c139195b365dc65d87f606f4803"
3769 + integrity sha1-T/eedN2YjBORlbNl3GXYf2BvSAM=
3770 + dependencies:
3771 + chalk "^1.1.3"
3772 + diff "^3.0.0"
3773 + jest-matcher-utils "^18.1.0"
3774 + pretty-format "^18.1.0"
3775 +
3776 +jest-environment-jsdom@^18.1.0:
3777 + version "18.1.0"
3778 + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-18.1.0.tgz#18b42f0c4ea2bae9f36cab3639b1e8f8c384e24e"
3779 + integrity sha1-GLQvDE6iuunzbKs2ObHo+MOE4k4=
3780 + dependencies:
3781 + jest-mock "^18.0.0"
3782 + jest-util "^18.1.0"
3783 + jsdom "^9.9.1"
3784 +
3785 +jest-environment-node@^18.1.0:
3786 + version "18.1.0"
3787 + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-18.1.0.tgz#4d6797572c8dda99acf5fae696eb62945547c779"
3788 + integrity sha1-TWeXVyyN2pms9frmlutilFVHx3k=
3789 + dependencies:
3790 + jest-mock "^18.0.0"
3791 + jest-util "^18.1.0"
3792 +
3793 +jest-file-exists@^17.0.0:
3794 + version "17.0.0"
3795 + resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169"
3796 + integrity sha1-f2Prc6HEOhP0Yb4mF2i0WvLN0Wk=
3797 +
3798 +jest-haste-map@^18.1.0:
3799 + version "18.1.0"
3800 + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-18.1.0.tgz#06839c74b770a40c1a106968851df8d281c08375"
3801 + integrity sha1-BoOcdLdwpAwaEGlohR340oHAg3U=
3802 + dependencies:
3803 + fb-watchman "^1.9.0"
3804 + graceful-fs "^4.1.6"
3805 + micromatch "^2.3.11"
3806 + sane "~1.4.1"
3807 + worker-farm "^1.3.1"
3808 +
3809 +jest-jasmine2@^18.1.0:
3810 + version "18.1.0"
3811 + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-18.1.0.tgz#094e104c2c189708766c77263bb2aecb5860a80b"
3812 + integrity sha1-CU4QTCwYlwh2bHcmO7Kuy1hgqAs=
3813 + dependencies:
3814 + graceful-fs "^4.1.6"
3815 + jest-matcher-utils "^18.1.0"
3816 + jest-matchers "^18.1.0"
3817 + jest-snapshot "^18.1.0"
3818 + jest-util "^18.1.0"
3819 +
3820 +jest-matcher-utils@^18.1.0:
3821 + version "18.1.0"
3822 + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz#1ac4651955ee2a60cef1e7fcc98cdfd773c0f932"
3823 + integrity sha1-GsRlGVXuKmDO8ef8yYzf13PA+TI=
3824 + dependencies:
3825 + chalk "^1.1.3"
3826 + pretty-format "^18.1.0"
3827 +
3828 +jest-matchers@^18.1.0:
3829 + version "18.1.0"
3830 + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-18.1.0.tgz#0341484bf87a1fd0bac0a4d2c899e2b77a3f1ead"
3831 + integrity sha1-A0FIS/h6H9C6wKTSyJnit3o/Hq0=
3832 + dependencies:
3833 + jest-diff "^18.1.0"
3834 + jest-matcher-utils "^18.1.0"
3835 + jest-util "^18.1.0"
3836 + pretty-format "^18.1.0"
3837 +
3838 +jest-mock@^18.0.0:
3839 + version "18.0.0"
3840 + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-18.0.0.tgz#5c248846ea33fa558b526f5312ab4a6765e489b3"
3841 + integrity sha1-XCSIRuoz+lWLUm9TEqtKZ2XkibM=
3842 +
3843 +jest-resolve-dependencies@^18.1.0:
3844 + version "18.1.0"
3845 + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-18.1.0.tgz#8134fb5caf59c9ed842fe0152ab01c52711f1bbb"
3846 + integrity sha1-gTT7XK9Zye2EL+AVKrAcUnEfG7s=
3847 + dependencies:
3848 + jest-file-exists "^17.0.0"
3849 + jest-resolve "^18.1.0"
3850 +
3851 +jest-resolve@^18.1.0:
3852 + version "18.1.0"
3853 + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-18.1.0.tgz#6800accb536658c906cd5e29de412b1ab9ac249b"
3854 + integrity sha1-aACsy1NmWMkGzV4p3kErGrmsJJs=
3855 + dependencies:
3856 + browser-resolve "^1.11.2"
3857 + jest-file-exists "^17.0.0"
3858 + jest-haste-map "^18.1.0"
3859 + resolve "^1.2.0"
3860 +
3861 +jest-runtime@^18.1.0:
3862 + version "18.1.0"
3863 + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-18.1.0.tgz#3abfd687175b21fc3b85a2b8064399e997859922"
3864 + integrity sha1-Or/WhxdbIfw7haK4BkOZ6ZeFmSI=
3865 + dependencies:
3866 + babel-core "^6.0.0"
3867 + babel-jest "^18.0.0"
3868 + babel-plugin-istanbul "^3.0.0"
3869 + chalk "^1.1.3"
3870 + graceful-fs "^4.1.6"
3871 + jest-config "^18.1.0"
3872 + jest-file-exists "^17.0.0"
3873 + jest-haste-map "^18.1.0"
3874 + jest-mock "^18.0.0"
3875 + jest-resolve "^18.1.0"
3876 + jest-snapshot "^18.1.0"
3877 + jest-util "^18.1.0"
3878 + json-stable-stringify "^1.0.0"
3879 + micromatch "^2.3.11"
3880 + yargs "^6.3.0"
3881 +
3882 +jest-snapshot@^18.1.0:
3883 + version "18.1.0"
3884 + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-18.1.0.tgz#55b96d2ee639c9bce76f87f2a3fd40b71c7a5916"
3885 + integrity sha1-VbltLuY5ybznb4fyo/1Atxx6WRY=
3886 + dependencies:
3887 + jest-diff "^18.1.0"
3888 + jest-file-exists "^17.0.0"
3889 + jest-matcher-utils "^18.1.0"
3890 + jest-util "^18.1.0"
3891 + natural-compare "^1.4.0"
3892 + pretty-format "^18.1.0"
3893 +
3894 +jest-util@^18.1.0:
3895 + version "18.1.0"
3896 + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-18.1.0.tgz#3a99c32114ab17f84be094382527006e6d4bfc6a"
3897 + integrity sha1-OpnDIRSrF/hL4JQ4JScAbm1L/Go=
3898 + dependencies:
3899 + chalk "^1.1.1"
3900 + diff "^3.0.0"
3901 + graceful-fs "^4.1.6"
3902 + jest-file-exists "^17.0.0"
3903 + jest-mock "^18.0.0"
3904 + mkdirp "^0.5.1"
3905 +
3906 +jest@18.1.0:
3907 + version "18.1.0"
3908 + resolved "https://registry.yarnpkg.com/jest/-/jest-18.1.0.tgz#bcebf1e203dee5c2ad2091c805300a343d9e6c7d"
3909 + integrity sha1-vOvx4gPe5cKtIJHIBTAKND2ebH0=
3910 + dependencies:
3911 + jest-cli "^18.1.0"
3912 +
3913 +js-base64@^2.1.9:
3914 + version "2.6.4"
3915 + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
3916 + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
3917 +
3918 +"js-tokens@^3.0.0 || ^4.0.0":
3919 + version "4.0.0"
3920 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
3921 + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
3922 +
3923 +js-tokens@^3.0.2:
3924 + version "3.0.2"
3925 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
3926 + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
3927 +
3928 +js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0:
3929 + version "3.14.1"
3930 + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
3931 + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
3932 + dependencies:
3933 + argparse "^1.0.7"
3934 + esprima "^4.0.0"
3935 +
3936 +js-yaml@~3.7.0:
3937 + version "3.7.0"
3938 + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
3939 + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=
3940 + dependencies:
3941 + argparse "^1.0.7"
3942 + esprima "^2.6.0"
3943 +
3944 +jsbn@~0.1.0:
3945 + version "0.1.1"
3946 + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
3947 + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
3948 +
3949 +jsdom@^9.9.1:
3950 + version "9.12.0"
3951 + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
3952 + integrity sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=
3953 + dependencies:
3954 + abab "^1.0.3"
3955 + acorn "^4.0.4"
3956 + acorn-globals "^3.1.0"
3957 + array-equal "^1.0.0"
3958 + content-type-parser "^1.0.1"
3959 + cssom ">= 0.3.2 < 0.4.0"
3960 + cssstyle ">= 0.2.37 < 0.3.0"
3961 + escodegen "^1.6.1"
3962 + html-encoding-sniffer "^1.0.1"
3963 + nwmatcher ">= 1.3.9 < 2.0.0"
3964 + parse5 "^1.5.1"
3965 + request "^2.79.0"
3966 + sax "^1.2.1"
3967 + symbol-tree "^3.2.1"
3968 + tough-cookie "^2.3.2"
3969 + webidl-conversions "^4.0.0"
3970 + whatwg-encoding "^1.0.1"
3971 + whatwg-url "^4.3.0"
3972 + xml-name-validator "^2.0.1"
3973 +
3974 +jsesc@^1.3.0:
3975 + version "1.3.0"
3976 + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
3977 + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
3978 +
3979 +jsesc@~0.5.0:
3980 + version "0.5.0"
3981 + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
3982 + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
3983 +
3984 +json-loader@0.5.4:
3985 + version "0.5.4"
3986 + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
3987 + integrity sha1-i6oTZaYy9Yo8RtIBdfxgAsluN94=
3988 +
3989 +json-schema-traverse@^0.4.1:
3990 + version "0.4.1"
3991 + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
3992 + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
3993 +
3994 +json-schema@0.2.3:
3995 + version "0.2.3"
3996 + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
3997 + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
3998 +
3999 +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
4000 + version "1.0.1"
4001 + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
4002 + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
4003 + dependencies:
4004 + jsonify "~0.0.0"
4005 +
4006 +json-stringify-safe@~5.0.1:
4007 + version "5.0.1"
4008 + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
4009 + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
4010 +
4011 +json3@^3.3.2, json3@^3.3.3:
4012 + version "3.3.3"
4013 + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81"
4014 + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==
4015 +
4016 +json5@^0.5.0, json5@^0.5.1:
4017 + version "0.5.1"
4018 + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
4019 + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
4020 +
4021 +jsonfile@^2.1.0:
4022 + version "2.4.0"
4023 + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
4024 + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
4025 + optionalDependencies:
4026 + graceful-fs "^4.1.6"
4027 +
4028 +jsonify@~0.0.0:
4029 + version "0.0.0"
4030 + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
4031 + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
4032 +
4033 +jsonpointer@^4.0.0:
4034 + version "4.1.0"
4035 + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.1.0.tgz#501fb89986a2389765ba09e6053299ceb4f2c2cc"
4036 + integrity sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==
4037 +
4038 +jsprim@^1.2.2:
4039 + version "1.4.1"
4040 + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
4041 + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
4042 + dependencies:
4043 + assert-plus "1.0.0"
4044 + extsprintf "1.3.0"
4045 + json-schema "0.2.3"
4046 + verror "1.10.0"
4047 +
4048 +jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.1:
4049 + version "1.4.1"
4050 + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
4051 + integrity sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=
4052 +
4053 +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
4054 + version "3.2.2"
4055 + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
4056 + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
4057 + dependencies:
4058 + is-buffer "^1.1.5"
4059 +
4060 +kind-of@^4.0.0:
4061 + version "4.0.0"
4062 + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
4063 + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
4064 + dependencies:
4065 + is-buffer "^1.1.5"
4066 +
4067 +kind-of@^5.0.0:
4068 + version "5.1.0"
4069 + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
4070 + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
4071 +
4072 +kind-of@^6.0.0, kind-of@^6.0.2:
4073 + version "6.0.3"
4074 + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
4075 + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
4076 +
4077 +klaw@^1.0.0:
4078 + version "1.3.1"
4079 + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
4080 + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
4081 + optionalDependencies:
4082 + graceful-fs "^4.1.9"
4083 +
4084 +lazy-cache@^1.0.3:
4085 + version "1.0.4"
4086 + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
4087 + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
4088 +
4089 +lcid@^1.0.0:
4090 + version "1.0.0"
4091 + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
4092 + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
4093 + dependencies:
4094 + invert-kv "^1.0.0"
4095 +
4096 +levn@^0.3.0, levn@~0.3.0:
4097 + version "0.3.0"
4098 + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
4099 + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
4100 + dependencies:
4101 + prelude-ls "~1.1.2"
4102 + type-check "~0.3.2"
4103 +
4104 +load-json-file@^1.0.0:
4105 + version "1.1.0"
4106 + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
4107 + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
4108 + dependencies:
4109 + graceful-fs "^4.1.2"
4110 + parse-json "^2.2.0"
4111 + pify "^2.0.0"
4112 + pinkie-promise "^2.0.0"
4113 + strip-bom "^2.0.0"
4114 +
4115 +loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.16, loader-utils@^0.2.3, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5:
4116 + version "0.2.17"
4117 + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
4118 + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
4119 + dependencies:
4120 + big.js "^3.1.3"
4121 + emojis-list "^2.0.0"
4122 + json5 "^0.5.0"
4123 + object-assign "^4.0.1"
4124 +
4125 +lodash._arraycopy@^3.0.0:
4126 + version "3.0.0"
4127 + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
4128 + integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=
4129 +
4130 +lodash._arrayeach@^3.0.0:
4131 + version "3.0.0"
4132 + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
4133 + integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754=
4134 +
4135 +lodash._baseassign@^3.0.0:
4136 + version "3.2.0"
4137 + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
4138 + integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=
4139 + dependencies:
4140 + lodash._basecopy "^3.0.0"
4141 + lodash.keys "^3.0.0"
4142 +
4143 +lodash._baseclone@^3.0.0:
4144 + version "3.3.0"
4145 + resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
4146 + integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc=
4147 + dependencies:
4148 + lodash._arraycopy "^3.0.0"
4149 + lodash._arrayeach "^3.0.0"
4150 + lodash._baseassign "^3.0.0"
4151 + lodash._basefor "^3.0.0"
4152 + lodash.isarray "^3.0.0"
4153 + lodash.keys "^3.0.0"
4154 +
4155 +lodash._basecopy@^3.0.0:
4156 + version "3.0.1"
4157 + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
4158 + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=
4159 +
4160 +lodash._basefor@^3.0.0:
4161 + version "3.0.3"
4162 + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
4163 + integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=
4164 +
4165 +lodash._bindcallback@^3.0.0:
4166 + version "3.0.1"
4167 + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
4168 + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
4169 +
4170 +lodash._getnative@^3.0.0:
4171 + version "3.9.1"
4172 + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
4173 + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
4174 +
4175 +lodash.camelcase@^4.3.0:
4176 + version "4.3.0"
4177 + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
4178 + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
4179 +
4180 +lodash.clonedeep@^3.0.0:
4181 + version "3.0.2"
4182 + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db"
4183 + integrity sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=
4184 + dependencies:
4185 + lodash._baseclone "^3.0.0"
4186 + lodash._bindcallback "^3.0.0"
4187 +
4188 +lodash.cond@^4.3.0:
4189 + version "4.5.2"
4190 + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
4191 + integrity sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=
4192 +
4193 +lodash.isarguments@^3.0.0:
4194 + version "3.1.0"
4195 + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
4196 + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=
4197 +
4198 +lodash.isarray@^3.0.0:
4199 + version "3.0.4"
4200 + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
4201 + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=
4202 +
4203 +lodash.keys@^3.0.0:
4204 + version "3.1.2"
4205 + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
4206 + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=
4207 + dependencies:
4208 + lodash._getnative "^3.0.0"
4209 + lodash.isarguments "^3.0.0"
4210 + lodash.isarray "^3.0.0"
4211 +
4212 +lodash.memoize@^4.1.2:
4213 + version "4.1.2"
4214 + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
4215 + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
4216 +
4217 +lodash.pickby@^4.6.0:
4218 + version "4.6.0"
4219 + resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff"
4220 + integrity sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=
4221 +
4222 +lodash.toarray@^4.4.0:
4223 + version "4.4.0"
4224 + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561"
4225 + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE=
4226 +
4227 +lodash.uniq@^4.5.0:
4228 + version "4.5.0"
4229 + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
4230 + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
4231 +
4232 +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.16.4, lodash@^4.17.14, lodash@^4.17.2, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.1:
4233 + version "4.17.21"
4234 + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
4235 + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
4236 +
4237 +longest@^1.0.1:
4238 + version "1.0.1"
4239 + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
4240 + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
4241 +
4242 +loose-envify@^1.0.0:
4243 + version "1.4.0"
4244 + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
4245 + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
4246 + dependencies:
4247 + js-tokens "^3.0.0 || ^4.0.0"
4248 +
4249 +lower-case@^1.1.1:
4250 + version "1.1.4"
4251 + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
4252 + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
4253 +
4254 +lru-cache@^4.0.1:
4255 + version "4.1.5"
4256 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
4257 + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
4258 + dependencies:
4259 + pseudomap "^1.0.2"
4260 + yallist "^2.1.2"
4261 +
4262 +makeerror@1.0.x:
4263 + version "1.0.11"
4264 + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
4265 + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
4266 + dependencies:
4267 + tmpl "1.0.x"
4268 +
4269 +map-cache@^0.2.2:
4270 + version "0.2.2"
4271 + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
4272 + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
4273 +
4274 +map-visit@^1.0.0:
4275 + version "1.0.0"
4276 + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
4277 + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
4278 + dependencies:
4279 + object-visit "^1.0.0"
4280 +
4281 +marked-terminal@^3.3.0:
4282 + version "3.3.0"
4283 + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-3.3.0.tgz#25ce0c0299285998c7636beaefc87055341ba1bd"
4284 + integrity sha512-+IUQJ5VlZoAFsM5MHNT7g3RHSkA3eETqhRCdXv4niUMAKHQ7lb1yvAcuGPmm4soxhmtX13u4Li6ZToXtvSEH+A==
4285 + dependencies:
4286 + ansi-escapes "^3.1.0"
4287 + cardinal "^2.1.1"
4288 + chalk "^2.4.1"
4289 + cli-table "^0.3.1"
4290 + node-emoji "^1.4.1"
4291 + supports-hyperlinks "^1.0.1"
4292 +
4293 +marked@^0.7.0:
4294 + version "0.7.0"
4295 + resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
4296 + integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==
4297 +
4298 +math-expression-evaluator@^1.2.14:
4299 + version "1.3.7"
4300 + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz#1b62225db86af06f7ea1fd9576a34af605a5b253"
4301 + integrity sha512-nrbaifCl42w37hYd6oRLvoymFK42tWB+WQTMFtksDGQMi5GvlJwnz/CsS30FFAISFLtX+A0csJ0xLiuuyyec7w==
4302 +
4303 +math-random@^1.0.1:
4304 + version "1.0.4"
4305 + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c"
4306 + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
4307 +
4308 +media-typer@0.3.0:
4309 + version "0.3.0"
4310 + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
4311 + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
4312 +
4313 +memory-fs@^0.2.0:
4314 + version "0.2.0"
4315 + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
4316 + integrity sha1-8rslNovBIeORwlIN6Slpyu4KApA=
4317 +
4318 +memory-fs@~0.3.0:
4319 + version "0.3.0"
4320 + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
4321 + integrity sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=
4322 + dependencies:
4323 + errno "^0.1.3"
4324 + readable-stream "^2.0.1"
4325 +
4326 +memory-fs@~0.4.1:
4327 + version "0.4.1"
4328 + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
4329 + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
4330 + dependencies:
4331 + errno "^0.1.3"
4332 + readable-stream "^2.0.1"
4333 +
4334 +merge-descriptors@1.0.1:
4335 + version "1.0.1"
4336 + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
4337 + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
4338 +
4339 +merge@^1.2.0:
4340 + version "1.2.1"
4341 + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
4342 + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
4343 +
4344 +methods@~1.1.2:
4345 + version "1.1.2"
4346 + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
4347 + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
4348 +
4349 +micromatch@^2.1.5, micromatch@^2.3.11:
4350 + version "2.3.11"
4351 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
4352 + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
4353 + dependencies:
4354 + arr-diff "^2.0.0"
4355 + array-unique "^0.2.1"
4356 + braces "^1.8.2"
4357 + expand-brackets "^0.1.4"
4358 + extglob "^0.3.1"
4359 + filename-regex "^2.0.0"
4360 + is-extglob "^1.0.0"
4361 + is-glob "^2.0.1"
4362 + kind-of "^3.0.2"
4363 + normalize-path "^2.0.1"
4364 + object.omit "^2.0.0"
4365 + parse-glob "^3.0.4"
4366 + regex-cache "^0.4.2"
4367 +
4368 +micromatch@^3.1.10:
4369 + version "3.1.10"
4370 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
4371 + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
4372 + dependencies:
4373 + arr-diff "^4.0.0"
4374 + array-unique "^0.3.2"
4375 + braces "^2.3.1"
4376 + define-property "^2.0.2"
4377 + extend-shallow "^3.0.2"
4378 + extglob "^2.0.4"
4379 + fragment-cache "^0.2.1"
4380 + kind-of "^6.0.2"
4381 + nanomatch "^1.2.9"
4382 + object.pick "^1.3.0"
4383 + regex-not "^1.0.0"
4384 + snapdragon "^0.8.1"
4385 + to-regex "^3.0.2"
4386 +
4387 +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2":
4388 + version "1.47.0"
4389 + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
4390 + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
4391 +
4392 +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.7:
4393 + version "2.1.30"
4394 + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
4395 + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
4396 + dependencies:
4397 + mime-db "1.47.0"
4398 +
4399 +mime@1.2.x:
4400 + version "1.2.11"
4401 + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
4402 + integrity sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=
4403 +
4404 +mime@1.6.0, mime@^1.5.0:
4405 + version "1.6.0"
4406 + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
4407 + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
4408 +
4409 +minimatch@3.0.3:
4410 + version "3.0.3"
4411 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
4412 + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
4413 + dependencies:
4414 + brace-expansion "^1.0.0"
4415 +
4416 +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
4417 + version "3.0.4"
4418 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
4419 + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
4420 + dependencies:
4421 + brace-expansion "^1.1.7"
4422 +
4423 +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
4424 + version "1.2.5"
4425 + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
4426 + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
4427 +
4428 +minimist@~0.0.1:
4429 + version "0.0.10"
4430 + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
4431 + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
4432 +
4433 +mixin-deep@^1.2.0:
4434 + version "1.3.2"
4435 + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
4436 + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
4437 + dependencies:
4438 + for-in "^1.0.2"
4439 + is-extendable "^1.0.1"
4440 +
4441 +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
4442 + version "0.5.5"
4443 + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
4444 + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
4445 + dependencies:
4446 + minimist "^1.2.5"
4447 +
4448 +moment@^2.11.2:
4449 + version "2.29.4"
4450 + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
4451 + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
4452 +
4453 +ms@0.7.1:
4454 + version "0.7.1"
4455 + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
4456 + integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
4457 +
4458 +ms@2.0.0:
4459 + version "2.0.0"
4460 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
4461 + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
4462 +
4463 +ms@2.1.1:
4464 + version "2.1.1"
4465 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
4466 + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
4467 +
4468 +ms@^2.1.1:
4469 + version "2.1.3"
4470 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
4471 + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
4472 +
4473 +mute-stream@0.0.5:
4474 + version "0.0.5"
4475 + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
4476 + integrity sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=
4477 +
4478 +nan@^2.12.1, nan@^2.3.0:
4479 + version "2.14.2"
4480 + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19"
4481 + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
4482 +
4483 +nanomatch@^1.2.9:
4484 + version "1.2.13"
4485 + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
4486 + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
4487 + dependencies:
4488 + arr-diff "^4.0.0"
4489 + array-unique "^0.3.2"
4490 + define-property "^2.0.2"
4491 + extend-shallow "^3.0.2"
4492 + fragment-cache "^0.2.1"
4493 + is-windows "^1.0.2"
4494 + kind-of "^6.0.2"
4495 + object.pick "^1.3.0"
4496 + regex-not "^1.0.0"
4497 + snapdragon "^0.8.1"
4498 + to-regex "^3.0.1"
4499 +
4500 +natural-compare@^1.4.0:
4501 + version "1.4.0"
4502 + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
4503 + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
4504 +
4505 +negotiator@0.6.2:
4506 + version "0.6.2"
4507 + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
4508 + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
4509 +
4510 +neo-async@^2.6.0:
4511 + version "2.6.2"
4512 + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
4513 + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
4514 +
4515 +next-tick@~1.0.0:
4516 + version "1.0.0"
4517 + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
4518 + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
4519 +
4520 +no-case@^2.2.0:
4521 + version "2.3.2"
4522 + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
4523 + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
4524 + dependencies:
4525 + lower-case "^1.1.1"
4526 +
4527 +node-emoji@^1.4.1:
4528 + version "1.10.0"
4529 + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da"
4530 + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==
4531 + dependencies:
4532 + lodash.toarray "^4.4.0"
4533 +
4534 +node-int64@^0.4.0:
4535 + version "0.4.0"
4536 + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
4537 + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
4538 +
4539 +node-libs-browser@^0.7.0:
4540 + version "0.7.0"
4541 + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
4542 + integrity sha1-PicsCBnjCJNeJmdECNevDhSRuDs=
4543 + dependencies:
4544 + assert "^1.1.1"
4545 + browserify-zlib "^0.1.4"
4546 + buffer "^4.9.0"
4547 + console-browserify "^1.1.0"
4548 + constants-browserify "^1.0.0"
4549 + crypto-browserify "3.3.0"
4550 + domain-browser "^1.1.1"
4551 + events "^1.0.0"
4552 + https-browserify "0.0.1"
4553 + os-browserify "^0.2.0"
4554 + path-browserify "0.0.0"
4555 + process "^0.11.0"
4556 + punycode "^1.2.4"
4557 + querystring-es3 "^0.2.0"
4558 + readable-stream "^2.0.5"
4559 + stream-browserify "^2.0.1"
4560 + stream-http "^2.3.1"
4561 + string_decoder "^0.10.25"
4562 + timers-browserify "^2.0.2"
4563 + tty-browserify "0.0.0"
4564 + url "^0.11.0"
4565 + util "^0.10.3"
4566 + vm-browserify "0.0.4"
4567 +
4568 +node-notifier@^4.6.1:
4569 + version "4.6.1"
4570 + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3"
4571 + integrity sha1-BW0UJE89zBzq3+aK+c/wxUc6M/M=
4572 + dependencies:
4573 + cli-usage "^0.1.1"
4574 + growly "^1.2.0"
4575 + lodash.clonedeep "^3.0.0"
4576 + minimist "^1.1.1"
4577 + semver "^5.1.0"
4578 + shellwords "^0.1.0"
4579 + which "^1.0.5"
4580 +
4581 +node-pre-gyp@^0.6.29:
4582 + version "0.6.39"
4583 + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
4584 + integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==
4585 + dependencies:
4586 + detect-libc "^1.0.2"
4587 + hawk "3.1.3"
4588 + mkdirp "^0.5.1"
4589 + nopt "^4.0.1"
4590 + npmlog "^4.0.2"
4591 + rc "^1.1.7"
4592 + request "2.81.0"
4593 + rimraf "^2.6.1"
4594 + semver "^5.3.0"
4595 + tar "^2.2.1"
4596 + tar-pack "^3.4.0"
4597 +
4598 +nopt@^4.0.1:
4599 + version "4.0.3"
4600 + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
4601 + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
4602 + dependencies:
4603 + abbrev "1"
4604 + osenv "^0.1.4"
4605 +
4606 +normalize-package-data@^2.3.2:
4607 + version "2.5.0"
4608 + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
4609 + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
4610 + dependencies:
4611 + hosted-git-info "^2.1.4"
4612 + resolve "^1.10.0"
4613 + semver "2 || 3 || 4 || 5"
4614 + validate-npm-package-license "^3.0.1"
4615 +
4616 +normalize-path@^2.0.0, normalize-path@^2.0.1:
4617 + version "2.1.1"
4618 + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
4619 + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
4620 + dependencies:
4621 + remove-trailing-separator "^1.0.1"
4622 +
4623 +normalize-range@^0.1.2:
4624 + version "0.1.2"
4625 + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
4626 + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
4627 +
4628 +normalize-url@^1.4.0:
4629 + version "1.9.1"
4630 + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
4631 + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
4632 + dependencies:
4633 + object-assign "^4.0.1"
4634 + prepend-http "^1.0.0"
4635 + query-string "^4.1.0"
4636 + sort-keys "^1.0.0"
4637 +
4638 +npmlog@^4.0.2:
4639 + version "4.1.2"
4640 + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
4641 + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
4642 + dependencies:
4643 + are-we-there-yet "~1.1.2"
4644 + console-control-strings "~1.1.0"
4645 + gauge "~2.7.3"
4646 + set-blocking "~2.0.0"
4647 +
4648 +nth-check@^1.0.2:
4649 + version "1.0.2"
4650 + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
4651 + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
4652 + dependencies:
4653 + boolbase "~1.0.0"
4654 +
4655 +num2fraction@^1.2.2:
4656 + version "1.2.2"
4657 + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
4658 + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
4659 +
4660 +number-is-nan@^1.0.0:
4661 + version "1.0.1"
4662 + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
4663 + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
4664 +
4665 +"nwmatcher@>= 1.3.9 < 2.0.0":
4666 + version "1.4.4"
4667 + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
4668 + integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
4669 +
4670 +oauth-sign@~0.8.1:
4671 + version "0.8.2"
4672 + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
4673 + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
4674 +
4675 +oauth-sign@~0.9.0:
4676 + version "0.9.0"
4677 + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
4678 + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
4679 +
4680 +object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
4681 + version "4.1.1"
4682 + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
4683 + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
4684 +
4685 +object-copy@^0.1.0:
4686 + version "0.1.0"
4687 + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
4688 + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
4689 + dependencies:
4690 + copy-descriptor "^0.1.0"
4691 + define-property "^0.2.5"
4692 + kind-of "^3.0.3"
4693 +
4694 +object-visit@^1.0.0:
4695 + version "1.0.1"
4696 + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
4697 + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
4698 + dependencies:
4699 + isobject "^3.0.0"
4700 +
4701 +object.omit@^2.0.0:
4702 + version "2.0.1"
4703 + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
4704 + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
4705 + dependencies:
4706 + for-own "^0.1.4"
4707 + is-extendable "^0.1.1"
4708 +
4709 +object.pick@^1.3.0:
4710 + version "1.3.0"
4711 + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
4712 + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
4713 + dependencies:
4714 + isobject "^3.0.1"
4715 +
4716 +on-finished@~2.3.0:
4717 + version "2.3.0"
4718 + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
4719 + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
4720 + dependencies:
4721 + ee-first "1.1.1"
4722 +
4723 +on-headers@~1.0.2:
4724 + version "1.0.2"
4725 + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
4726 + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
4727 +
4728 +once@^1.3.0, once@^1.3.3, once@^1.4.0:
4729 + version "1.4.0"
4730 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
4731 + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
4732 + dependencies:
4733 + wrappy "1"
4734 +
4735 +onetime@^1.0.0:
4736 + version "1.1.0"
4737 + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
4738 + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=
4739 +
4740 +open@0.0.5:
4741 + version "0.0.5"
4742 + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc"
4743 + integrity sha1-QsPhjslUZra/DcQvOilFw/DK2Pw=
4744 +
4745 +opn@4.0.2:
4746 + version "4.0.2"
4747 + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95"
4748 + integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU=
4749 + dependencies:
4750 + object-assign "^4.0.1"
4751 + pinkie-promise "^2.0.0"
4752 +
4753 +optimist@~0.6.0, optimist@~0.6.1:
4754 + version "0.6.1"
4755 + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
4756 + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
4757 + dependencies:
4758 + minimist "~0.0.1"
4759 + wordwrap "~0.0.2"
4760 +
4761 +optionator@^0.8.1, optionator@^0.8.2:
4762 + version "0.8.3"
4763 + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
4764 + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
4765 + dependencies:
4766 + deep-is "~0.1.3"
4767 + fast-levenshtein "~2.0.6"
4768 + levn "~0.3.0"
4769 + prelude-ls "~1.1.2"
4770 + type-check "~0.3.2"
4771 + word-wrap "~1.2.3"
4772 +
4773 +original@>=0.0.5, original@^1.0.0:
4774 + version "1.0.2"
4775 + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
4776 + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
4777 + dependencies:
4778 + url-parse "^1.4.3"
4779 +
4780 +os-browserify@^0.2.0:
4781 + version "0.2.1"
4782 + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
4783 + integrity sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=
4784 +
4785 +os-homedir@^1.0.0, os-homedir@^1.0.1:
4786 + version "1.0.2"
4787 + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
4788 + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
4789 +
4790 +os-locale@^1.4.0:
4791 + version "1.4.0"
4792 + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
4793 + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
4794 + dependencies:
4795 + lcid "^1.0.0"
4796 +
4797 +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
4798 + version "1.0.2"
4799 + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
4800 + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
4801 +
4802 +osenv@^0.1.4:
4803 + version "0.1.5"
4804 + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
4805 + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
4806 + dependencies:
4807 + os-homedir "^1.0.0"
4808 + os-tmpdir "^1.0.0"
4809 +
4810 +pako@~0.2.0:
4811 + version "0.2.9"
4812 + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
4813 + integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
4814 +
4815 +param-case@2.1.x:
4816 + version "2.1.1"
4817 + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
4818 + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
4819 + dependencies:
4820 + no-case "^2.2.0"
4821 +
4822 +parse-glob@^3.0.4:
4823 + version "3.0.4"
4824 + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
4825 + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
4826 + dependencies:
4827 + glob-base "^0.3.0"
4828 + is-dotfile "^1.0.0"
4829 + is-extglob "^1.0.0"
4830 + is-glob "^2.0.0"
4831 +
4832 +parse-json@^2.2.0:
4833 + version "2.2.0"
4834 + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
4835 + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
4836 + dependencies:
4837 + error-ex "^1.2.0"
4838 +
4839 +parse5@^1.5.1:
4840 + version "1.5.1"
4841 + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
4842 + integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
4843 +
4844 +parseurl@~1.3.2, parseurl@~1.3.3:
4845 + version "1.3.3"
4846 + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
4847 + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
4848 +
4849 +pascalcase@^0.1.1:
4850 + version "0.1.1"
4851 + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
4852 + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
4853 +
4854 +path-browserify@0.0.0:
4855 + version "0.0.0"
4856 + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
4857 + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
4858 +
4859 +path-exists@^2.0.0:
4860 + version "2.1.0"
4861 + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
4862 + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
4863 + dependencies:
4864 + pinkie-promise "^2.0.0"
4865 +
4866 +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
4867 + version "1.0.1"
4868 + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
4869 + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
4870 +
4871 +path-is-inside@^1.0.1:
4872 + version "1.0.2"
4873 + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
4874 + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
4875 +
4876 +path-parse@^1.0.5, path-parse@^1.0.6:
4877 + version "1.0.6"
4878 + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
4879 + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
4880 +
4881 +path-to-regexp@0.1.7:
4882 + version "0.1.7"
4883 + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
4884 + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
4885 +
4886 +path-type@^1.0.0:
4887 + version "1.1.0"
4888 + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
4889 + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
4890 + dependencies:
4891 + graceful-fs "^4.1.2"
4892 + pify "^2.0.0"
4893 + pinkie-promise "^2.0.0"
4894 +
4895 +pbkdf2-compat@2.0.1:
4896 + version "2.0.1"
4897 + resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
4898 + integrity sha1-tuDI+plJTZTgURV1gCpZpcFC8og=
4899 +
4900 +performance-now@^0.2.0:
4901 + version "0.2.0"
4902 + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
4903 + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=
4904 +
4905 +performance-now@^2.1.0:
4906 + version "2.1.0"
4907 + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
4908 + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
4909 +
4910 +pify@^2.0.0:
4911 + version "2.3.0"
4912 + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
4913 + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
4914 +
4915 +pinkie-promise@^2.0.0:
4916 + version "2.0.1"
4917 + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
4918 + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
4919 + dependencies:
4920 + pinkie "^2.0.0"
4921 +
4922 +pinkie@^2.0.0:
4923 + version "2.0.4"
4924 + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
4925 + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
4926 +
4927 +pkg-dir@^1.0.0:
4928 + version "1.0.0"
4929 + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
4930 + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
4931 + dependencies:
4932 + find-up "^1.0.0"
4933 +
4934 +pkg-up@^1.0.0:
4935 + version "1.0.0"
4936 + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
4937 + integrity sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=
4938 + dependencies:
4939 + find-up "^1.0.0"
4940 +
4941 +pluralize@^1.2.1:
4942 + version "1.2.1"
4943 + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
4944 + integrity sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=
4945 +
4946 +posix-character-classes@^0.1.0:
4947 + version "0.1.1"
4948 + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
4949 + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
4950 +
4951 +postcss-calc@^5.2.0:
4952 + version "5.3.1"
4953 + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
4954 + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14=
4955 + dependencies:
4956 + postcss "^5.0.2"
4957 + postcss-message-helpers "^2.0.0"
4958 + reduce-css-calc "^1.2.6"
4959 +
4960 +postcss-colormin@^2.1.8:
4961 + version "2.2.2"
4962 + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
4963 + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
4964 + dependencies:
4965 + colormin "^1.0.5"
4966 + postcss "^5.0.13"
4967 + postcss-value-parser "^3.2.3"
4968 +
4969 +postcss-convert-values@^2.3.4:
4970 + version "2.6.1"
4971 + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
4972 + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
4973 + dependencies:
4974 + postcss "^5.0.11"
4975 + postcss-value-parser "^3.1.2"
4976 +
4977 +postcss-discard-comments@^2.0.4:
4978 + version "2.0.4"
4979 + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
4980 + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=
4981 + dependencies:
4982 + postcss "^5.0.14"
4983 +
4984 +postcss-discard-duplicates@^2.0.1:
4985 + version "2.1.0"
4986 + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
4987 + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI=
4988 + dependencies:
4989 + postcss "^5.0.4"
4990 +
4991 +postcss-discard-empty@^2.0.1:
4992 + version "2.1.0"
4993 + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
4994 + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=
4995 + dependencies:
4996 + postcss "^5.0.14"
4997 +
4998 +postcss-discard-overridden@^0.1.1:
4999 + version "0.1.1"

This file is too large to show in full.

packages/react-art/src/ReactFiberConfigART.js
+45
@@ -455,6 +455,51 @@ export function unhideTextInstance(textInstance, text): void {
455 // Noop
456 }
457
458 +export function applyViewTransitionName(instance, name) {
459 + // Noop
460 +}
461 +
462 +export function restoreViewTransitionName(instance, props) {
463 + // Noop
464 +}
465 +
466 +export function cancelViewTransitionName(instance, name, props) {
467 + // Noop
468 +}
469 +
470 +export function cancelRootViewTransitionName(rootContainer) {
471 + // Noop
472 +}
473 +
474 +export function restoreRootViewTransitionName(rootContainer) {
475 + // Noop
476 +}
477 +
478 +export type InstanceMeasurement = null;
479 +
480 +export function measureInstance(instance) {
481 + return null;
482 +}
483 +
484 +export function wasInstanceInViewport(measurement): boolean {
485 + return true;
486 +}
487 +
488 +export function hasInstanceChanged(oldMeasurement, newMeasurement): boolean {
489 + return false;
490 +}
491 +
492 +export function hasInstanceAffectedParent(
493 + oldMeasurement,
494 + newMeasurement,
495 +): boolean {
496 + return false;
497 +}
498 +
499 +export function startViewTransition() {
500 + return false;
501 +}
502 +
503 export function clearContainer(container) {
504 // TODO Implement this
505 }
packages/react-devtools-shared/src/utils.js
+4
@@ -24,6 +24,7 @@ import {
24 REACT_SUSPENSE_LIST_TYPE,
25 REACT_SUSPENSE_TYPE,
26 REACT_TRACING_MARKER_TYPE,
27 + REACT_VIEW_TRANSITION_TYPE,
28 } from 'shared/ReactSymbols';
29 import {enableRenderableContext} from 'shared/ReactFeatureFlags';
30 import {
@@ -678,6 +679,7 @@ function typeOfWithLegacyElementSymbol(object: any): mixed {
679 case REACT_STRICT_MODE_TYPE:
680 case REACT_SUSPENSE_TYPE:
681 case REACT_SUSPENSE_LIST_TYPE:
682 + case REACT_VIEW_TRANSITION_TYPE:
683 return type;
684 default:
685 const $$typeofType = type && type.$$typeof;
@@ -739,6 +741,8 @@ export function getDisplayNameForReactElement(
741 return 'Suspense';
742 case REACT_SUSPENSE_LIST_TYPE:
743 return 'SuspenseList';
744 + case REACT_VIEW_TRANSITION_TYPE:
745 + return 'ViewTransition';
746 case REACT_TRACING_MARKER_TYPE:
747 return 'TracingMarker';
748 default:
packages/react-dom-bindings/src/client/CSSPropertyOperations.js
+3
@@ -11,6 +11,7 @@ import hyphenateStyleName from '../shared/hyphenateStyleName';
11 import warnValidStyle from '../shared/warnValidStyle';
12 import isUnitlessNumber from '../shared/isUnitlessNumber';
13 import {checkCSSPropertyStringCoercion} from 'shared/CheckStringCoercion';
14 +import {trackHostMutation} from 'react-reconciler/src/ReactFiberMutationTracking';
15
16 /**
17 * Operations for dealing with CSS properties.
@@ -144,12 +145,14 @@ export function setValueForStyles(node, styles, prevStyles) {
145 } else {
146 style[styleName] = '';
147 }
148 + trackHostMutation();
149 }
150 }
151 for (const styleName in styles) {
152 const value = styles[styleName];
153 if (styles.hasOwnProperty(styleName) && prevStyles[styleName] !== value) {
154 setValueForStyle(style, styleName, value);
155 + trackHostMutation();
156 }
157 }
158 } else {
packages/react-dom-bindings/src/client/DOMPropertyOperations.js
+3
@@ -11,6 +11,7 @@ import isAttributeNameSafe from '../shared/isAttributeNameSafe';
11 import {enableTrustedTypesIntegration} from 'shared/ReactFeatureFlags';
12 import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion';
13 import {getFiberCurrentPropsFromNode} from './ReactDOMComponentTree';
14 +import {trackHostMutation} from 'react-reconciler/src/ReactFiberMutationTracking';
15
16 /**
17 * Get the value for a attribute on a node. Only used in DEV for SSR validation.
@@ -217,6 +218,8 @@ export function setValueForPropertyOnCustomComponent(
218 }
219 }
220
221 + trackHostMutation();
222 +
223 if (name in (node: any)) {
224 (node: any)[name] = value;
225 return;
packages/react-dom-bindings/src/client/ReactDOMComponent.js
+64 -12
@@ -63,6 +63,8 @@ import {validateProperties as validateInputProperties} from '../shared/ReactDOMN
63 import {validateProperties as validateUnknownProperties} from '../shared/ReactDOMUnknownPropertyHook';
64 import sanitizeURL from '../shared/sanitizeURL';
65
66 +import {trackHostMutation} from 'react-reconciler/src/ReactFiberMutationTracking';
67 +
68 import {enableTrustedTypesIntegration} from 'shared/ReactFeatureFlags';
69 import {
70 mediaEventTypes,
@@ -363,6 +365,8 @@ function setProp(
365 // $FlowFixMe[unsafe-addition] Flow doesn't want us to use `+` operator with string and bigint
366 setTextContent(domElement, '' + value);
367 }
368 + } else {
369 + return;
370 }
371 break;
372 }
@@ -386,7 +390,7 @@ function setProp(
390 }
391 case 'style': {
392 setValueForStyles(domElement, value, prevValue);
389 - break;
393 + return;
394 }
395 // These attributes accept URLs. These must not allow javascript: URLS.
396 case 'data':
@@ -524,7 +528,7 @@ function setProp(
528 }
529 trapClickOnNonInteractiveElement(((domElement: any): HTMLElement));
530 }
527 - break;
531 + return;
532 }
533 case 'onScroll': {
534 if (value != null) {
@@ -533,7 +537,7 @@ function setProp(
537 }
538 listenToNonDelegatedEvent('scroll', domElement);
539 }
536 - break;
540 + return;
541 }
542 case 'onScrollEnd': {
543 if (value != null) {
@@ -542,7 +546,7 @@ function setProp(
546 }
547 listenToNonDelegatedEvent('scrollend', domElement);
548 }
545 - break;
549 + return;
550 }
551 case 'dangerouslySetInnerHTML': {
552 if (value != null) {
@@ -849,7 +853,7 @@ function setProp(
853 }
854 case 'innerText':
855 case 'textContent':
852 - break;
856 + return;
857 case 'popoverTarget':
858 if (__DEV__) {
859 if (
@@ -879,12 +883,16 @@ function setProp(
883 ) {
884 warnForInvalidEventListener(key, value);
885 }
886 + // Updating events doesn't affect the visuals.
887 + return;
888 } else {
889 const attributeName = getAttributeAlias(key);
890 setValueForAttribute(domElement, attributeName, value);
891 }
892 }
893 }
894 + // To avoid marking things as host mutations we do early returns above.
895 + trackHostMutation();
896 }
897
898 function setPropOnCustomElement(
@@ -898,7 +906,7 @@ function setPropOnCustomElement(
906 switch (key) {
907 case 'style': {
908 setValueForStyles(domElement, value, prevValue);
901 - break;
909 + return;
910 }
911 case 'dangerouslySetInnerHTML': {
912 if (value != null) {
@@ -927,6 +935,8 @@ function setPropOnCustomElement(
935 } else if (typeof value === 'number' || typeof value === 'bigint') {
936 // $FlowFixMe[unsafe-addition] Flow doesn't want us to use `+` operator with string and bigint
937 setTextContent(domElement, '' + value);
938 + } else {
939 + return;
940 }
941 break;
942 }
@@ -937,7 +947,7 @@ function setPropOnCustomElement(
947 }
948 listenToNonDelegatedEvent('scroll', domElement);
949 }
940 - break;
950 + return;
951 }
952 case 'onScrollEnd': {
953 if (value != null) {
@@ -946,7 +956,7 @@ function setPropOnCustomElement(
956 }
957 listenToNonDelegatedEvent('scrollend', domElement);
958 }
949 - break;
959 + return;
960 }
961 case 'onClick': {
962 // TODO: This cast may not be sound for SVG, MathML or custom elements.
@@ -956,29 +966,34 @@ function setPropOnCustomElement(
966 }
967 trapClickOnNonInteractiveElement(((domElement: any): HTMLElement));
968 }
959 - break;
969 + return;
970 }
971 case 'suppressContentEditableWarning':
972 case 'suppressHydrationWarning':
973 case 'innerHTML':
974 case 'ref': {
975 // Noop
966 - break;
976 + return;
977 }
978 case 'innerText': // Properties
979 case 'textContent':
970 - break;
980 + return;
981 // Fall through
982 default: {
983 if (registrationNameDependencies.hasOwnProperty(key)) {
984 if (__DEV__ && value != null && typeof value !== 'function') {
985 warnForInvalidEventListener(key, value);
986 }
987 + return;
988 } else {
989 setValueForPropertyOnCustomComponent(domElement, key, value);
990 + // We track mutations inside this call.
991 + return;
992 }
993 }
994 }
995 + // To avoid marking things as host mutations we do early returns above.
996 + trackHostMutation();
997 }
998
999 export function setInitialProperties(
@@ -1430,26 +1445,44 @@ export function updateProperties(
1445 ) {
1446 switch (propKey) {
1447 case 'type': {
1448 + if (nextProp !== lastProp) {
1449 + trackHostMutation();
1450 + }
1451 type = nextProp;
1452 break;
1453 }
1454 case 'name': {
1455 + if (nextProp !== lastProp) {
1456 + trackHostMutation();
1457 + }
1458 name = nextProp;
1459 break;
1460 }
1461 case 'checked': {
1462 + if (nextProp !== lastProp) {
1463 + trackHostMutation();
1464 + }
1465 checked = nextProp;
1466 break;
1467 }
1468 case 'defaultChecked': {
1469 + if (nextProp !== lastProp) {
1470 + trackHostMutation();
1471 + }
1472 defaultChecked = nextProp;
1473 break;
1474 }
1475 case 'value': {
1476 + if (nextProp !== lastProp) {
1477 + trackHostMutation();
1478 + }
1479 value = nextProp;
1480 break;
1481 }
1482 case 'defaultValue': {
1483 + if (nextProp !== lastProp) {
1484 + trackHostMutation();
1485 + }
1486 defaultValue = nextProp;
1487 break;
1488 }
@@ -1553,8 +1586,9 @@ export function updateProperties(
1586 }
1587 // Fallthrough
1588 default: {
1556 - if (!nextProps.hasOwnProperty(propKey))
1589 + if (!nextProps.hasOwnProperty(propKey)) {
1590 setProp(domElement, tag, propKey, null, nextProps, lastProp);
1591 + }
1592 }
1593 }
1594 }
@@ -1568,15 +1602,24 @@ export function updateProperties(
1602 ) {
1603 switch (propKey) {
1604 case 'value': {
1605 + if (nextProp !== lastProp) {
1606 + trackHostMutation();
1607 + }
1608 value = nextProp;
1609 // This is handled by updateSelect below.
1610 break;
1611 }
1612 case 'defaultValue': {
1613 + if (nextProp !== lastProp) {
1614 + trackHostMutation();
1615 + }
1616 defaultValue = nextProp;
1617 break;
1618 }
1619 case 'multiple': {
1620 + if (nextProp !== lastProp) {
1621 + trackHostMutation();
1622 + }
1623 multiple = nextProp;
1624 // TODO: Just move the special case in here from setProp.
1625 }
@@ -1635,11 +1678,17 @@ export function updateProperties(
1678 ) {
1679 switch (propKey) {
1680 case 'value': {
1681 + if (nextProp !== lastProp) {
1682 + trackHostMutation();
1683 + }
1684 value = nextProp;
1685 // This is handled by updateTextarea below.
1686 break;
1687 }
1688 case 'defaultValue': {
1689 + if (nextProp !== lastProp) {
1690 + trackHostMutation();
1691 + }
1692 defaultValue = nextProp;
1693 break;
1694 }
@@ -1703,6 +1752,9 @@ export function updateProperties(
1752 ) {
1753 switch (propKey) {
1754 case 'selected': {
1755 + if (nextProp !== lastProp) {
1756 + trackHostMutation();
1757 + }
1758 // TODO: Remove support for selected on option.
1759 (domElement: any).selected =
1760 nextProp &&
packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js
+225 -1
@@ -120,7 +120,12 @@ export type Props = {
120 hidden?: boolean,
121 suppressHydrationWarning?: boolean,
122 dangerouslySetInnerHTML?: mixed,
123 - style?: {display?: string, ...},
123 + style?: {
124 + display?: string,
125 + viewTransitionName?: string,
126 + 'view-transition-name'?: string,
127 + ...
128 + },
129 bottom?: null | number,
130 left?: null | number,
131 right?: null | number,
@@ -149,6 +154,7 @@ export type EventTargetChildElement = {
154 },
155 ...
156 };
157 +
158 export type Container =
159 | interface extends Element {_reactRootContainer?: FiberRoot}
160 | interface extends Document {_reactRootContainer?: FiberRoot}
@@ -978,6 +984,224 @@ export function unhideTextInstance(
984 textInstance.nodeValue = text;
985 }
986
987 +export function applyViewTransitionName(
988 + instance: Instance,
989 + name: string,
990 +): void {
991 + instance = ((instance: any): HTMLElement);
992 + // $FlowFixMe[prop-missing]
993 + instance.style.viewTransitionName = name;
994 +}
995 +
996 +export function restoreViewTransitionName(
997 + instance: Instance,
998 + props: Props,
999 +): void {
1000 + instance = ((instance: any): HTMLElement);
1001 + const styleProp = props[STYLE];
1002 + const viewTransitionName =
1003 + styleProp !== undefined && styleProp !== null
1004 + ? styleProp.hasOwnProperty('viewTransitionName')
1005 + ? styleProp.viewTransitionName
1006 + : styleProp.hasOwnProperty('view-transition-name')
1007 + ? styleProp['view-transition-name']
1008 + : null
1009 + : null;
1010 + // $FlowFixMe[prop-missing]
1011 + instance.style.viewTransitionName =
1012 + viewTransitionName == null || typeof viewTransitionName === 'boolean'
1013 + ? ''
1014 + : // The value would've errored already if it wasn't safe.
1015 + // eslint-disable-next-line react-internal/safe-string-coercion
1016 + ('' + viewTransitionName).trim();
1017 +}
1018 +
1019 +export function cancelViewTransitionName(
1020 + instance: Instance,
1021 + oldName: string,
1022 + props: Props,
1023 +): void {
1024 + // To cancel the "new" state and paint this instance as part of the parent, all we have to do
1025 + // is remove the view-transition-name before we exit startViewTransition.
1026 + restoreViewTransitionName(instance, props);
1027 + // There isn't a way to cancel an "old" state but what we can do is hide it by animating it.
1028 + // Since it is already removed from the old state of the parent, this technique only works
1029 + // if the parent also isn't transitioning. Therefore we should only cancel the root most
1030 + // ViewTransitions.
1031 + const documentElement = instance.ownerDocument.documentElement;
1032 + if (documentElement !== null) {
1033 + documentElement.animate(
1034 + {opacity: [0, 0], pointerEvents: ['none', 'none']},
1035 + {
1036 + duration: 0,
1037 + fill: 'forwards',
1038 + pseudoElement: '::view-transition-group(' + oldName + ')',
1039 + },
1040 + );
1041 + }
1042 +}
1043 +
1044 +export function cancelRootViewTransitionName(rootContainer: Container): void {
1045 + const documentElement: null | HTMLElement =
1046 + rootContainer.nodeType === DOCUMENT_NODE
1047 + ? (rootContainer: any).documentElement
1048 + : rootContainer.ownerDocument.documentElement;
1049 + if (
1050 + documentElement !== null &&
1051 + // $FlowFixMe[prop-missing]
1052 + documentElement.style.viewTransitionName === ''
1053 + ) {
1054 + // $FlowFixMe[prop-missing]
1055 + documentElement.style.viewTransitionName = 'none';
1056 + documentElement.animate(
1057 + {opacity: [0, 0], pointerEvents: ['none', 'none']},
1058 + {
1059 + duration: 0,
1060 + fill: 'forwards',
1061 + pseudoElement: '::view-transition-group(root)',
1062 + },
1063 + );
1064 + // By default the root ::view-transition selector captures all pointer events,
1065 + // which means nothing gets interactive. We want to let whatever is not animating
1066 + // remain interactive during the transition. To do that, we set the size to nothing
1067 + // so that the transition doesn't capture any clicks. We don't set pointer-events
1068 + // on this one as that would apply to all running transitions. This lets animations
1069 + // that are running to block clicks so that they don't end up incorrectly hitting
1070 + // whatever is below the animation.
1071 + documentElement.animate(
1072 + {width: [0, 0], height: [0, 0]},
1073 + {
1074 + duration: 0,
1075 + fill: 'forwards',
1076 + pseudoElement: '::view-transition',
1077 + },
1078 + );
1079 + }
1080 +}
1081 +
1082 +export function restoreRootViewTransitionName(rootContainer: Container): void {
1083 + const documentElement: null | HTMLElement =
1084 + rootContainer.nodeType === DOCUMENT_NODE
1085 + ? (rootContainer: any).documentElement
1086 + : rootContainer.ownerDocument.documentElement;
1087 + if (
1088 + documentElement !== null &&
1089 + // $FlowFixMe[prop-missing]
1090 + documentElement.style.viewTransitionName === 'none'
1091 + ) {
1092 + // $FlowFixMe[prop-missing]
1093 + documentElement.style.viewTransitionName = '';
1094 + }
1095 +}
1096 +
1097 +export type InstanceMeasurement = {
1098 + rect: ClientRect | DOMRect,
1099 + abs: boolean, // is absolutely positioned
1100 + clip: boolean, // is a clipping parent
1101 + view: boolean, // is in viewport bounds
1102 +};
1103 +
1104 +export function measureInstance(instance: Instance): InstanceMeasurement {
1105 + const ownerWindow = instance.ownerDocument.defaultView;
1106 + const rect = instance.getBoundingClientRect();
1107 + const computedStyle = getComputedStyle(instance);
1108 + return {
1109 + rect: rect,
1110 + abs:
1111 + // Absolutely positioned instances don't contribute their size to the parent.
1112 + computedStyle.position === 'absolute' ||
1113 + computedStyle.position === 'fixed',
1114 + clip:
1115 + // If a ViewTransition boundary acts as a clipping parent group we should
1116 + // always mark it to animate if its children do so that we can clip them.
1117 + // This doesn't actually have any effect yet until browsers implement
1118 + // layered capture and nested view transitions.
1119 + computedStyle.clipPath !== 'none' ||
1120 + computedStyle.overflow !== 'visible' ||
1121 + computedStyle.filter !== 'none' ||
1122 + computedStyle.mask !== 'none' ||
1123 + computedStyle.mask !== 'none' ||
1124 + computedStyle.borderRadius !== '0px',
1125 + view:
1126 + // If the instance was within the bounds of the viewport. We don't care as
1127 + // much about if it was fully occluded because then it can still pop out.
1128 + rect.bottom >= 0 &&
1129 + rect.right >= 0 &&
1130 + rect.top <= ownerWindow.innerHeight &&
1131 + rect.left <= ownerWindow.innerWidth,
1132 + };
1133 +}
1134 +
1135 +export function wasInstanceInViewport(
1136 + measurement: InstanceMeasurement,
1137 +): boolean {
1138 + return measurement.view;
1139 +}
1140 +
1141 +export function hasInstanceChanged(
1142 + oldMeasurement: InstanceMeasurement,
1143 + newMeasurement: InstanceMeasurement,
1144 +): boolean {
1145 + // Note: This is not guaranteed from the same instance in the case that the Instance of the
1146 + // ViewTransition swaps out but it's still the same ViewTransition instance.
1147 + if (newMeasurement.clip) {
1148 + // If we're a clipping parent, we always animate if any of our children do so that we can clip
1149 + // them. This doesn't yet until browsers implement layered capture and nested view transitions.
1150 + return true;
1151 + }
1152 + const oldRect = oldMeasurement.rect;
1153 + const newRect = newMeasurement.rect;
1154 + return (
1155 + oldRect.y !== newRect.y ||
1156 + oldRect.x !== newRect.x ||
1157 + oldRect.height !== newRect.height ||
1158 + oldRect.width !== newRect.width
1159 + );
1160 +}
1161 +
1162 +export function hasInstanceAffectedParent(
1163 + oldMeasurement: InstanceMeasurement,
1164 + newMeasurement: InstanceMeasurement,
1165 +): boolean {
1166 + // Note: This is not guaranteed from the same instance in the case that the Instance of the
1167 + // ViewTransition swaps out but it's still the same ViewTransition instance.
1168 + // If the instance has resized, it might have affected the parent layout.
1169 + if (newMeasurement.abs) {
1170 + // Absolutely positioned elements don't affect the parent layout, unless they
1171 + // previously were not absolutely positioned.
1172 + return !oldMeasurement.abs;
1173 + }
1174 + const oldRect = oldMeasurement.rect;
1175 + const newRect = newMeasurement.rect;
1176 + return oldRect.height !== newRect.height || oldRect.width !== newRect.width;
1177 +}
1178 +
1179 +export function startViewTransition(
1180 + rootContainer: Container,
1181 + mutationCallback: () => void,
1182 + afterMutationCallback: () => void,
1183 + layoutCallback: () => void,
1184 + passiveCallback: () => mixed,
1185 +): boolean {
1186 + const ownerDocument =
1187 + rootContainer.nodeType === DOCUMENT_NODE
1188 + ? rootContainer
1189 + : rootContainer.ownerDocument;
1190 + // $FlowFixMe[prop-missing]
1191 + if (typeof ownerDocument.startViewTransition !== 'function') {
1192 + return false;
1193 + }
1194 + // $FlowFixMe[incompatible-use]
1195 + const transition = ownerDocument.startViewTransition(() => {
1196 + mutationCallback();
1197 + // TODO: Wait for fonts.
1198 + afterMutationCallback();
1199 + });
1200 + transition.ready.then(layoutCallback, layoutCallback);
1201 + transition.finished.then(passiveCallback);
1202 + return true;
1203 +}
1204 +
1205 export function clearContainer(container: Container): void {
1206 const nodeType = container.nodeType;
1207 if (nodeType === DOCUMENT_NODE) {
packages/react-is/src/ReactIs.js
+2
@@ -23,6 +23,7 @@ import {
23 REACT_STRICT_MODE_TYPE,
24 REACT_SUSPENSE_TYPE,
25 REACT_SUSPENSE_LIST_TYPE,
26 + REACT_VIEW_TRANSITION_TYPE,
27 } from 'shared/ReactSymbols';
28 import isValidElementType from 'shared/isValidElementType';
29 import {enableRenderableContext} from 'shared/ReactFeatureFlags';
@@ -40,6 +41,7 @@ export function typeOf(object: any): mixed {
41 case REACT_STRICT_MODE_TYPE:
42 case REACT_SUSPENSE_TYPE:
43 case REACT_SUSPENSE_LIST_TYPE:
44 + case REACT_VIEW_TRANSITION_TYPE:
45 return type;
46 default:
47 const $$typeofType = type && type.$$typeof;
packages/react-native-renderer/src/ReactFiberConfigNative.js
+67
@@ -522,6 +522,73 @@ export function unhideInstance(instance: Instance, props: Props): void {
522 );
523 }
524
525 +export function applyViewTransitionName(
526 + instance: Instance,
527 + name: string,
528 +): void {
529 + // Not yet implemented
530 +}
531 +
532 +export function restoreViewTransitionName(
533 + instance: Instance,
534 + props: Props,
535 +): void {
536 + // Not yet implemented
537 +}
538 +
539 +export function cancelViewTransitionName(
540 + instance: Instance,
541 + name: string,
542 + props: Props,
543 +): void {
544 + // Not yet implemented
545 +}
546 +
547 +export function cancelRootViewTransitionName(rootContainer: Container): void {
548 + // Not yet implemented
549 +}
550 +
551 +export function restoreRootViewTransitionName(rootContainer: Container): void {
552 + // Not yet implemented
553 +}
554 +
555 +export type InstanceMeasurement = null;
556 +
557 +export function measureInstance(instance: Instance): InstanceMeasurement {
558 + // This heuristic is better implemented at the native layer.
559 + return null;
560 +}
561 +
562 +export function wasInstanceInViewport(
563 + measurement: InstanceMeasurement,
564 +): boolean {
565 + return true;
566 +}
567 +
568 +export function hasInstanceChanged(
569 + oldMeasurement: InstanceMeasurement,
570 + newMeasurement: InstanceMeasurement,
571 +): boolean {
572 + return false;
573 +}
574 +
575 +export function hasInstanceAffectedParent(
576 + oldMeasurement: InstanceMeasurement,
577 + newMeasurement: InstanceMeasurement,
578 +): boolean {
579 + return false;
580 +}
581 +
582 +export function startViewTransition(
583 + rootContainer: Container,
584 + mutationCallback: () => void,
585 + afterMutationCallback: () => void,
586 + layoutCallback: () => void,
587 + passiveCallback: () => mixed,
588 +): boolean {
589 + return false;
590 +}
591 +
592 export function clearContainer(container: Container): void {
593 // TODO Implement this for React Native
594 // UIManager does not expose a "remove all" type method.
packages/react-noop-renderer/src/createReactNoop.js
+47
@@ -81,6 +81,7 @@ type CreateRootOptions = {
81 onCaughtError?: (error: mixed, errorInfo: {componentStack: string}) => void,
82 ...
83 };
84 +type InstanceMeasurement = null;
85
86 type SuspenseyCommitSubscription = {
87 pendingCount: number,
@@ -731,6 +732,52 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
732 textInstance.hidden = false;
733 },
734
735 + applyViewTransitionName(instance: Instance, name: string): void {},
736 +
737 + restoreViewTransitionName(instance: Instance, props: Props): void {},
738 +
739 + cancelViewTransitionName(
740 + instance: Instance,
741 + name: string,
742 + props: Props,
743 + ): void {},
744 +
745 + cancelRootViewTransitionName(rootContainer: Container): void {},
746 +
747 + restoreRootViewTransitionName(rootContainer: Container): void {},
748 +
749 + measureInstance(instance: Instance): InstanceMeasurement {
750 + return null;
751 + },
752 +
753 + wasInstanceInViewport(measurement: InstanceMeasurement): boolean {
754 + return true;
755 + },
756 +
757 + hasInstanceChanged(
758 + oldMeasurement: InstanceMeasurement,
759 + newMeasurement: InstanceMeasurement,
760 + ): boolean {
761 + return false;
762 + },
763 +
764 + hasInstanceAffectedParent(
765 + oldMeasurement: InstanceMeasurement,
766 + newMeasurement: InstanceMeasurement,
767 + ): boolean {
768 + return false;
769 + },
770 +
771 + startViewTransition(
772 + rootContainer: Container,
773 + mutationCallback: () => void,
774 + afterMutationCallback: () => void,
775 + layoutCallback: () => void,
776 + passiveCallback: () => mixed,
777 + ): boolean {
778 + return false;
779 + },
780 +
781 resetTextContent(instance: Instance): void {
782 instance.text = null;
783 },
packages/react-reconciler/src/ReactFiber.js
+29
@@ -19,6 +19,10 @@ import type {
19 OffscreenProps,
20 OffscreenInstance,
21 } from './ReactFiberActivityComponent';
22 +import type {
23 + ViewTransitionProps,
24 + ViewTransitionInstance,
25 +} from './ReactFiberViewTransitionComponent';
26 import type {TracingMarkerInstance} from './ReactFiberTracingMarkerComponent';
27
28 import {
@@ -37,6 +41,7 @@ import {
41 disableLegacyMode,
42 enableObjectFiber,
43 enableOwnerStacks,
44 + enableViewTransition,
45 } from 'shared/ReactFeatureFlags';
46 import {NoFlags, Placement, StaticMask} from './ReactFiberFlags';
47 import {ConcurrentRoot} from './ReactRootTags';
@@ -66,6 +71,7 @@ import {
71 LegacyHiddenComponent,
72 TracingMarkerComponent,
73 Throw,
74 + ViewTransitionComponent,
75 } from './ReactWorkTags';
76 import {OffscreenVisible} from './ReactFiberActivityComponent';
77 import {getComponentNameFromOwner} from 'react-reconciler/src/getComponentNameFromFiber';
@@ -101,6 +107,7 @@ import {
107 REACT_LEGACY_HIDDEN_TYPE,
108 REACT_TRACING_MARKER_TYPE,
109 REACT_ELEMENT_TYPE,
110 + REACT_VIEW_TRANSITION_TYPE,
111 } from 'shared/ReactSymbols';
112 import {TransitionTracingMarker} from './ReactFiberTracingMarkerComponent';
113 import {
@@ -617,6 +624,11 @@ export function createFiberFromTypeAndProps(
624 return createFiberFromLegacyHidden(pendingProps, mode, lanes, key);
625 }
626 // Fall through
627 + case REACT_VIEW_TRANSITION_TYPE:
628 + if (enableViewTransition) {
629 + return createFiberFromViewTransition(pendingProps, mode, lanes, key);
630 + }
631 + // Fall through
632 case REACT_SCOPE_TYPE:
633 if (enableScopeAPI) {
634 return createFiberFromScope(type, pendingProps, mode, lanes, key);
@@ -863,6 +875,23 @@ export function createFiberFromOffscreen(
875 return fiber;
876 }
877
878 +export function createFiberFromViewTransition(
879 + pendingProps: ViewTransitionProps,
880 + mode: TypeOfMode,
881 + lanes: Lanes,
882 + key: null | string,
883 +): Fiber {
884 + const fiber = createFiber(ViewTransitionComponent, pendingProps, key, mode);
885 + fiber.elementType = REACT_VIEW_TRANSITION_TYPE;
886 + fiber.lanes = lanes;
887 + const instance: ViewTransitionInstance = {
888 + autoName: null,
889 + paired: null,
890 + };
891 + fiber.stateNode = instance;
892 + return fiber;
893 +}
894 +
895 export function createFiberFromLegacyHidden(
896 pendingProps: OffscreenProps,
897 mode: TypeOfMode,
packages/react-reconciler/src/ReactFiberBeginWork.js
+44
@@ -28,6 +28,11 @@ import type {
28 OffscreenQueue,
29 OffscreenInstance,
30 } from './ReactFiberActivityComponent';
31 +import type {
32 + ViewTransitionProps,
33 + ViewTransitionInstance,
34 +} from './ReactFiberViewTransitionComponent';
35 +import {assignViewTransitionAutoName} from './ReactFiberViewTransitionComponent';
36 import {OffscreenDetached} from './ReactFiberActivityComponent';
37 import type {
38 Cache,
@@ -71,6 +76,7 @@ import {
76 CacheComponent,
77 TracingMarkerComponent,
78 Throw,
79 + ViewTransitionComponent,
80 } from './ReactWorkTags';
81 import {
82 NoFlags,
@@ -90,6 +96,7 @@ import {
96 ForceClientRender,
97 Passive,
98 DidDefer,
99 + ViewTransitionNamedStatic,
100 } from './ReactFiberFlags';
101 import {
102 disableLegacyContext,
@@ -107,6 +114,7 @@ import {
114 disableDefaultPropsExceptForClasses,
115 enableOwnerStacks,
116 enableHydrationLaneScheduling,
117 + enableViewTransition,
118 } from 'shared/ReactFeatureFlags';
119 import isArray from 'shared/isArray';
120 import shallowEqual from 'shared/shallowEqual';
@@ -257,6 +265,7 @@ import {
265 markSkippedUpdateLanes,
266 getWorkInProgressRoot,
267 peekDeferredLane,
268 + trackAppearingViewTransition,
269 } from './ReactFiberWorkLoop';
270 import {enqueueConcurrentRenderForLane} from './ReactFiberConcurrentUpdates';
271 import {pushCacheProvider, CacheContext} from './ReactFiberCacheComponent';
@@ -3231,6 +3240,35 @@ function updateSuspenseListComponent(
3240 return workInProgress.child;
3241 }
3242
3243 +function updateViewTransition(
3244 + current: Fiber | null,
3245 + workInProgress: Fiber,
3246 + renderLanes: Lanes,
3247 +) {
3248 + const pendingProps: ViewTransitionProps = workInProgress.pendingProps;
3249 + const instance: ViewTransitionInstance = workInProgress.stateNode;
3250 + if (pendingProps.name != null && pendingProps.name !== 'auto') {
3251 + // Explicitly named boundary. We track it so that we can pair it up with another explicit
3252 + // boundary if we get deleted.
3253 + workInProgress.flags |= ViewTransitionNamedStatic;
3254 + if (current === null) {
3255 + // This is a new mount. We track it in case we end up having a deletion with the same name.
3256 + // TODO: A problem with this strategy is that this subtree might not actually end up mounted.
3257 + trackAppearingViewTransition(instance, pendingProps.name);
3258 + }
3259 + } else {
3260 + // Assign an auto generated name using the useId algorthim if an explicit one is not provided.
3261 + // We don't need the name yet but we do it here to allow hydration state to be used.
3262 + // We might end up needing these to line up if we want to Transition from dehydrated fallback
3263 + // to client rendered content. If we don't end up using that we could just assign an incremeting
3264 + // counter in the commit phase instead.
3265 + assignViewTransitionAutoName(pendingProps, instance);
3266 + }
3267 + const nextChildren = pendingProps.children;
3268 + reconcileChildren(current, workInProgress, nextChildren, renderLanes);
3269 + return workInProgress.child;
3270 +}
3271 +
3272 function updatePortalComponent(
3273 current: Fiber | null,
3274 workInProgress: Fiber,
@@ -4015,6 +4053,12 @@ function beginWork(
4053 }
4054 break;
4055 }
4056 + case ViewTransitionComponent: {
4057 + if (enableViewTransition) {
4058 + return updateViewTransition(current, workInProgress, renderLanes);
4059 + }
4060 + break;
4061 + }
4062 case Throw: {
4063 // This represents a Component that threw in the reconciliation phase.
4064 // So we'll rethrow here. This might be a Thenable.
packages/react-reconciler/src/ReactFiberCommitHostEffects.js
+10 -1
@@ -51,6 +51,7 @@ import {
51 acquireSingletonInstance,
52 } from './ReactFiberConfig';
53 import {captureCommitPhaseError} from './ReactFiberWorkLoop';
54 +import {trackHostMutation} from './ReactFiberMutationTracking';
55
56 import {runWithFiberInDEV} from './ReactCurrentFiber';
57
@@ -80,7 +81,7 @@ export function commitHostUpdate(
81 finishedWork: Fiber,
82 newProps: any,
83 oldProps: any,
83 -) {
84 +): void {
85 try {
86 if (__DEV__) {
87 runWithFiberInDEV(
@@ -101,6 +102,7 @@ export function commitHostUpdate(
102 finishedWork,
103 );
104 }
105 + // Mutations are tracked manually from within commitUpdate.
106 } catch (error) {
107 captureCommitPhaseError(finishedWork, finishedWork.return, error);
108 }
@@ -124,6 +126,7 @@ export function commitHostTextUpdate(
126 } else {
127 commitTextUpdate(textInstance, oldText, newText);
128 }
129 + trackHostMutation();
130 } catch (error) {
131 captureCommitPhaseError(finishedWork, finishedWork.return, error);
132 }
@@ -137,6 +140,7 @@ export function commitHostResetTextContent(finishedWork: Fiber) {
140 } else {
141 resetTextContent(instance);
142 }
143 + trackHostMutation();
144 } catch (error) {
145 captureCommitPhaseError(finishedWork, finishedWork.return, error);
146 }
@@ -281,6 +285,7 @@ function insertOrAppendPlacementNodeIntoContainer(
285 } else {
286 appendChildToContainer(parent, stateNode);
287 }
288 + trackHostMutation();
289 } else if (
290 tag === HostPortal ||
291 (supportsSingletons ? tag === HostSingleton : false)
@@ -316,6 +321,7 @@ function insertOrAppendPlacementNode(
321 } else {
322 appendChild(parent, stateNode);
323 }
324 + trackHostMutation();
325 } else if (
326 tag === HostPortal ||
327 (supportsSingletons ? tag === HostSingleton : false)
@@ -424,6 +430,7 @@ export function commitHostRemoveChildFromContainer(
430 } else {
431 removeChildFromContainer(parentContainer, hostInstance);
432 }
433 + trackHostMutation();
434 } catch (error) {
435 captureCommitPhaseError(deletedFiber, nearestMountedAncestor, error);
436 }
@@ -446,6 +453,7 @@ export function commitHostRemoveChild(
453 } else {
454 removeChild(parentInstance, hostInstance);
455 }
456 + trackHostMutation();
457 } catch (error) {
458 captureCommitPhaseError(deletedFiber, nearestMountedAncestor, error);
459 }
@@ -468,6 +476,7 @@ export function commitHostRootContainerChildren(
476 } else {
477 replaceContainerChildren(containerInfo, pendingChildren);
478 }
479 + trackHostMutation();
480 } catch (error) {
481 captureCommitPhaseError(finishedWork, finishedWork.return, error);
482 }
packages/react-reconciler/src/ReactFiberCommitWork.js
+1059 -35
@@ -14,10 +14,15 @@ import type {
14 Container,
15 HoistableRoot,
16 FormInstance,
17 + InstanceMeasurement,
18 + Props,
19 } from './ReactFiberConfig';
20 import type {Fiber, FiberRoot} from './ReactInternalTypes';
21 import type {Lanes} from './ReactFiberLane';
20 -import {SyncLane} from './ReactFiberLane';
22 +import {
23 + includesOnlyViewTransitionEligibleLanes,
24 + SyncLane,
25 +} from './ReactFiberLane';
26 import type {SuspenseState, RetryQueue} from './ReactFiberSuspenseComponent';
27 import type {UpdateQueue} from './ReactFiberClassUpdateQueue';
28 import type {FunctionComponentUpdateQueue} from './ReactFiberHooks';
@@ -36,6 +41,10 @@ import type {
41 TracingMarkerInstance,
42 TransitionAbort,
43 } from './ReactFiberTracingMarkerComponent';
44 +import type {
45 + ViewTransitionProps,
46 + ViewTransitionInstance,
47 +} from './ReactFiberViewTransitionComponent';
48
49 import {
50 alwaysThrottleRetries,
@@ -52,6 +61,7 @@ import {
61 enableLegacyHidden,
62 disableLegacyMode,
63 enableComponentPerformanceTrack,
64 + enableViewTransition,
65 } from 'shared/ReactFeatureFlags';
66 import {
67 FunctionComponent,
@@ -75,6 +85,7 @@ import {
85 LegacyHiddenComponent,
86 CacheComponent,
87 TracingMarkerComponent,
88 + ViewTransitionComponent,
89 } from './ReactWorkTags';
90 import {
91 NoFlags,
@@ -88,9 +99,11 @@ import {
99 Hydrating,
100 Passive,
101 BeforeMutationMask,
102 + BeforeMutationTransitionMask,
103 MutationMask,
104 LayoutMask,
105 PassiveMask,
106 + PassiveTransitionMask,
107 Visibility,
108 ShouldSuspendCommit,
109 MaySuspendCommit,
@@ -99,6 +112,9 @@ import {
112 PerformedWork,
113 ForceClientRender,
114 DidCapture,
115 + ViewTransitionStatic,
116 + AffectedParentLayout,
117 + ViewTransitionNamedStatic,
118 } from './ReactFiberFlags';
119 import {
120 commitStartTime,
@@ -148,6 +164,15 @@ import {
164 suspendResource,
165 resetFormInstance,
166 registerSuspenseInstanceRetry,
167 + applyViewTransitionName,
168 + restoreViewTransitionName,
169 + cancelViewTransitionName,
170 + cancelRootViewTransitionName,
171 + restoreRootViewTransitionName,
172 + measureInstance,
173 + hasInstanceChanged,
174 + hasInstanceAffectedParent,
175 + wasInstanceInViewport,
176 } from './ReactFiberConfig';
177 import {
178 captureCommitPhaseError,
@@ -177,6 +202,7 @@ import {
202 OffscreenDetached,
203 OffscreenPassiveEffectsConnected,
204 } from './ReactFiberActivityComponent';
205 +import {getViewTransitionName} from './ReactFiberViewTransitionComponent';
206 import {
207 TransitionRoot,
208 TransitionTracingMarker,
@@ -218,6 +244,11 @@ import {
244 commitHostRemoveChild,
245 commitHostSingleton,
246 } from './ReactFiberCommitHostEffects';
247 +import {
248 + viewTransitionMutationContext,
249 + pushMutationContext,
250 + popMutationContext,
251 +} from './ReactFiberMutationTracking';
252
253 // Used during the commit phase to track the state of the Offscreen component stack.
254 // Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.
@@ -238,54 +269,136 @@ let inProgressRoot: FiberRoot | null = null;
269 let focusedInstanceHandle: null | Fiber = null;
270 export let shouldFireAfterActiveInstanceBlur: boolean = false;
271
272 +export let shouldStartViewTransition: boolean = false;
273 +
274 +// Used during the commit phase to track whether a parent ViewTransition component
275 +// might have been affected by any mutations / relayouts below.
276 +let viewTransitionContextChanged: boolean = false;
277 +// We can't cancel view transition children until we know that their parent also
278 +// don't need to transition.
279 +let viewTransitionCancelableChildren: null | Array<Instance | string | Props> =
280 + null; // tupled array where each entry is [instance: Instance, oldName: string, props: Props]
281 +
282 export function commitBeforeMutationEffects(
283 root: FiberRoot,
284 firstChild: Fiber,
285 + committedLanes: Lanes,
286 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
287 ): void {
288 focusedInstanceHandle = prepareForCommit(root.containerInfo);
289 shouldFireAfterActiveInstanceBlur = false;
290 + shouldStartViewTransition = false;
291 +
292 + const isViewTransitionEligible =
293 + enableViewTransition &&
294 + includesOnlyViewTransitionEligibleLanes(committedLanes);
295
296 nextEffect = firstChild;
249 - commitBeforeMutationEffects_begin();
297 + commitBeforeMutationEffects_begin(
298 + isViewTransitionEligible,
299 + appearingViewTransitions,
300 + );
301
302 // We no longer need to track the active instance fiber
303 focusedInstanceHandle = null;
304 }
305
255 -function commitBeforeMutationEffects_begin() {
306 +function commitBeforeMutationEffects_begin(
307 + isViewTransitionEligible: boolean,
308 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
309 +) {
310 + // If this commit is eligible for a View Transition we look into all mutated subtrees.
311 + // TODO: We could optimize this by marking these with the Snapshot subtree flag in the render phase.
312 + const subtreeMask = isViewTransitionEligible
313 + ? BeforeMutationTransitionMask
314 + : BeforeMutationMask;
315 while (nextEffect !== null) {
316 const fiber = nextEffect;
317
318 // This phase is only used for beforeActiveInstanceBlur.
319 // Let's skip the whole loop if it's off.
261 - if (enableCreateEventHandleAPI) {
320 + if (enableCreateEventHandleAPI || isViewTransitionEligible) {
321 // TODO: Should wrap this in flags check, too, as optimization
322 const deletions = fiber.deletions;
323 if (deletions !== null) {
324 for (let i = 0; i < deletions.length; i++) {
325 const deletion = deletions[i];
267 - commitBeforeMutationEffectsDeletion(deletion);
326 + commitBeforeMutationEffectsDeletion(
327 + deletion,
328 + isViewTransitionEligible,
329 + appearingViewTransitions,
330 + );
331 }
332 }
333 }
334
272 - const child = fiber.child;
335 if (
274 - (fiber.subtreeFlags & BeforeMutationMask) !== NoFlags &&
275 - child !== null
336 + enableViewTransition &&
337 + fiber.alternate === null &&
338 + (fiber.flags & Placement) !== NoFlags
339 ) {
340 + // Skip before mutation effects of the children because we don't want
341 + // to trigger updates of any nested view transitions and we shouldn't
342 + // have any other before mutation effects since snapshot effects are
343 + // only applied to updates. TODO: Model this using only flags.
344 + commitBeforeMutationEffects_complete(isViewTransitionEligible);
345 + continue;
346 + }
347 +
348 + // TODO: This should really unify with the switch in commitBeforeMutationEffectsOnFiber recursively.
349 + if (enableViewTransition && fiber.tag === OffscreenComponent) {
350 + const isModernRoot =
351 + disableLegacyMode || (fiber.mode & ConcurrentMode) !== NoMode;
352 + if (isModernRoot) {
353 + const current = fiber.alternate;
354 + const isHidden = fiber.memoizedState !== null;
355 + if (isHidden) {
356 + if (
357 + current !== null &&
358 + current.memoizedState === null &&
359 + isViewTransitionEligible
360 + ) {
361 + // Was previously mounted as visible but is now hidden.
362 + commitExitViewTransitions(current, appearingViewTransitions);
363 + }
364 + // Skip before mutation effects of the children because they're hidden.
365 + commitBeforeMutationEffects_complete(isViewTransitionEligible);
366 + continue;
367 + } else if (current !== null && current.memoizedState !== null) {
368 + // Was previously mounted as hidden but is now visible.
369 + // Skip before mutation effects of the children because we don't want
370 + // to trigger updates of any nested view transitions and we shouldn't
371 + // have any other before mutation effects since snapshot effects are
372 + // only applied to updates. TODO: Model this using only flags.
373 + commitBeforeMutationEffects_complete(isViewTransitionEligible);
374 + continue;
375 + }
376 + }
377 + }
378 +
379 + const child = fiber.child;
380 + if ((fiber.subtreeFlags & subtreeMask) !== NoFlags && child !== null) {
381 child.return = fiber;
382 nextEffect = child;
383 } else {
280 - commitBeforeMutationEffects_complete();
384 + if (isViewTransitionEligible) {
385 + // We are inside an updated subtree. Any mutations that affected the
386 + // parent HostInstance's layout or set of children (such as reorders)
387 + // might have also affected the positioning or size of the inner
388 + // ViewTransitions. Therefore we need to find them inside.
389 + commitNestedViewTransitions(fiber);
390 + }
391 + commitBeforeMutationEffects_complete(isViewTransitionEligible);
392 }
393 }
394 }
395
285 -function commitBeforeMutationEffects_complete() {
396 +function commitBeforeMutationEffects_complete(
397 + isViewTransitionEligible: boolean,
398 +) {
399 while (nextEffect !== null) {
400 const fiber = nextEffect;
288 - commitBeforeMutationEffectsOnFiber(fiber);
401 + commitBeforeMutationEffectsOnFiber(fiber, isViewTransitionEligible);
402
403 const sibling = fiber.sibling;
404 if (sibling !== null) {
@@ -298,7 +411,10 @@ function commitBeforeMutationEffects_complete() {
411 }
412 }
413
301 -function commitBeforeMutationEffectsOnFiber(finishedWork: Fiber) {
414 +function commitBeforeMutationEffectsOnFiber(
415 + finishedWork: Fiber,
416 + isViewTransitionEligible: boolean,
417 +) {
418 const current = finishedWork.alternate;
419 const flags = finishedWork.flags;
420
@@ -365,6 +481,34 @@ function commitBeforeMutationEffectsOnFiber(finishedWork: Fiber) {
481 case IncompleteClassComponent:
482 // Nothing to do for these component types
483 break;
484 + case ViewTransitionComponent:
485 + if (enableViewTransition) {
486 + if (isViewTransitionEligible) {
487 + if (current === null) {
488 + // This is a new mount. We should have handled this as part of the
489 + // Placement effect or it is deeper inside a entering transition.
490 + } else if (
491 + (finishedWork.subtreeFlags &
492 + (Placement |
493 + Update |
494 + ChildDeletion |
495 + ContentReset |
496 + Visibility)) !==
497 + NoFlags
498 + ) {
499 + // Something mutated within this subtree. This might need to cause
500 + // a cross-fade of this parent. We first assign old names to the
501 + // previous tree in the before mutation phase in case we need to.
502 + // TODO: This walks the tree that we might continue walking anyway.
503 + // We should just stash the parent ViewTransitionComponent and continue
504 + // walking the tree until we find HostComponent but to do that we need
505 + // to use a stack which requires refactoring this phase.
506 + commitBeforeUpdateViewTransition(current);
507 + }
508 + }
509 + break;
510 + }
511 + // Fallthrough
512 default: {
513 if ((flags & Snapshot) !== NoFlags) {
514 throw new Error(
@@ -376,7 +520,11 @@ function commitBeforeMutationEffectsOnFiber(finishedWork: Fiber) {
520 }
521 }
522
379 -function commitBeforeMutationEffectsDeletion(deletion: Fiber) {
523 +function commitBeforeMutationEffectsDeletion(
524 + deletion: Fiber,
525 + isViewTransitionEligible: boolean,
526 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
527 +) {
528 if (enableCreateEventHandleAPI) {
529 // TODO (effects) It would be nice to avoid calling doesFiberContain()
530 // Maybe we can repurpose one of the subtreeFlags positions for this instead?
@@ -387,6 +535,584 @@ function commitBeforeMutationEffectsDeletion(deletion: Fiber) {
535 beforeActiveInstanceBlur(deletion);
536 }
537 }
538 + if (isViewTransitionEligible) {
539 + commitExitViewTransitions(deletion, appearingViewTransitions);
540 + }
541 +}
542 +
543 +let viewTransitionHostInstanceIdx = 0;
544 +
545 +function applyViewTransitionToHostInstances(
546 + child: null | Fiber,
547 + name: string,
548 + collectMeasurements: null | Array<InstanceMeasurement>,
549 + stopAtNestedViewTransitions: boolean,
550 +): boolean {
551 + if (!supportsMutation) {
552 + return false;
553 + }
554 + let inViewport = false;
555 + while (child !== null) {
556 + if (child.tag === HostComponent) {
557 + shouldStartViewTransition = true;
558 + const instance: Instance = child.stateNode;
559 + if (collectMeasurements !== null) {
560 + const measurement = measureInstance(instance);
561 + collectMeasurements.push(measurement);
562 + if (wasInstanceInViewport(measurement)) {
563 + inViewport = true;
564 + }
565 + } else if (!inViewport) {
566 + if (wasInstanceInViewport(measureInstance(instance))) {
567 + inViewport = true;
568 + }
569 + }
570 + applyViewTransitionName(
571 + instance,
572 + viewTransitionHostInstanceIdx === 0
573 + ? name
574 + : // If we have multiple Host Instances below, we add a suffix to the name to give
575 + // each one a unique name.
576 + name + '_' + viewTransitionHostInstanceIdx,
577 + );
578 + viewTransitionHostInstanceIdx++;
579 + } else if (
580 + child.tag === OffscreenComponent &&
581 + child.memoizedState !== null
582 + ) {
583 + // Skip any hidden subtrees. They were or are effectively not there.
584 + } else if (
585 + child.tag === ViewTransitionComponent &&
586 + stopAtNestedViewTransitions
587 + ) {
588 + // Skip any nested view transitions for updates since in that case the
589 + // inner most one is the one that handles the update.
590 + } else {
591 + if (
592 + applyViewTransitionToHostInstances(
593 + child.child,
594 + name,
595 + collectMeasurements,
596 + stopAtNestedViewTransitions,
597 + )
598 + ) {
599 + inViewport = true;
600 + }
601 + }
602 + child = child.sibling;
603 + }
604 + return inViewport;
605 +}
606 +
607 +function restoreViewTransitionOnHostInstances(
608 + child: null | Fiber,
609 + stopAtNestedViewTransitions: boolean,
610 +): void {
611 + if (!supportsMutation) {
612 + return;
613 + }
614 + while (child !== null) {
615 + if (child.tag === HostComponent) {
616 + const instance: Instance = child.stateNode;
617 + restoreViewTransitionName(instance, child.memoizedProps);
618 + } else if (
619 + child.tag === OffscreenComponent &&
620 + child.memoizedState !== null
621 + ) {
622 + // Skip any hidden subtrees. They were or are effectively not there.
623 + } else if (
624 + child.tag === ViewTransitionComponent &&
625 + stopAtNestedViewTransitions
626 + ) {
627 + // Skip any nested view transitions for updates since in that case the
628 + // inner most one is the one that handles the update.
629 + } else {
630 + restoreViewTransitionOnHostInstances(
631 + child.child,
632 + stopAtNestedViewTransitions,
633 + );
634 + }
635 + child = child.sibling;
636 + }
637 +}
638 +
639 +function commitAppearingPairViewTransitions(placement: Fiber): void {
640 + if ((placement.subtreeFlags & ViewTransitionNamedStatic) === NoFlags) {
641 + // This has no named view transitions in its subtree.
642 + return;
643 + }
644 + let child = placement.child;
645 + while (child !== null) {
646 + if (child.tag === OffscreenComponent && child.memoizedState === null) {
647 + // This tree was already hidden so we skip it.
648 + } else {
649 + if (
650 + child.tag === ViewTransitionComponent &&
651 + (child.flags & ViewTransitionNamedStatic) !== NoFlags
652 + ) {
653 + const instance: ViewTransitionInstance = child.stateNode;
654 + if (instance.paired) {
655 + const props: ViewTransitionProps = child.memoizedProps;
656 + if (props.name == null || props.name === 'auto') {
657 + throw new Error(
658 + 'Found a pair with an auto name. This is a bug in React.',
659 + );
660 + }
661 + // We found a new appearing view transition with the same name as this deletion.
662 + // We'll transition between them.
663 + viewTransitionHostInstanceIdx = 0;
664 + const inViewport = applyViewTransitionToHostInstances(
665 + child.child,
666 + props.name,
667 + null,
668 + false,
669 + );
670 + if (!inViewport) {
671 + // This boundary is exiting within the viewport but is going to leave the viewport.
672 + // Instead, we treat this as an exit of the previous entry by reverting the new name.
673 + // Ideally we could undo the old transition but it's now too late. It's also on its
674 + // on snapshot. We have know was for it to paint onto the original group.
675 + // TODO: This will lead to things unexpectedly having exit animations that normally
676 + // wouldn't happen. Consider if we should just let this fly off the screen instead.
677 + restoreViewTransitionOnHostInstances(child.child, false);
678 + }
679 + }
680 + }
681 + commitAppearingPairViewTransitions(child);
682 + }
683 + child = child.sibling;
684 + }
685 +}
686 +
687 +function commitEnterViewTransitions(placement: Fiber): void {
688 + if (placement.tag === ViewTransitionComponent) {
689 + const name = getViewTransitionName(
690 + placement.memoizedProps,
691 + placement.stateNode,
692 + );
693 + viewTransitionHostInstanceIdx = 0;
694 + const inViewport = applyViewTransitionToHostInstances(
695 + placement.child,
696 + name,
697 + null,
698 + false,
699 + );
700 + if (!inViewport) {
701 + // Revert the transition names. This boundary is not in the viewport
702 + // so we won't bother animating it.
703 + restoreViewTransitionOnHostInstances(placement.child, false);
704 + // TODO: Should we still visit the children in case a named one was in the viewport?
705 + } else {
706 + commitAppearingPairViewTransitions(placement);
707 + }
708 + } else if ((placement.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
709 + let child = placement.child;
710 + while (child !== null) {
711 + commitEnterViewTransitions(child);
712 + child = child.sibling;
713 + }
714 + } else {
715 + commitAppearingPairViewTransitions(placement);
716 + }
717 +}
718 +
719 +function commitDeletedPairViewTransitions(
720 + deletion: Fiber,
721 + appearingViewTransitions: Map<string, ViewTransitionInstance>,
722 +): void {
723 + if (appearingViewTransitions.size === 0) {
724 + // We've found all.
725 + return;
726 + }
727 + if ((deletion.subtreeFlags & ViewTransitionNamedStatic) === NoFlags) {
728 + // This has no named view transitions in its subtree.
729 + return;
730 + }
731 + let child = deletion.child;
732 + while (child !== null) {
733 + if (child.tag === OffscreenComponent && child.memoizedState === null) {
734 + // This tree was already hidden so we skip it.
735 + } else {
736 + if (
737 + child.tag === ViewTransitionComponent &&
738 + (child.flags & ViewTransitionNamedStatic) !== NoFlags
739 + ) {
740 + const props: ViewTransitionProps = child.memoizedProps;
741 + const name = props.name;
742 + if (name != null && name !== 'auto') {
743 + const pair = appearingViewTransitions.get(name);
744 + if (pair !== undefined) {
745 + // We found a new appearing view transition with the same name as this deletion.
746 + viewTransitionHostInstanceIdx = 0;
747 + const inViewport = applyViewTransitionToHostInstances(
748 + child.child,
749 + name,
750 + null,
751 + false,
752 + );
753 + if (!inViewport) {
754 + // This boundary is not in the viewport so we won't treat it as a matched pair.
755 + // Revert the transition names. This avoids it flying onto the screen which can
756 + // be disruptive and doesn't really preserve any continuity anyway.
757 + restoreViewTransitionOnHostInstances(child.child, false);
758 + } else {
759 + // We'll transition between them.
760 + const oldinstance: ViewTransitionInstance = child.stateNode;
761 + const newInstance: ViewTransitionInstance = pair;
762 + newInstance.paired = oldinstance;
763 + }
764 + // Delete the entry so that we know when we've found all of them
765 + // and can stop searching (size reaches zero).
766 + appearingViewTransitions.delete(name);
767 + if (appearingViewTransitions.size === 0) {
768 + break;
769 + }
770 + }
771 + }
772 + }
773 + commitDeletedPairViewTransitions(child, appearingViewTransitions);
774 + }
775 + child = child.sibling;
776 + }
777 +}
778 +
779 +function commitExitViewTransitions(
780 + deletion: Fiber,
781 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
782 +): void {
783 + if (deletion.tag === ViewTransitionComponent) {
784 + const props: ViewTransitionProps = deletion.memoizedProps;
785 + const name = getViewTransitionName(props, deletion.stateNode);
786 + viewTransitionHostInstanceIdx = 0;
787 + const inViewport = applyViewTransitionToHostInstances(
788 + deletion.child,
789 + name,
790 + null,
791 + false,
792 + );
793 + if (!inViewport) {
794 + // Revert the transition names. This boundary is not in the viewport
795 + // so we won't bother animating it.
796 + restoreViewTransitionOnHostInstances(deletion.child, false);
797 + // TODO: Should we still visit the children in case a named one was in the viewport?
798 + } else if (appearingViewTransitions !== null) {
799 + const pair = appearingViewTransitions.get(name);
800 + if (pair !== undefined) {
801 + // We found a new appearing view transition with the same name as this deletion.
802 + // We'll transition between them instead of running the normal exit.
803 + const oldinstance: ViewTransitionInstance = deletion.stateNode;
804 + const newInstance: ViewTransitionInstance = pair;
805 + newInstance.paired = oldinstance;
806 + // Delete the entry so that we know when we've found all of them
807 + // and can stop searching (size reaches zero).
808 + appearingViewTransitions.delete(name);
809 + }
810 + // Look for more pairs deeper in the tree.
811 + commitDeletedPairViewTransitions(deletion, appearingViewTransitions);
812 + }
813 + } else if ((deletion.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
814 + let child = deletion.child;
815 + while (child !== null) {
816 + commitExitViewTransitions(child, appearingViewTransitions);
817 + child = child.sibling;
818 + }
819 + } else {
820 + if (appearingViewTransitions !== null) {
821 + commitDeletedPairViewTransitions(deletion, appearingViewTransitions);
822 + }
823 + }
824 +}
825 +
826 +function commitBeforeUpdateViewTransition(current: Fiber): void {
827 + // The way we deal with multiple HostInstances as children of a View Transition in an
828 + // update can get tricky. The important bit is that if you swap out n HostInstances
829 + // from n HostInstances then they match up in order. Similarly, if you don't swap
830 + // any HostInstances each instance just transitions as is.
831 + //
832 + // We call this function twice. First we apply the view transition names on the
833 + // "current" tree in the snapshot phase. Then in the mutation phase we apply view
834 + // transition names to the "finishedWork" tree.
835 + //
836 + // This means that if there were insertions or deletions before an updated Instance
837 + // that same Instance might get different names in the "old" and the "new" state.
838 + // For example if you swap two HostInstances inside a ViewTransition they don't
839 + // animate to swap position but rather cross-fade into the other instance. This might
840 + // be unexpected but it is in line with the semantics that the ViewTransition is its
841 + // own layer that cross-fades its content when it updates. If you want to reorder then
842 + // each child needs its own ViewTransition.
843 + const name = getViewTransitionName(current.memoizedProps, current.stateNode);
844 + viewTransitionHostInstanceIdx = 0;
845 + applyViewTransitionToHostInstances(
846 + current.child,
847 + name,
848 + (current.memoizedState = []),
849 + true,
850 + );
851 +}
852 +
853 +function commitNestedViewTransitions(changedParent: Fiber): void {
854 + let child = changedParent.child;
855 + while (child !== null) {
856 + if (child.tag === ViewTransitionComponent) {
857 + // In this case the outer ViewTransition component wins but if there
858 + // was an update through this component then the inner one wins.
859 + const name = getViewTransitionName(child.memoizedProps, child.stateNode);
860 + viewTransitionHostInstanceIdx = 0;
861 + applyViewTransitionToHostInstances(
862 + child.child,
863 + name,
864 + (child.memoizedState = []),
865 + false,
866 + );
867 + } else if ((child.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
868 + commitNestedViewTransitions(child);
869 + }
870 + child = child.sibling;
871 + }
872 +}
873 +
874 +function restorePairedViewTransitions(parent: Fiber): void {
875 + if ((parent.subtreeFlags & ViewTransitionNamedStatic) === NoFlags) {
876 + // This has no named view transitions in its subtree.
877 + return;
878 + }
879 + let child = parent.child;
880 + while (child !== null) {
881 + if (child.tag === OffscreenComponent && child.memoizedState === null) {
882 + // This tree was already hidden so we skip it.
883 + } else {
884 + if (
885 + child.tag === ViewTransitionComponent &&
886 + (child.flags & ViewTransitionNamedStatic) !== NoFlags
887 + ) {
888 + const instance: ViewTransitionInstance = child.stateNode;
889 + if (instance.paired !== null) {
890 + instance.paired = null;
891 + restoreViewTransitionOnHostInstances(child.child, false);
892 + }
893 + }
894 + restorePairedViewTransitions(child);
895 + }
896 + child = child.sibling;
897 + }
898 +}
899 +
900 +function restoreEnterViewTransitions(placement: Fiber): void {
901 + if (placement.tag === ViewTransitionComponent) {
902 + const instance: ViewTransitionInstance = placement.stateNode;
903 + instance.paired = null;
904 + restoreViewTransitionOnHostInstances(placement.child, false);
905 + restorePairedViewTransitions(placement);
906 + } else if ((placement.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
907 + let child = placement.child;
908 + while (child !== null) {
909 + restoreEnterViewTransitions(child);
910 + child = child.sibling;
911 + }
912 + } else {
913 + restorePairedViewTransitions(placement);
914 + }
915 +}
916 +
917 +function restoreExitViewTransitions(deletion: Fiber): void {
918 + if (deletion.tag === ViewTransitionComponent) {
919 + const instance: ViewTransitionInstance = deletion.stateNode;
920 + instance.paired = null;
921 + restoreViewTransitionOnHostInstances(deletion.child, false);
922 + restorePairedViewTransitions(deletion);
923 + } else if ((deletion.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
924 + let child = deletion.child;
925 + while (child !== null) {
926 + restoreExitViewTransitions(child);
927 + child = child.sibling;
928 + }
929 + } else {
930 + restorePairedViewTransitions(deletion);
931 + }
932 +}
933 +
934 +function restoreUpdateViewTransition(
935 + current: Fiber,
936 + finishedWork: Fiber,
937 +): void {
938 + finishedWork.memoizedState = null;
939 + restoreViewTransitionOnHostInstances(current.child, true);
940 + restoreViewTransitionOnHostInstances(finishedWork.child, true);
941 +}
942 +
943 +function restoreNestedViewTransitions(changedParent: Fiber): void {
944 + let child = changedParent.child;
945 + while (child !== null) {
946 + if (child.tag === ViewTransitionComponent) {
947 + child.memoizedState = null;
948 + restoreViewTransitionOnHostInstances(child.child, false);
949 + } else if ((child.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
950 + restoreNestedViewTransitions(child);
951 + }
952 + child = child.sibling;
953 + }
954 +}
955 +
956 +function measureViewTransitionHostInstances(
957 + currentViewTransition: Fiber,
958 + parentViewTransition: Fiber,
959 + child: null | Fiber,
960 + previousMeasurements: null | Array<InstanceMeasurement>,
961 + stopAtNestedViewTransitions: boolean,
962 +): boolean {
963 + if (!supportsMutation) {
964 + return true;
965 + }
966 + let inViewport = false;
967 + while (child !== null) {
968 + if (child.tag === HostComponent) {
969 + const instance: Instance = child.stateNode;
970 + if (
971 + previousMeasurements !== null &&
972 + viewTransitionHostInstanceIdx < previousMeasurements.length
973 + ) {
974 + // The previous measurement of the Instance in this location within the ViewTransition.
975 + // Note that this might not be the same exact Instance if the Instances within the
976 + // ViewTransition changed.
977 + const previousMeasurement =
978 + previousMeasurements[viewTransitionHostInstanceIdx];
979 + const nextMeasurement = measureInstance(instance);
980 + if (
981 + wasInstanceInViewport(previousMeasurement) ||
982 + wasInstanceInViewport(nextMeasurement)
983 + ) {
984 + // If either the old or new state was within the viewport we have to animate this.
985 + // But if it turns out that none of them were we'll be able to skip it.
986 + inViewport = true;
987 + }
988 + if (
989 + (parentViewTransition.flags & Update) === NoFlags &&
990 + hasInstanceChanged(previousMeasurement, nextMeasurement)
991 + ) {
992 + parentViewTransition.flags |= Update;
993 + }
994 + if (hasInstanceAffectedParent(previousMeasurement, nextMeasurement)) {
995 + // If this instance size within its parent has changed it might have caused the
996 + // parent to relayout which needs a cross fade.
997 + parentViewTransition.flags |= AffectedParentLayout;
998 + }
999 + } else {
1000 + // If there was an insertion of extra nodes, we have to assume they affected the parent.
1001 + // It should have already been marked as an Update due to the mutation.
1002 + parentViewTransition.flags |= AffectedParentLayout;
1003 + }
1004 + if ((parentViewTransition.flags & Update) !== NoFlags) {
1005 + // We might update this node so we need to apply its new name for the new state.
1006 + const newName = getViewTransitionName(
1007 + parentViewTransition.memoizedProps,
1008 + parentViewTransition.stateNode,
1009 + );
1010 + applyViewTransitionName(
1011 + instance,
1012 + viewTransitionHostInstanceIdx === 0
1013 + ? newName
1014 + : // If we have multiple Host Instances below, we add a suffix to the name to give
1015 + // each one a unique name.
1016 + newName + '_' + viewTransitionHostInstanceIdx,
1017 + );
1018 + }
1019 + if (!inViewport || (parentViewTransition.flags & Update) === NoFlags) {
1020 + // It turns out that we had no other deeper mutations, the child transitions didn't
1021 + // affect the parent layout and this instance hasn't changed size. So we can skip
1022 + // animating it. However, in the current model this only works if the parent also
1023 + // doesn't animate. So we have to queue these and wait until we complete the parent
1024 + // to cancel them.
1025 + const oldName = getViewTransitionName(
1026 + currentViewTransition.memoizedProps,
1027 + currentViewTransition.stateNode,
1028 + );
1029 + if (viewTransitionCancelableChildren === null) {
1030 + viewTransitionCancelableChildren = [];
1031 + }
1032 + viewTransitionCancelableChildren.push(
1033 + instance,
1034 + oldName,
1035 + child.memoizedProps,
1036 + );
1037 + }
1038 + viewTransitionHostInstanceIdx++;
1039 + } else if (
1040 + child.tag === OffscreenComponent &&
1041 + child.memoizedState !== null
1042 + ) {
1043 + // Skip any hidden subtrees. They were or are effectively not there.
1044 + } else if (
1045 + child.tag === ViewTransitionComponent &&
1046 + stopAtNestedViewTransitions
1047 + ) {
1048 + // Skip any nested view transitions for updates since in that case the
1049 + // inner most one is the one that handles the update.
1050 + // If this inner boundary resized we need to bubble that information up.
1051 + parentViewTransition.flags |= child.flags & AffectedParentLayout;
1052 + } else {
1053 + if (
1054 + measureViewTransitionHostInstances(
1055 + currentViewTransition,
1056 + parentViewTransition,
1057 + child.child,
1058 + previousMeasurements,
1059 + stopAtNestedViewTransitions,
1060 + )
1061 + ) {
1062 + inViewport = true;
1063 + }
1064 + }
1065 + child = child.sibling;
1066 + }
1067 + return inViewport;
1068 +}
1069 +
1070 +function measureUpdateViewTransition(
1071 + current: Fiber,
1072 + finishedWork: Fiber,
1073 +): boolean {
1074 + // If nothing changed due to a mutation, or children changing size
1075 + // and the measurements end up unchanged, we should restore it to not animate.
1076 + viewTransitionHostInstanceIdx = 0;
1077 + const previousMeasurements = current.memoizedState;
1078 + const inViewport = measureViewTransitionHostInstances(
1079 + current,
1080 + finishedWork,
1081 + finishedWork.child,
1082 + previousMeasurements,
1083 + true,
1084 + );
1085 + const previousCount =
1086 + previousMeasurements === null ? 0 : previousMeasurements.length;
1087 + if (viewTransitionHostInstanceIdx !== previousCount) {
1088 + // If we found a different number of child DOM nodes we need to assume that
1089 + // the parent layout may have changed as a result. This is not necessarily
1090 + // true if those nodes were absolutely positioned.
1091 + finishedWork.flags |= AffectedParentLayout;
1092 + }
1093 + return inViewport;
1094 +}
1095 +
1096 +function measureNestedViewTransitions(changedParent: Fiber): void {
1097 + let child = changedParent.child;
1098 + while (child !== null) {
1099 + if (child.tag === ViewTransitionComponent) {
1100 + const current = child.alternate;
1101 + if (current !== null) {
1102 + viewTransitionHostInstanceIdx = 0;
1103 + measureViewTransitionHostInstances(
1104 + current,
1105 + child,
1106 + child.child,
1107 + child.memoizedState,
1108 + false,
1109 + );
1110 + }
1111 + } else if ((child.subtreeFlags & ViewTransitionStatic) !== NoFlags) {
1112 + measureNestedViewTransitions(child);
1113 + }
1114 + child = child.sibling;
1115 + }
1116 }
1117
1118 function commitLayoutEffectOnFiber(
@@ -1643,7 +2369,7 @@ function commitMutationEffectsOnFiber(
2369 case MemoComponent:
2370 case SimpleMemoComponent: {
2371 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1646 - commitReconciliationEffects(finishedWork);
2372 + commitReconciliationEffects(finishedWork, lanes);
2373
2374 if (flags & Update) {
2375 commitHookEffectListUnmount(
@@ -1663,7 +2389,7 @@ function commitMutationEffectsOnFiber(
2389 }
2390 case ClassComponent: {
2391 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1666 - commitReconciliationEffects(finishedWork);
2392 + commitReconciliationEffects(finishedWork, lanes);
2393
2394 if (flags & Ref) {
2395 if (!offscreenSubtreeWasHidden && current !== null) {
@@ -1686,7 +2412,7 @@ function commitMutationEffectsOnFiber(
2412 // null while we are processing mutation effects
2413 const hoistableRoot: HoistableRoot = (currentHoistableRoot: any);
2414 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1689 - commitReconciliationEffects(finishedWork);
2415 + commitReconciliationEffects(finishedWork, lanes);
2416
2417 if (flags & Ref) {
2418 if (!offscreenSubtreeWasHidden && current !== null) {
@@ -1771,7 +2497,7 @@ function commitMutationEffectsOnFiber(
2497 }
2498 case HostComponent: {
2499 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1774 - commitReconciliationEffects(finishedWork);
2500 + commitReconciliationEffects(finishedWork, lanes);
2501
2502 if (flags & Ref) {
2503 if (!offscreenSubtreeWasHidden && current !== null) {
@@ -1821,7 +2547,7 @@ function commitMutationEffectsOnFiber(
2547 }
2548 case HostText: {
2549 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1824 - commitReconciliationEffects(finishedWork);
2550 + commitReconciliationEffects(finishedWork, lanes);
2551
2552 if (flags & Update) {
2553 if (supportsMutation) {
@@ -1856,10 +2582,10 @@ function commitMutationEffectsOnFiber(
2582 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2583 currentHoistableRoot = previousHoistableRoot;
2584
1859 - commitReconciliationEffects(finishedWork);
2585 + commitReconciliationEffects(finishedWork, lanes);
2586 } else {
2587 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1862 - commitReconciliationEffects(finishedWork);
2588 + commitReconciliationEffects(finishedWork, lanes);
2589 }
2590
2591 if (flags & Update) {
@@ -1903,11 +2629,11 @@ function commitMutationEffectsOnFiber(
2629 finishedWork.stateNode.containerInfo,
2630 );
2631 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1906 - commitReconciliationEffects(finishedWork);
2632 + commitReconciliationEffects(finishedWork, lanes);
2633 currentHoistableRoot = previousHoistableRoot;
2634 } else {
2635 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1910 - commitReconciliationEffects(finishedWork);
2636 + commitReconciliationEffects(finishedWork, lanes);
2637 }
2638
2639 if (flags & Update) {
@@ -1925,7 +2651,7 @@ function commitMutationEffectsOnFiber(
2651 const prevEffectDuration = pushNestedEffectDurations();
2652
2653 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1928 - commitReconciliationEffects(finishedWork);
2654 + commitReconciliationEffects(finishedWork, lanes);
2655
2656 if (enableProfilerTimer && enableProfilerCommitHooks) {
2657 const profilerInstance = finishedWork.stateNode;
@@ -1938,7 +2664,7 @@ function commitMutationEffectsOnFiber(
2664 }
2665 case SuspenseComponent: {
2666 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
1941 - commitReconciliationEffects(finishedWork);
2667 + commitReconciliationEffects(finishedWork, lanes);
2668
2669 // TODO: We should mark a flag on the Suspense fiber itself, rather than
2670 // relying on the Offscreen fiber having a flag also being marked. The
@@ -2014,7 +2740,7 @@ function commitMutationEffectsOnFiber(
2740 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2741 }
2742
2017 - commitReconciliationEffects(finishedWork);
2743 + commitReconciliationEffects(finishedWork, lanes);
2744
2745 const offscreenInstance: OffscreenInstance = finishedWork.stateNode;
2746
@@ -2053,10 +2779,6 @@ function commitMutationEffectsOnFiber(
2779 recursivelyTraverseDisappearLayoutEffects(finishedWork);
2780 }
2781 }
2056 - } else {
2057 - if (wasHidden) {
2058 - // TODO: Move re-appear call here for symmetry?
2059 - }
2782 }
2783
2784 // Offscreen with manual mode manages visibility manually.
@@ -2083,7 +2805,7 @@ function commitMutationEffectsOnFiber(
2805 }
2806 case SuspenseListComponent: {
2807 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2086 - commitReconciliationEffects(finishedWork);
2808 + commitReconciliationEffects(finishedWork, lanes);
2809
2810 if (flags & Update) {
2811 const retryQueue: Set<Wakeable> | null =
@@ -2095,10 +2817,34 @@ function commitMutationEffectsOnFiber(
2817 }
2818 break;
2819 }
2820 + case ViewTransitionComponent:
2821 + if (enableViewTransition) {
2822 + const prevMutationContext = pushMutationContext();
2823 + recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2824 + commitReconciliationEffects(finishedWork, lanes);
2825 + const isViewTransitionEligible =
2826 + enableViewTransition &&
2827 + includesOnlyViewTransitionEligibleLanes(lanes);
2828 + if (isViewTransitionEligible) {
2829 + if (current === null) {
2830 + // This is a new mount. We should have handled this as part of the
2831 + // Placement effect or it is deeper inside a entering transition.
2832 + } else if (viewTransitionMutationContext) {
2833 + // Something mutated in this tree so we need to animate this regardless
2834 + // what the measurements say. We use the Update flag to track this.
2835 + // If diffing was done in the render phase, like we used, this could have
2836 + // been done in the render already.
2837 + finishedWork.flags |= Update;
2838 + }
2839 + }
2840 + popMutationContext(prevMutationContext);
2841 + break;
2842 + }
2843 + // Fallthrough
2844 case ScopeComponent: {
2845 if (enableScopeAPI) {
2846 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2101 - commitReconciliationEffects(finishedWork);
2847 + commitReconciliationEffects(finishedWork, lanes);
2848
2849 // TODO: This is a temporary solution that allowed us to transition away
2850 // from React Flare on www.
@@ -2119,7 +2865,7 @@ function commitMutationEffectsOnFiber(
2865 }
2866 default: {
2867 recursivelyTraverseMutationEffects(root, finishedWork, lanes);
2122 - commitReconciliationEffects(finishedWork);
2868 + commitReconciliationEffects(finishedWork, lanes);
2869
2870 break;
2871 }
@@ -2147,7 +2893,10 @@ function commitMutationEffectsOnFiber(
2893 popComponentEffectErrors(prevEffectErrors);
2894 }
2895
2150 -function commitReconciliationEffects(finishedWork: Fiber) {
2896 +function commitReconciliationEffects(
2897 + finishedWork: Fiber,
2898 + committedLanes: Lanes,
2899 +) {
2900 // Placement effects (insertions, reorders) can be scheduled on any fiber
2901 // type. They needs to happen after the children effects have fired, but
2902 // before the effects on this fiber have fired.
@@ -2183,6 +2932,170 @@ function resetFormOnFiber(fiber: Fiber) {
2932 }
2933 }
2934
2935 +export function commitAfterMutationEffects(
2936 + root: FiberRoot,
2937 + finishedWork: Fiber,
2938 + committedLanes: Lanes,
2939 +): void {
2940 + if (!enableViewTransition) {
2941 + // This phase is only used for view transitions.
2942 + return;
2943 + }
2944 + commitAfterMutationEffectsOnFiber(finishedWork, root, committedLanes);
2945 +}
2946 +
2947 +function recursivelyTraverseAfterMutationEffects(
2948 + root: FiberRoot,
2949 + parentFiber: Fiber,
2950 + lanes: Lanes,
2951 +) {
2952 + // We need to visit the same nodes that we visited in the before mutation phase.
2953 + if (parentFiber.subtreeFlags & BeforeMutationTransitionMask) {
2954 + let child = parentFiber.child;
2955 + while (child !== null) {
2956 + commitAfterMutationEffectsOnFiber(child, root, lanes);
2957 + child = child.sibling;
2958 + }
2959 + } else {
2960 + // Nothing has changed in this subtree, but the parent may have still affected
2961 + // its size and position. We need to measure this and if not, restore it to
2962 + // not animate.
2963 + measureNestedViewTransitions(parentFiber);
2964 + if ((parentFiber.flags & AffectedParentLayout) !== NoFlags) {
2965 + // This boundary changed size in a way that may have caused its parent to
2966 + // relayout. We need to bubble this information up to the parent.
2967 + viewTransitionContextChanged = true;
2968 + }
2969 + }
2970 +}
2971 +
2972 +function commitAfterMutationEffectsOnFiber(
2973 + finishedWork: Fiber,
2974 + root: FiberRoot,
2975 + lanes: Lanes,
2976 +) {
2977 + const current = finishedWork.alternate;
2978 + if (current === null) {
2979 + // This is a newly inserted subtree. We can't use Placement flags to detect
2980 + // this since they get removed in the mutation phase. Usually it's not enough
2981 + // to just check current because that can also happen deeper in the same tree.
2982 + // However, since we don't need to visit newly inserted subtrees in AfterMutation
2983 + // we can just bail after we're done with the first one.
2984 + // The first ViewTransition inside a newly mounted tree runs an enter transition
2985 + // but other nested ones don't unless they have a named pair.
2986 + commitEnterViewTransitions(finishedWork);
2987 + return;
2988 + }
2989 +
2990 + switch (finishedWork.tag) {
2991 + case HostRoot: {
2992 + viewTransitionContextChanged = false;
2993 + viewTransitionCancelableChildren = null;
2994 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
2995 + if (!viewTransitionContextChanged) {
2996 + // If we didn't leak any resizing out to the root, we don't have to transition
2997 + // the root itself. This means that we can now safely cancel any cancellations
2998 + // that bubbled all the way up.
2999 + const cancelableChildren = viewTransitionCancelableChildren;
3000 + viewTransitionCancelableChildren = null;
3001 + if (cancelableChildren !== null) {
3002 + for (let i = 0; i < cancelableChildren.length; i += 3) {
3003 + cancelViewTransitionName(
3004 + ((cancelableChildren[i]: any): Instance),
3005 + ((cancelableChildren[i + 1]: any): string),
3006 + ((cancelableChildren[i + 2]: any): Props),
3007 + );
3008 + }
3009 + }
3010 + // We also cancel the root itself.
3011 + cancelRootViewTransitionName(root.containerInfo);
3012 + }
3013 + break;
3014 + }
3015 + case HostComponent: {
3016 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
3017 + break;
3018 + }
3019 + case OffscreenComponent: {
3020 + const isModernRoot =
3021 + disableLegacyMode || (finishedWork.mode & ConcurrentMode) !== NoMode;
3022 + if (isModernRoot) {
3023 + const isHidden = finishedWork.memoizedState !== null;
3024 + if (isHidden) {
3025 + // The Offscreen tree is hidden. Skip over its after mutation effects.
3026 + } else {
3027 + // The Offscreen tree is visible.
3028 + const wasHidden = current.memoizedState !== null;
3029 + if (wasHidden) {
3030 + commitEnterViewTransitions(finishedWork);
3031 + // If it was previous hidden then the children are treated as enter
3032 + // not updates so we don't need to visit these children.
3033 + } else {
3034 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
3035 + }
3036 + }
3037 + } else {
3038 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
3039 + }
3040 + break;
3041 + }
3042 + case ViewTransitionComponent: {
3043 + if (
3044 + (finishedWork.subtreeFlags &
3045 + (Placement | Update | ChildDeletion | ContentReset | Visibility)) !==
3046 + NoFlags
3047 + ) {
3048 + const prevContextChanged = viewTransitionContextChanged;
3049 + const prevCancelableChildren = viewTransitionCancelableChildren;
3050 + viewTransitionContextChanged = false;
3051 + viewTransitionCancelableChildren = null;
3052 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
3053 +
3054 + if (viewTransitionContextChanged) {
3055 + finishedWork.flags |= Update;
3056 + }
3057 +
3058 + const inViewport = measureUpdateViewTransition(current, finishedWork);
3059 +
3060 + if ((finishedWork.flags & Update) === NoFlags || !inViewport) {
3061 + // If this boundary didn't update, then we may be able to cancel its children.
3062 + // We bubble them up to the parent set to be determined later if we can cancel.
3063 + // Similarly, if old and new state was outside the viewport, we can skip it
3064 + // even if it did update.
3065 + if (prevCancelableChildren === null) {
3066 + // Bubbling up this whole set to the parent.
3067 + } else {
3068 + // Merge with parent set.
3069 + // $FlowFixMe[method-unbinding]
3070 + prevCancelableChildren.push.apply(
3071 + prevCancelableChildren,
3072 + viewTransitionCancelableChildren,
3073 + );
3074 + viewTransitionCancelableChildren = prevCancelableChildren;
3075 + }
3076 + } else {
3077 + // If this boundary did update, we cannot cancel its children so those are dropped.
3078 + viewTransitionCancelableChildren = prevCancelableChildren;
3079 + }
3080 +
3081 + if ((finishedWork.flags & AffectedParentLayout) !== NoFlags) {
3082 + // This boundary changed size in a way that may have caused its parent to
3083 + // relayout. We need to bubble this information up to the parent.
3084 + viewTransitionContextChanged = true;
3085 + } else {
3086 + // Otherwise, we restore it to whatever the parent had found so far.
3087 + viewTransitionContextChanged = prevContextChanged;
3088 + }
3089 + }
3090 + break;
3091 + }
3092 + default: {
3093 + recursivelyTraverseAfterMutationEffects(root, finishedWork, lanes);
3094 + break;
3095 + }
3096 + }
3097 +}
3098 +
3099 export function commitLayoutEffects(
3100 finishedWork: Fiber,
3101 root: FiberRoot,
@@ -2663,8 +3576,15 @@ function recursivelyTraversePassiveMountEffects(
3576 committedTransitions: Array<Transition> | null,
3577 endTime: number, // Profiling-only. The start time of the next Fiber or root completion.
3578 ) {
3579 + const isViewTransitionEligible =
3580 + enableViewTransition &&
3581 + includesOnlyViewTransitionEligibleLanes(committedLanes);
3582 + // TODO: We could optimize this by marking these with the Passive subtree flag in the render phase.
3583 + const subtreeMask = isViewTransitionEligible
3584 + ? PassiveTransitionMask
3585 + : PassiveMask;
3586 if (
2667 - parentFiber.subtreeFlags & PassiveMask ||
3587 + parentFiber.subtreeFlags & subtreeMask ||
3588 // If this subtree rendered with profiling this commit, we need to visit it to log it.
3589 (enableProfilerTimer &&
3590 enableComponentPerformanceTrack &&
@@ -2697,6 +3617,12 @@ function recursivelyTraversePassiveMountEffects(
3617 child = child.sibling;
3618 }
3619 }
3620 + } else if (isViewTransitionEligible) {
3621 + // We are inside an updated subtree. Any mutations that affected the
3622 + // parent HostInstance's layout or set of children (such as reorders)
3623 + // might have also affected the positioning or size of the inner
3624 + // ViewTransitions. Therefore we need to restore those too.
3625 + restoreNestedViewTransitions(parentFiber);
3626 }
3627 }
3628
@@ -2711,6 +3637,45 @@ function commitPassiveMountOnFiber(
3637 ): void {
3638 const prevEffectStart = pushComponentEffectStart();
3639 const prevEffectErrors = pushComponentEffectErrors();
3640 +
3641 + // If this component rendered in Profiling mode (DEV or in Profiler component) then log its
3642 + // render time. We do this after the fact in the passive effect to avoid the overhead of this
3643 + // getting in the way of the render characteristics and avoid the overhead of unwinding
3644 + // uncommitted renders.
3645 + if (
3646 + enableProfilerTimer &&
3647 + enableComponentPerformanceTrack &&
3648 + (finishedWork.mode & ProfileMode) !== NoMode &&
3649 + ((finishedWork.actualStartTime: any): number) > 0 &&
3650 + (finishedWork.flags & PerformedWork) !== NoFlags
3651 + ) {
3652 + logComponentRender(
3653 + finishedWork,
3654 + ((finishedWork.actualStartTime: any): number),
3655 + endTime,
3656 + inHydratedSubtree,
3657 + );
3658 + }
3659 +
3660 + const isViewTransitionEligible = enableViewTransition
3661 + ? includesOnlyViewTransitionEligibleLanes(committedLanes)
3662 + : false;
3663 +
3664 + if (
3665 + isViewTransitionEligible &&
3666 + finishedWork.alternate === null &&
3667 + // We can't use the Placement flag here because it gets reset earlier. Instead,
3668 + // we check if this is the root of the insertion by checking if the parent
3669 + // was previous existing.
3670 + finishedWork.return !== null &&
3671 + finishedWork.return.alternate !== null
3672 + ) {
3673 + // This was a new mount. This means we could've triggered an enter animation on
3674 + // the content. Restore the view transitions if there were any assigned in the
3675 + // snapshot phase.
3676 + restoreEnterViewTransitions(finishedWork);
3677 + }
3678 +
3679 // When updating this function, also update reconnectPassiveEffects, which does
3680 // most of the same things when an offscreen tree goes from hidden -> visible,
3681 // or when toggling effects inside a hidden tree.
@@ -2817,6 +3782,12 @@ function commitPassiveMountOnFiber(
3782 inHydratedSubtree = wasInHydratedSubtree;
3783 }
3784
3785 + if (isViewTransitionEligible) {
3786 + if (supportsMutation) {
3787 + restoreRootViewTransitionName(finishedRoot.containerInfo);
3788 + }
3789 + }
3790 +
3791 if (flags & Passive) {
3792 let previousCache: Cache | null = null;
3793 if (finishedWork.alternate !== null) {
@@ -2989,11 +3960,22 @@ function commitPassiveMountOnFiber(
3960 case OffscreenComponent: {
3961 // TODO: Pass `current` as argument to this function
3962 const instance: OffscreenInstance = finishedWork.stateNode;
3963 + const current = finishedWork.alternate;
3964 const nextState: OffscreenState | null = finishedWork.memoizedState;
3965
3966 const isHidden = nextState !== null;
3967
3968 if (isHidden) {
3969 + if (
3970 + isViewTransitionEligible &&
3971 + current !== null &&
3972 + current.memoizedState === null
3973 + ) {
3974 + // Content is now hidden but wasn't before. This means we could've
3975 + // triggered an exit animation on the content. Restore the view
3976 + // transitions if there were any assigned in the snapshot phase.
3977 + restoreExitViewTransitions(current);
3978 + }
3979 if (instance._visibility & OffscreenPassiveEffectsConnected) {
3980 // The effects are currently connected. Update them.
3981 recursivelyTraversePassiveMountEffects(
@@ -3031,6 +4013,16 @@ function commitPassiveMountOnFiber(
4013 }
4014 } else {
4015 // Tree is visible
4016 + if (
4017 + isViewTransitionEligible &&
4018 + current !== null &&
4019 + current.memoizedState !== null
4020 + ) {
4021 + // Content is now visible but wasn't before. This means we could've
4022 + // triggered an enter animation on the content. Restore the view
4023 + // transitions if there were any assigned in the snapshot phase.
4024 + restoreEnterViewTransitions(finishedWork);
4025 + }
4026 if (instance._visibility & OffscreenPassiveEffectsConnected) {
4027 // The effects are currently connected. Update them.
4028 recursivelyTraversePassiveMountEffects(
@@ -3060,7 +4052,6 @@ function commitPassiveMountOnFiber(
4052 }
4053
4054 if (flags & Passive) {
3063 - const current = finishedWork.alternate;
4055 commitOffscreenPassiveMountEffects(current, finishedWork, instance);
4056 }
4057 break;
@@ -3080,6 +4071,39 @@ function commitPassiveMountOnFiber(
4071 }
4072 break;
4073 }
4074 + case ViewTransitionComponent: {
4075 + if (enableViewTransition) {
4076 + if (isViewTransitionEligible) {
4077 + const current = finishedWork.alternate;
4078 + if (current === null) {
4079 + // This is a new mount. We should have handled this as part of the
4080 + // Placement effect or it is deeper inside a entering transition.
4081 + } else if (
4082 + (finishedWork.subtreeFlags &
4083 + (Placement |
4084 + Update |
4085 + ChildDeletion |
4086 + ContentReset |
4087 + Visibility)) !==
4088 + NoFlags
4089 + ) {
4090 + // Something mutated within this subtree. This might have caused
4091 + // something to cross-fade if we didn't already cancel it.
4092 + // If not, restore it.
4093 + restoreUpdateViewTransition(current, finishedWork);
4094 + }
4095 + }
4096 + recursivelyTraversePassiveMountEffects(
4097 + finishedRoot,
4098 + finishedWork,
4099 + committedLanes,
4100 + committedTransitions,
4101 + endTime,
4102 + );
4103 + break;
4104 + }
4105 + // Fallthrough
4106 + }
4107 case TracingMarkerComponent: {
4108 if (enableTransitionTracing) {
4109 recursivelyTraversePassiveMountEffects(
packages/react-reconciler/src/ReactFiberCompleteWork.js
+75
@@ -28,6 +28,10 @@ import type {
28 OffscreenState,
29 OffscreenQueue,
30 } from './ReactFiberActivityComponent';
31 +import type {
32 + ViewTransitionProps,
33 + ViewTransitionInstance,
34 +} from './ReactFiberViewTransitionComponent';
35 import {isOffscreenManual} from './ReactFiberActivityComponent';
36 import type {TracingMarkerInstance} from './ReactFiberTracingMarkerComponent';
37 import type {Cache} from './ReactFiberCacheComponent';
@@ -42,6 +46,7 @@ import {
46 passChildrenWhenCloningPersistedNodes,
47 disableLegacyMode,
48 enableSiblingPrerendering,
49 + enableViewTransition,
50 } from 'shared/ReactFeatureFlags';
51
52 import {now} from './Scheduler';
@@ -74,6 +79,7 @@ import {
79 CacheComponent,
80 TracingMarkerComponent,
81 Throw,
82 + ViewTransitionComponent,
83 } from './ReactWorkTags';
84 import {NoMode, ConcurrentMode, ProfileMode} from './ReactTypeOfMode';
85 import {
@@ -92,6 +98,8 @@ import {
98 ScheduleRetry,
99 ShouldSuspendCommit,
100 Cloned,
101 + ViewTransitionStatic,
102 + ViewTransitionNamedStatic,
103 } from './ReactFiberFlags';
104
105 import {
@@ -156,6 +164,7 @@ import {
164 getWorkInProgressTransitions,
165 shouldRemainOnPreviousScreen,
166 markSpawnedRetryLane,
167 + trackAppearingViewTransition,
168 } from './ReactFiberWorkLoop';
169 import {
170 OffscreenLane,
@@ -938,6 +947,34 @@ function completeDehydratedSuspenseBoundary(
947 }
948 }
949
950 +function trackReappearingViewTransitions(workInProgress: Fiber): void {
951 + if ((workInProgress.subtreeFlags & ViewTransitionNamedStatic) === NoFlags) {
952 + // This has no named view transitions in its subtree.
953 + return;
954 + }
955 + // This needs to search for any explicitly named reappearing View Transitions,
956 + // whether they were updated in this transition or unchanged from before.
957 + let child = workInProgress.child;
958 + while (child !== null) {
959 + if (child.tag === OffscreenComponent && child.memoizedState === null) {
960 + // This tree is currently hidden so we skip it.
961 + } else {
962 + if (
963 + child.tag === ViewTransitionComponent &&
964 + (child.flags & ViewTransitionNamedStatic) !== NoFlags
965 + ) {
966 + const props: ViewTransitionProps = child.memoizedProps;
967 + if (props.name != null && props.name !== 'auto') {
968 + const instance: ViewTransitionInstance = child.stateNode;
969 + trackAppearingViewTransition(instance, props.name);
970 + }
971 + }
972 + trackReappearingViewTransitions(child);
973 + }
974 + child = child.sibling;
975 + }
976 +}
977 +
978 function completeWork(
979 current: Fiber | null,
980 workInProgress: Fiber,
@@ -1185,6 +1222,11 @@ function completeWork(
1222
1223 // This can happen when we abort work.
1224 bubbleProperties(workInProgress);
1225 + if (enableViewTransition) {
1226 + // Host Components act as their own View Transitions which doesn't run enter/exit animations.
1227 + // We clear any ViewTransitionStatic flag bubbled from inner View Transitions.
1228 + workInProgress.subtreeFlags &= ~ViewTransitionStatic;
1229 + }
1230 return null;
1231 }
1232
@@ -1210,6 +1252,11 @@ function completeWork(
1252 }
1253 }
1254 bubbleProperties(workInProgress);
1255 + if (enableViewTransition) {
1256 + // Host Components act as their own View Transitions which doesn't run enter/exit animations.
1257 + // We clear any ViewTransitionStatic flag bubbled from inner View Transitions.
1258 + workInProgress.subtreeFlags &= ~ViewTransitionStatic;
1259 + }
1260 return null;
1261 }
1262 // Fall through
@@ -1236,6 +1283,11 @@ function completeWork(
1283
1284 // This can happen when we abort work.
1285 bubbleProperties(workInProgress);
1286 + if (enableViewTransition) {
1287 + // Host Components act as their own View Transitions which doesn't run enter/exit animations.
1288 + // We clear any ViewTransitionStatic flag bubbled from inner View Transitions.
1289 + workInProgress.subtreeFlags &= ~ViewTransitionStatic;
1290 + }
1291 return null;
1292 }
1293
@@ -1280,6 +1332,11 @@ function completeWork(
1332 }
1333 }
1334 bubbleProperties(workInProgress);
1335 + if (enableViewTransition) {
1336 + // Host Components act as their own View Transitions which doesn't run enter/exit animations.
1337 + // We clear any ViewTransitionStatic flag bubbled from inner View Transitions.
1338 + workInProgress.subtreeFlags &= ~ViewTransitionStatic;
1339 + }
1340
1341 // This must come at the very end of the complete phase, because it might
1342 // throw to suspend, and if the resource immediately loads, the work loop
@@ -1739,6 +1796,14 @@ function completeWork(
1796 const prevIsHidden = prevState !== null;
1797 if (prevIsHidden !== nextIsHidden) {
1798 workInProgress.flags |= Visibility;
1799 + if (enableViewTransition && !nextIsHidden) {
1800 + // If we're revealing a new tree, we need to find any named
1801 + // ViewTransitions inside it that might have a deleted pair.
1802 + // We do this in the complete phase in case the tree has
1803 + // changed during the reveal but we have to do it before we
1804 + // find the first deleted pair in the before mutation phase.
1805 + trackReappearingViewTransitions(workInProgress);
1806 + }
1807 }
1808 } else {
1809 // On initial mount, we only need a Visibility effect if the tree
@@ -1832,6 +1897,16 @@ function completeWork(
1897 }
1898 return null;
1899 }
1900 + case ViewTransitionComponent: {
1901 + if (enableViewTransition) {
1902 + // We're a component that might need an exit transition. This flag will
1903 + // bubble up to the parent tree to indicate that there's a child that
1904 + // might need an exit View Transition upon unmount.
1905 + workInProgress.flags |= ViewTransitionStatic;
1906 + bubbleProperties(workInProgress);
1907 + }
1908 + return null;
1909 + }
1910 case Throw: {
1911 if (!disableLegacyMode) {
1912 // Only Legacy Mode completes an errored node.
packages/react-reconciler/src/ReactFiberConfigWithNoMutation.js
+11
@@ -35,3 +35,14 @@ export const hideTextInstance = shim;
35 export const unhideInstance = shim;
36 export const unhideTextInstance = shim;
37 export const clearContainer = shim;
38 +export const applyViewTransitionName = shim;
39 +export const restoreViewTransitionName = shim;
40 +export const cancelViewTransitionName = shim;
41 +export const cancelRootViewTransitionName = shim;
42 +export const restoreRootViewTransitionName = shim;
43 +export type InstanceMeasurement = null;
44 +export const measureInstance = shim;
45 +export const wasInstanceInViewport = shim;
46 +export const hasInstanceChanged = shim;
47 +export const hasInstanceAffectedParent = shim;
48 +export const startViewTransition = shim;
packages/react-reconciler/src/ReactFiberFlags.js
+55 -32
@@ -15,29 +15,29 @@ import {
15 export type Flags = number;
16
17 // Don't change these values. They're used by React Dev Tools.
18 -export const NoFlags = /* */ 0b0000000000000000000000000000;
19 -export const PerformedWork = /* */ 0b0000000000000000000000000001;
20 -export const Placement = /* */ 0b0000000000000000000000000010;
21 -export const DidCapture = /* */ 0b0000000000000000000010000000;
22 -export const Hydrating = /* */ 0b0000000000000001000000000000;
18 +export const NoFlags = /* */ 0b0000000000000000000000000000000;
19 +export const PerformedWork = /* */ 0b0000000000000000000000000000001;
20 +export const Placement = /* */ 0b0000000000000000000000000000010;
21 +export const DidCapture = /* */ 0b0000000000000000000000010000000;
22 +export const Hydrating = /* */ 0b0000000000000000001000000000000;
23
24 // You can change the rest (and add more).
25 -export const Update = /* */ 0b0000000000000000000000000100;
26 -export const Cloned = /* */ 0b0000000000000000000000001000;
25 +export const Update = /* */ 0b0000000000000000000000000000100;
26 +export const Cloned = /* */ 0b0000000000000000000000000001000;
27
28 -export const ChildDeletion = /* */ 0b0000000000000000000000010000;
29 -export const ContentReset = /* */ 0b0000000000000000000000100000;
30 -export const Callback = /* */ 0b0000000000000000000001000000;
31 -/* Used by DidCapture: 0b0000000000000000000010000000; */
28 +export const ChildDeletion = /* */ 0b0000000000000000000000000010000;
29 +export const ContentReset = /* */ 0b0000000000000000000000000100000;
30 +export const Callback = /* */ 0b0000000000000000000000001000000;
31 +/* Used by DidCapture: 0b0000000000000000000000010000000; */
32
33 -export const ForceClientRender = /* */ 0b0000000000000000000100000000;
34 -export const Ref = /* */ 0b0000000000000000001000000000;
35 -export const Snapshot = /* */ 0b0000000000000000010000000000;
36 -export const Passive = /* */ 0b0000000000000000100000000000;
37 -/* Used by Hydrating: 0b0000000000000001000000000000; */
33 +export const ForceClientRender = /* */ 0b0000000000000000000000100000000;
34 +export const Ref = /* */ 0b0000000000000000000001000000000;
35 +export const Snapshot = /* */ 0b0000000000000000000010000000000;
36 +export const Passive = /* */ 0b0000000000000000000100000000000;
37 +/* Used by Hydrating: 0b0000000000000000001000000000000; */
38
39 -export const Visibility = /* */ 0b0000000000000010000000000000;
40 -export const StoreConsistency = /* */ 0b0000000000000100000000000000;
39 +export const Visibility = /* */ 0b0000000000000000010000000000000;
40 +export const StoreConsistency = /* */ 0b0000000000000000100000000000000;
41
42 // It's OK to reuse these bits because these flags are mutually exclusive for
43 // different fiber types. We should really be doing this for as many flags as
@@ -46,35 +46,44 @@ export const ScheduleRetry = StoreConsistency;
46 export const ShouldSuspendCommit = Visibility;
47 export const DidDefer = ContentReset;
48 export const FormReset = Snapshot;
49 +export const AffectedParentLayout = ContentReset;
50
51 export const LifecycleEffectMask =
52 Passive | Update | Callback | Ref | Snapshot | StoreConsistency;
53
54 // Union of all commit flags (flags with the lifetime of a particular commit)
54 -export const HostEffectMask = /* */ 0b0000000000000111111111111111;
55 +export const HostEffectMask = /* */ 0b0000000000000000111111111111111;
56
57 // These are not really side effects, but we still reuse this field.
57 -export const Incomplete = /* */ 0b0000000000001000000000000000;
58 -export const ShouldCapture = /* */ 0b0000000000010000000000000000;
59 -export const ForceUpdateForLegacySuspense = /* */ 0b0000000000100000000000000000;
60 -export const DidPropagateContext = /* */ 0b0000000001000000000000000000;
61 -export const NeedsPropagation = /* */ 0b0000000010000000000000000000;
62 -export const Forked = /* */ 0b0000000100000000000000000000;
58 +export const Incomplete = /* */ 0b0000000000000001000000000000000;
59 +export const ShouldCapture = /* */ 0b0000000000000010000000000000000;
60 +export const ForceUpdateForLegacySuspense = /* */ 0b0000000000000100000000000000000;
61 +export const DidPropagateContext = /* */ 0b0000000000001000000000000000000;
62 +export const NeedsPropagation = /* */ 0b0000000000010000000000000000000;
63 +export const Forked = /* */ 0b0000000000100000000000000000000;
64
65 // Static tags describe aspects of a fiber that are not specific to a render,
66 // e.g. a fiber uses a passive effect (even if there are no updates on this particular render).
67 // This enables us to defer more work in the unmount case,
68 // since we can defer traversing the tree during layout to look for Passive effects,
69 // and instead rely on the static flag as a signal that there may be cleanup work.
69 -export const LayoutStatic = /* */ 0b0000010000000000000000000000;
70 +export const SnapshotStatic = /* */ 0b0000000001000000000000000000000;
71 +export const LayoutStatic = /* */ 0b0000000010000000000000000000000;
72 export const RefStatic = LayoutStatic;
71 -export const PassiveStatic = /* */ 0b0000100000000000000000000000;
72 -export const MaySuspendCommit = /* */ 0b0001000000000000000000000000;
73 +export const PassiveStatic = /* */ 0b0000000100000000000000000000000;
74 +export const MaySuspendCommit = /* */ 0b0000001000000000000000000000000;
75 +// ViewTransitionNamedStatic tracks explicitly name ViewTransition components deeply
76 +// that might need to be visited during clean up. This is similar to SnapshotStatic
77 +// if there was any other use for it.
78 +export const ViewTransitionNamedStatic = /* */ SnapshotStatic;
79 +// ViewTransitionStatic tracks whether there are an ViewTransition components from
80 +// the nearest HostComponent down. It resets at every HostComponent level.
81 +export const ViewTransitionStatic = /* */ 0b0000010000000000000000000000000;
82
83 // Flag used to identify newly inserted fibers. It isn't reset after commit unlike `Placement`.
75 -export const PlacementDEV = /* */ 0b0010000000000000000000000000;
76 -export const MountLayoutDev = /* */ 0b0100000000000000000000000000;
77 -export const MountPassiveDev = /* */ 0b1000000000000000000000000000;
84 +export const PlacementDEV = /* */ 0b0000100000000000000000000000000;
85 +export const MountLayoutDev = /* */ 0b0001000000000000000000000000000;
86 +export const MountPassiveDev = /* */ 0b0010000000000000000000000000000;
87
88 // Groups of flags that are used in the commit phase to skip over trees that
89 // don't contain effects, by checking subtreeFlags.
@@ -94,6 +103,11 @@ export const BeforeMutationMask: number =
103 Update
104 : 0);
105
106 +// For View Transition support we use the snapshot phase to scan the tree for potentially
107 +// affected ViewTransition components.
108 +export const BeforeMutationTransitionMask: number =
109 + Snapshot | Update | Placement | ChildDeletion | Visibility;
110 +
111 export const MutationMask =
112 Placement |
113 Update |
@@ -108,8 +122,17 @@ export const LayoutMask = Update | Callback | Ref | Visibility;
122 // TODO: Split into PassiveMountMask and PassiveUnmountMask
123 export const PassiveMask = Passive | Visibility | ChildDeletion;
124
125 +// For View Transitions we need to visit anything we visited in the snapshot phase to
126 +// restore the view-transition-name after committing the transition.
127 +export const PassiveTransitionMask: number = PassiveMask | Update | Placement;
128 +
129 // Union of tags that don't get reset on clones.
130 // This allows certain concepts to persist without recalculating them,
131 // e.g. whether a subtree contains passive effects or portals.
132 export const StaticMask =
115 - LayoutStatic | PassiveStatic | RefStatic | MaySuspendCommit;
133 + LayoutStatic |
134 + PassiveStatic |
135 + RefStatic |
136 + MaySuspendCommit |
137 + ViewTransitionStatic |
138 + ViewTransitionNamedStatic;
packages/react-reconciler/src/ReactFiberLane.js
+4
@@ -627,6 +627,10 @@ export function includesOnlyHydrationOrOffscreenLanes(lanes: Lanes): boolean {
627 return (lanes & (HydrationLanes | OffscreenLane)) === lanes;
628 }
629
630 +export function includesOnlyViewTransitionEligibleLanes(lanes: Lanes): boolean {
631 + return (lanes & (TransitionLanes | RetryLanes | IdleLane)) === lanes;
632 +}
633 +
634 export function includesBlockingLane(lanes: Lanes): boolean {
635 const SyncDefaultLanes =
636 InputContinuousHydrationLane |
packages/react-reconciler/src/ReactFiberMutationTracking.js new
+33
@@ -0,0 +1,33 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + *
7 + * @flow
8 + */
9 +
10 +import {enableViewTransition} from 'shared/ReactFeatureFlags';
11 +
12 +export let viewTransitionMutationContext: boolean = false;
13 +
14 +export function pushMutationContext(): boolean {
15 + if (!enableViewTransition) {
16 + return false;
17 + }
18 + const prev = viewTransitionMutationContext;
19 + viewTransitionMutationContext = false;
20 + return prev;
21 +}
22 +
23 +export function popMutationContext(prev: boolean): void {
24 + if (enableViewTransition) {
25 + viewTransitionMutationContext = prev;
26 + }
27 +}
28 +
29 +export function trackHostMutation(): void {
30 + if (enableViewTransition) {
31 + viewTransitionMutationContext = true;
32 + }
33 +}
packages/react-reconciler/src/ReactFiberViewTransitionComponent.js new
+70
@@ -0,0 +1,70 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + *
7 + * @flow
8 + */
9 +
10 +import type {ReactNodeList} from 'shared/ReactTypes';
11 +import type {FiberRoot} from './ReactInternalTypes';
12 +
13 +import {getWorkInProgressRoot} from './ReactFiberWorkLoop';
14 +
15 +import {getIsHydrating} from './ReactFiberHydrationContext';
16 +
17 +import {getTreeId} from './ReactFiberTreeContext';
18 +
19 +export type ViewTransitionProps = {
20 + name?: string,
21 + children?: ReactNodeList,
22 +};
23 +
24 +export type ViewTransitionInstance = {
25 + autoName: null | string, // the view-transition-name to use when an explicit one is not specified
26 + paired: null | ViewTransitionInstance, // a temporary state during the commit phase if we have paired this with another instance
27 +};
28 +
29 +let globalClientIdCounter: number = 0;
30 +
31 +export function assignViewTransitionAutoName(
32 + props: ViewTransitionProps,
33 + instance: ViewTransitionInstance,
34 +): string {
35 + if (instance.autoName !== null) {
36 + return instance.autoName;
37 + }
38 +
39 + const root = ((getWorkInProgressRoot(): any): FiberRoot);
40 + const identifierPrefix = root.identifierPrefix;
41 +
42 + let name;
43 + if (getIsHydrating()) {
44 + const treeId = getTreeId();
45 + // Use a captial R prefix for server-generated ids.
46 + name = '\u00AB' + identifierPrefix + 'T' + treeId + '\u00BB';
47 + } else {
48 + // Use a lowercase r prefix for client-generated ids.
49 + const globalClientId = globalClientIdCounter++;
50 + name =
51 + '\u00AB' +
52 + identifierPrefix +
53 + 't' +
54 + globalClientId.toString(32) +
55 + '\u00BB';
56 + }
57 + instance.autoName = name;
58 + return name;
59 +}
60 +
61 +export function getViewTransitionName(
62 + props: ViewTransitionProps,
63 + instance: ViewTransitionInstance,
64 +): string {
65 + if (props.name != null && props.name !== 'auto') {
66 + return props.name;
67 + }
68 + // We should have assigned a name by now.
69 + return (instance.autoName: any);
70 +}
packages/react-reconciler/src/ReactFiberWorkLoop.js
+96 -11
@@ -23,6 +23,7 @@ import type {
23 import type {OffscreenInstance} from './ReactFiberActivityComponent';
24 import type {Resource} from './ReactFiberConfig';
25 import type {RootState} from './ReactFiberRoot';
26 +import type {ViewTransitionInstance} from './ReactFiberViewTransitionComponent';
27
28 import {
29 enableCreateEventHandleAPI,
@@ -41,6 +42,7 @@ import {
42 enableComponentPerformanceTrack,
43 enableYieldingBeforePassive,
44 enableThrottledScheduling,
45 + enableViewTransition,
46 } from 'shared/ReactFeatureFlags';
47 import ReactSharedInternals from 'shared/ReactSharedInternals';
48 import is from 'shared/objectIs';
@@ -91,6 +93,7 @@ import {
93 getCurrentUpdatePriority,
94 resolveUpdatePriority,
95 trackSchedulerEvent,
96 + startViewTransition,
97 } from './ReactFiberConfig';
98
99 import {createWorkInProgress, resetWorkInProgress} from './ReactFiber';
@@ -138,6 +141,7 @@ import {
141 ShouldSuspendCommit,
142 MaySuspendCommit,
143 ScheduleRetry,
144 + PassiveTransitionMask,
145 } from './ReactFiberFlags';
146 import {
147 NoLanes,
@@ -173,6 +177,7 @@ import {
177 UpdateLanes,
178 claimNextTransitionLane,
179 checkIfRootIsPrerendering,
180 + includesOnlyViewTransitionEligibleLanes,
181 } from './ReactFiberLane';
182 import {
183 DiscreteEventPriority,
@@ -198,6 +203,7 @@ import {
203 import {
204 commitBeforeMutationEffects,
205 shouldFireAfterActiveInstanceBlur,
206 + commitAfterMutationEffects,
207 commitLayoutEffects,
208 commitMutationEffects,
209 commitPassiveMountEffects,
@@ -211,6 +217,7 @@ import {
217 invokeLayoutEffectUnmountInDEV,
218 invokePassiveEffectUnmountInDEV,
219 accumulateSuspenseyCommit,
220 + shouldStartViewTransition,
221 } from './ReactFiberCommitWork';
222 import {enqueueUpdate} from './ReactFiberClassUpdateQueue';
223 import {resetContextDependencies} from './ReactFiberNewContext';
@@ -419,6 +426,12 @@ let workInProgressRootConcurrentErrors: Array<CapturedValue<mixed>> | null =
426 // We will log them once the tree commits.
427 let workInProgressRootRecoverableErrors: Array<CapturedValue<mixed>> | null =
428 null;
429 +// This tracks named ViewTransition components that might need to find deleted
430 +// pairs in the snapshot phase.
431 +let workInProgressAppearingViewTransitions: Map<
432 + string,
433 + ViewTransitionInstance,
434 +> | null = null;
435
436 // Tracks when an update occurs during the render phase.
437 let workInProgressRootDidIncludeRecursiveRenderUpdate: boolean = false;
@@ -623,9 +636,10 @@ const THROTTLED_COMMIT = 2;
636
637 const NO_PENDING_EFFECTS = 0;
638 const PENDING_MUTATION_PHASE = 1;
626 -const PENDING_LAYOUT_PHASE = 2;
627 -const PENDING_PASSIVE_PHASE = 3;
628 -let pendingEffectsStatus: 0 | 1 | 2 | 3 = 0;
639 +const PENDING_AFTER_MUTATION_PHASE = 2;
640 +const PENDING_LAYOUT_PHASE = 3;
641 +const PENDING_PASSIVE_PHASE = 4;
642 +let pendingEffectsStatus: 0 | 1 | 2 | 3 | 4 = 0;
643 let pendingEffectsRoot: FiberRoot = (null: any);
644 let pendingFinishedWork: Fiber = (null: any);
645 let pendingEffectsLanes: Lanes = NoLanes;
@@ -1269,6 +1283,7 @@ function finishConcurrentRender(
1283 lanes,
1284 workInProgressRootRecoverableErrors,
1285 workInProgressTransitions,
1286 + workInProgressAppearingViewTransitions,
1287 workInProgressRootDidIncludeRecursiveRenderUpdate,
1288 workInProgressDeferredLane,
1289 workInProgressRootInterleavedUpdatedLanes,
@@ -1318,6 +1333,7 @@ function finishConcurrentRender(
1333 finishedWork,
1334 workInProgressRootRecoverableErrors,
1335 workInProgressTransitions,
1336 + workInProgressAppearingViewTransitions,
1337 workInProgressRootDidIncludeRecursiveRenderUpdate,
1338 lanes,
1339 workInProgressDeferredLane,
@@ -1339,6 +1355,7 @@ function finishConcurrentRender(
1355 finishedWork,
1356 workInProgressRootRecoverableErrors,
1357 workInProgressTransitions,
1358 + workInProgressAppearingViewTransitions,
1359 workInProgressRootDidIncludeRecursiveRenderUpdate,
1360 lanes,
1361 workInProgressDeferredLane,
@@ -1358,6 +1375,7 @@ function commitRootWhenReady(
1375 finishedWork: Fiber,
1376 recoverableErrors: Array<CapturedValue<mixed>> | null,
1377 transitions: Array<Transition> | null,
1378 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
1379 didIncludeRenderPhaseUpdate: boolean,
1380 lanes: Lanes,
1381 spawnedLane: Lane,
@@ -1408,6 +1426,7 @@ function commitRootWhenReady(
1426 lanes,
1427 recoverableErrors,
1428 transitions,
1429 + appearingViewTransitions,
1430 didIncludeRenderPhaseUpdate,
1431 spawnedLane,
1432 updatedLanes,
@@ -1431,6 +1450,7 @@ function commitRootWhenReady(
1450 lanes,
1451 recoverableErrors,
1452 transitions,
1453 + appearingViewTransitions,
1454 didIncludeRenderPhaseUpdate,
1455 spawnedLane,
1456 updatedLanes,
@@ -1900,6 +1920,7 @@ function prepareFreshStack(root: FiberRoot, lanes: Lanes): Fiber {
1920 workInProgressRootConcurrentErrors = null;
1921 workInProgressRootRecoverableErrors = null;
1922 workInProgressRootDidIncludeRecursiveRenderUpdate = false;
1923 + workInProgressAppearingViewTransitions = null;
1924
1925 // Get the lanes that are entangled with whatever we're about to render. We
1926 // track these separately so we can distinguish the priority of the render
@@ -2239,6 +2260,25 @@ export function renderHasNotSuspendedYet(): boolean {
2260 return workInProgressRootExitStatus === RootInProgress;
2261 }
2262
2263 +export function trackAppearingViewTransition(
2264 + instance: ViewTransitionInstance,
2265 + name: string,
2266 +): void {
2267 + if (workInProgressAppearingViewTransitions === null) {
2268 + if (
2269 + !includesOnlyViewTransitionEligibleLanes(workInProgressRootRenderLanes)
2270 + ) {
2271 + return;
2272 + }
2273 + workInProgressAppearingViewTransitions = new Map();
2274 + }
2275 + // Reset the pair in case we didn't end up restoring the instance in previous commits.
2276 + // This could happen since we don't actually commit all tracked instances if they end
2277 + // up in a non-committed subtree.
2278 + instance.paired = null;
2279 + workInProgressAppearingViewTransitions.set(name, instance);
2280 +}
2281 +
2282 // TODO: Over time, this function and renderRootConcurrent have become more
2283 // and more similar. Not sure it makes sense to maintain forked paths. Consider
2284 // unifying them again.
@@ -3148,6 +3188,7 @@ function commitRoot(
3188 lanes: Lanes,
3189 recoverableErrors: null | Array<CapturedValue<mixed>>,
3190 transitions: Array<Transition> | null,
3191 + appearingViewTransitions: Map<string, ViewTransitionInstance> | null,
3192 didIncludeRenderPhaseUpdate: boolean,
3193 spawnedLane: Lane,
3194 updatedLanes: Lanes,
@@ -3283,13 +3324,17 @@ function commitRoot(
3324 // might get scheduled in the commit phase. (See #16714.)
3325 // TODO: Delete all other places that schedule the passive effect callback
3326 // They're redundant.
3327 + const passiveSubtreeMask =
3328 + enableViewTransition && includesOnlyViewTransitionEligibleLanes(lanes)
3329 + ? PassiveTransitionMask
3330 + : PassiveMask;
3331 if (
3332 // If this subtree rendered with profiling this commit, we need to visit it to log it.
3333 (enableProfilerTimer &&
3334 enableComponentPerformanceTrack &&
3335 finishedWork.actualDuration !== 0) ||
3291 - (finishedWork.subtreeFlags & PassiveMask) !== NoFlags ||
3292 - (finishedWork.flags & PassiveMask) !== NoFlags
3336 + (finishedWork.subtreeFlags & passiveSubtreeMask) !== NoFlags ||
3337 + (finishedWork.flags & passiveSubtreeMask) !== NoFlags
3338 ) {
3339 if (enableYieldingBeforePassive) {
3340 // We don't schedule a separate task for flushing passive effects.
@@ -3359,7 +3404,12 @@ function commitRoot(
3404 // The first phase a "before mutation" phase. We use this phase to read the
3405 // state of the host tree right before we mutate it. This is where
3406 // getSnapshotBeforeUpdate is called.
3362 - commitBeforeMutationEffects(root, finishedWork);
3407 + commitBeforeMutationEffects(
3408 + root,
3409 + finishedWork,
3410 + lanes,
3411 + appearingViewTransitions,
3412 + );
3413 } finally {
3414 // Reset the priority to the previous non-sync value.
3415 executionContext = prevExecutionContext;
@@ -3368,8 +3418,38 @@ function commitRoot(
3418 }
3419 }
3420 pendingEffectsStatus = PENDING_MUTATION_PHASE;
3371 - flushMutationEffects();
3372 - flushLayoutEffects();
3421 + const startedViewTransition =
3422 + enableViewTransition &&
3423 + shouldStartViewTransition &&
3424 + startViewTransition(
3425 + root.containerInfo,
3426 + flushMutationEffects,
3427 + flushAfterMutationEffects,
3428 + flushLayoutEffects,
3429 + // TODO: This flushes passive effects at the end of the transition but
3430 + // we also schedule work to flush them separately which we really shouldn't.
3431 + // We use flushPendingEffects instead of
3432 + flushPassiveEffects,
3433 + );
3434 + if (!startedViewTransition) {
3435 + // Flush synchronously.
3436 + flushMutationEffects();
3437 + // Skip flushAfterMutationEffects
3438 + pendingEffectsStatus = PENDING_LAYOUT_PHASE;
3439 + flushLayoutEffects();
3440 + }
3441 +}
3442 +
3443 +function flushAfterMutationEffects(): void {
3444 + if (pendingEffectsStatus !== PENDING_AFTER_MUTATION_PHASE) {
3445 + return;
3446 + }
3447 + pendingEffectsStatus = NO_PENDING_EFFECTS;
3448 + const root = pendingEffectsRoot;
3449 + const finishedWork = pendingFinishedWork;
3450 + const lanes = pendingEffectsLanes;
3451 + commitAfterMutationEffects(root, finishedWork, lanes);
3452 + pendingEffectsStatus = PENDING_LAYOUT_PHASE;
3453 }
3454
3455 function flushMutationEffects(): void {
@@ -3415,7 +3495,7 @@ function flushMutationEffects(): void {
3495 // componentWillUnmount, but before the layout phase, so that the finished
3496 // work is current during componentDidMount/Update.
3497 root.current = finishedWork;
3418 - pendingEffectsStatus = PENDING_LAYOUT_PHASE;
3498 + pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;
3499 }
3500
3501 function flushLayoutEffects(): void {
@@ -3477,12 +3557,16 @@ function flushLayoutEffects(): void {
3557 );
3558 }
3559
3560 + const passiveSubtreeMask =
3561 + enableViewTransition && includesOnlyViewTransitionEligibleLanes(lanes)
3562 + ? PassiveTransitionMask
3563 + : PassiveMask;
3564 const rootDidHavePassiveEffects = // If this subtree rendered with profiling this commit, we need to visit it to log it.
3565 (enableProfilerTimer &&
3566 enableComponentPerformanceTrack &&
3567 finishedWork.actualDuration !== 0) ||
3484 - (finishedWork.subtreeFlags & PassiveMask) !== NoFlags ||
3485 - (finishedWork.flags & PassiveMask) !== NoFlags;
3568 + (finishedWork.subtreeFlags & passiveSubtreeMask) !== NoFlags ||
3569 + (finishedWork.flags & passiveSubtreeMask) !== NoFlags;
3570
3571 if (rootDidHavePassiveEffects) {
3572 pendingEffectsStatus = PENDING_PASSIVE_PHASE;
@@ -3698,6 +3782,7 @@ export function flushPendingEffects(wasDelayedCommit?: boolean): boolean {
3782 // Returns whether passive effects were flushed.
3783 flushMutationEffects();
3784 flushLayoutEffects();
3785 + flushAfterMutationEffects();
3786 return flushPassiveEffects(wasDelayedCommit);
3787 }
3788
packages/react-reconciler/src/ReactWorkTags.js
+3 -1
@@ -37,7 +37,8 @@ export type WorkTag =
37 | 26
38 | 27
39 | 28
40 - | 29;
40 + | 29
41 + | 30;
42
43 export const FunctionComponent = 0;
44 export const ClassComponent = 1;
@@ -67,3 +68,4 @@ export const HostHoistable = 26;
68 export const HostSingleton = 27;
69 export const IncompleteFunctionComponent = 28;
70 export const Throw = 29;
71 +export const ViewTransitionComponent = 30;
packages/react-reconciler/src/forks/ReactFiberConfig.custom.js
+13
@@ -40,6 +40,7 @@ export opaque type NoTimeout = mixed;
40 export opaque type RendererInspectionConfig = mixed;
41 export opaque type TransitionStatus = mixed;
42 export opaque type FormInstance = mixed;
43 +export opaque type InstanceMeasurement = mixed;
44 export type EventResponder = any;
45
46 export const rendererVersion = $$$config.rendererVersion;
@@ -128,6 +129,18 @@ export const hideInstance = $$$config.hideInstance;
129 export const hideTextInstance = $$$config.hideTextInstance;
130 export const unhideInstance = $$$config.unhideInstance;
131 export const unhideTextInstance = $$$config.unhideTextInstance;
132 +export const applyViewTransitionName = $$$config.applyViewTransitionName;
133 +export const restoreViewTransitionName = $$$config.restoreViewTransitionName;
134 +export const cancelViewTransitionName = $$$config.cancelViewTransitionName;
135 +export const cancelRootViewTransitionName =
136 + $$$config.cancelRootViewTransitionName;
137 +export const restoreRootViewTransitionName =
138 + $$$config.restoreRootViewTransitionName;
139 +export const measureInstance = $$$config.measureInstance;
140 +export const wasInstanceInViewport = $$$config.wasInstanceInViewport;
141 +export const hasInstanceChanged = $$$config.hasInstanceChanged;
142 +export const hasInstanceAffectedParent = $$$config.hasInstanceAffectedParent;
143 +export const startViewTransition = $$$config.startViewTransition;
144 export const clearContainer = $$$config.clearContainer;
145
146 // -------------------
packages/react-server/src/ReactFizzComponentStack.js
+9 -1
@@ -23,9 +23,13 @@ import {
23 REACT_LAZY_TYPE,
24 REACT_SUSPENSE_LIST_TYPE,
25 REACT_SUSPENSE_TYPE,
26 + REACT_VIEW_TRANSITION_TYPE,
27 } from 'shared/ReactSymbols';
28
28 -import {enableOwnerStacks} from 'shared/ReactFeatureFlags';
29 +import {
30 + enableOwnerStacks,
31 + enableViewTransition,
32 +} from 'shared/ReactFeatureFlags';
33
34 import {formatOwnerStack} from 'shared/ReactOwnerStackFrames';
35
@@ -95,6 +99,10 @@ function describeComponentStackByType(
99 case REACT_SUSPENSE_TYPE: {
100 return describeBuiltInComponentFrame('Suspense');
101 }
102 + case REACT_VIEW_TRANSITION_TYPE:
103 + if (enableViewTransition) {
104 + return describeBuiltInComponentFrame('ViewTransition');
105 + }
106 }
107 return '';
108 }
packages/react-server/src/ReactFizzServer.js
+12
@@ -146,6 +146,7 @@ import {
146 REACT_SCOPE_TYPE,
147 REACT_OFFSCREEN_TYPE,
148 REACT_POSTPONE_TYPE,
149 + REACT_VIEW_TRANSITION_TYPE,
150 } from 'shared/ReactSymbols';
151 import ReactSharedInternals from 'shared/ReactSharedInternals';
152 import {
@@ -158,6 +159,7 @@ import {
159 disableDefaultPropsExceptForClasses,
160 enableAsyncIterableChildren,
161 enableOwnerStacks,
162 + enableViewTransition,
163 } from 'shared/ReactFeatureFlags';
164
165 import assign from 'shared/assign';
@@ -2155,6 +2157,16 @@ function renderElement(
2157 task.keyPath = prevKeyPath;
2158 return;
2159 }
2160 + case REACT_VIEW_TRANSITION_TYPE: {
2161 + if (enableViewTransition) {
2162 + const prevKeyPath = task.keyPath;
2163 + task.keyPath = keyPath;
2164 + renderNodeDestructive(request, task, props.children, -1);
2165 + task.keyPath = prevKeyPath;
2166 + return;
2167 + }
2168 + // Fallthrough
2169 + }
2170 case REACT_SCOPE_TYPE: {
2171 if (enableScopeAPI) {
2172 const prevKeyPath = task.keyPath;
packages/react-test-renderer/src/ReactFiberConfigTestHost.js
+66
@@ -305,6 +305,72 @@ export function unhideTextInstance(
305 textInstance.isHidden = false;
306 }
307
308 +export function applyViewTransitionName(
309 + instance: Instance,
310 + name: string,
311 +): void {
312 + // Noop
313 +}
314 +
315 +export function restoreViewTransitionName(
316 + instance: Instance,
317 + props: Props,
318 +): void {
319 + // Noop
320 +}
321 +
322 +export function cancelViewTransitionName(
323 + instance: Instance,
324 + name: string,
325 + props: Props,
326 +): void {
327 + // Noop
328 +}
329 +
330 +export function cancelRootViewTransitionName(rootContainer: Container): void {
331 + // Noop
332 +}
333 +
334 +export function restoreRootViewTransitionName(rootContainer: Container): void {
335 + // Noop
336 +}
337 +
338 +export type InstanceMeasurement = null;
339 +
340 +export function measureInstance(instance: Instance): InstanceMeasurement {
341 + return null;
342 +}
343 +
344 +export function wasInstanceInViewport(
345 + measurement: InstanceMeasurement,
346 +): boolean {
347 + return true;
348 +}
349 +
350 +export function hasInstanceChanged(
351 + oldMeasurement: InstanceMeasurement,
352 + newMeasurement: InstanceMeasurement,
353 +): boolean {
354 + return false;
355 +}
356 +
357 +export function hasInstanceAffectedParent(
358 + oldMeasurement: InstanceMeasurement,
359 + newMeasurement: InstanceMeasurement,
360 +): boolean {
361 + return false;
362 +}
363 +
364 +export function startViewTransition(
365 + rootContainer: Container,
366 + mutationCallback: () => void,
367 + afterMutationCallback: () => void,
368 + layoutCallback: () => void,
369 + passiveCallback: () => mixed,
370 +): boolean {
371 + return false;
372 +}
373 +
374 export function getInstanceFromNode(mockNode: Object): Object | null {
375 const instance = nodeToInstanceMap.get(mockNode);
376 if (instance !== undefined) {
packages/react/index.experimental.development.js
+1
@@ -32,6 +32,7 @@ export {
32 unstable_postpone,
33 unstable_getCacheForType,
34 unstable_SuspenseList,
35 + unstable_ViewTransition,
36 unstable_useCacheRefresh,
37 useId,
38 useCallback,
packages/react/index.experimental.js
+1
@@ -32,6 +32,7 @@ export {
32 unstable_postpone,
33 unstable_getCacheForType,
34 unstable_SuspenseList,
35 + unstable_ViewTransition,
36 unstable_useCacheRefresh,
37 useId,
38 useCallback,
packages/react/index.js
+1
@@ -51,6 +51,7 @@ export {
51 unstable_Scope,
52 unstable_SuspenseList,
53 unstable_TracingMarker,
54 + unstable_ViewTransition,
55 unstable_getCacheForType,
56 unstable_useCacheRefresh,
57 useId,
packages/react/src/ReactClient.js
+3
@@ -18,6 +18,7 @@ import {
18 REACT_OFFSCREEN_TYPE,
19 REACT_SCOPE_TYPE,
20 REACT_TRACING_MARKER_TYPE,
21 + REACT_VIEW_TRANSITION_TYPE,
22 } from 'shared/ReactSymbols';
23
24 import {Component, PureComponent} from './ReactBaseClasses';
@@ -123,6 +124,8 @@ export {
124 REACT_SCOPE_TYPE as unstable_Scope,
125 // enableTransitionTracing
126 REACT_TRACING_MARKER_TYPE as unstable_TracingMarker,
127 + // enableViewTransition
128 + REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
129 useId,
130 act, // DEV-only
131 captureOwnerStack, // DEV-only
packages/react/src/ReactServer.experimental.development.js
+5 -1
@@ -15,6 +15,8 @@ import {
15 REACT_PROFILER_TYPE,
16 REACT_STRICT_MODE_TYPE,
17 REACT_SUSPENSE_TYPE,
18 + REACT_SUSPENSE_LIST_TYPE,
19 + REACT_VIEW_TRANSITION_TYPE,
20 } from 'shared/ReactSymbols';
21 import {
22 cloneElement,
@@ -70,7 +72,6 @@ export {
72 memo,
73 cache,
74 startTransition,
73 - REACT_SUSPENSE_TYPE as unstable_SuspenseList,
75 getCacheForType as unstable_getCacheForType,
76 postpone as unstable_postpone,
77 useId,
@@ -79,5 +80,8 @@ export {
80 useMemo,
81 useActionState,
82 version,
83 + // Experimental
84 + REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList,
85 + REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
86 captureOwnerStack, // DEV-only
87 };
packages/react/src/ReactServer.experimental.js
+5 -1
@@ -15,6 +15,8 @@ import {
15 REACT_PROFILER_TYPE,
16 REACT_STRICT_MODE_TYPE,
17 REACT_SUSPENSE_TYPE,
18 + REACT_SUSPENSE_LIST_TYPE,
19 + REACT_VIEW_TRANSITION_TYPE,
20 } from 'shared/ReactSymbols';
21 import {
22 cloneElement,
@@ -69,7 +71,6 @@ export {
71 memo,
72 cache,
73 startTransition,
72 - REACT_SUSPENSE_TYPE as unstable_SuspenseList,
74 getCacheForType as unstable_getCacheForType,
75 postpone as unstable_postpone,
76 useId,
@@ -78,4 +79,7 @@ export {
79 useMemo,
80 useActionState,
81 version,
82 + // Experimental
83 + REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList,
84 + REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
85 };
packages/shared/ReactComponentStackFrame.js
+7
@@ -15,6 +15,7 @@ import {
15 REACT_FORWARD_REF_TYPE,
16 REACT_MEMO_TYPE,
17 REACT_LAZY_TYPE,
18 + REACT_VIEW_TRANSITION_TYPE,
19 } from 'shared/ReactSymbols';
20
21 import {disableLogs, reenableLogs} from 'shared/ConsolePatchingDev';
@@ -23,6 +24,8 @@ import ReactSharedInternals from 'shared/ReactSharedInternals';
24
25 import DefaultPrepareStackTrace from 'shared/DefaultPrepareStackTrace';
26
27 +import {enableViewTransition} from 'shared/ReactFeatureFlags';
28 +
29 let prefix;
30 let suffix;
31 export function describeBuiltInComponentFrame(name: string): string {
@@ -322,6 +325,10 @@ export function describeUnknownElementTypeFrameInDEV(type: any): string {
325 return describeBuiltInComponentFrame('Suspense');
326 case REACT_SUSPENSE_LIST_TYPE:
327 return describeBuiltInComponentFrame('SuspenseList');
328 + case REACT_VIEW_TRANSITION_TYPE:
329 + if (enableViewTransition) {
330 + return describeBuiltInComponentFrame('ViewTransition');
331 + }
332 }
333 if (typeof type === 'object') {
334 switch (type.$$typeof) {
packages/shared/ReactFeatureFlags.js
+2
@@ -90,6 +90,8 @@ export const enablePostpone = __EXPERIMENTAL__;
90
91 export const enableHalt = __EXPERIMENTAL__;
92
93 +export const enableViewTransition = __EXPERIMENTAL__;
94 +
95 /**
96 * Switches the Fabric API from doing layout in commit work instead of complete work.
97 */
packages/shared/ReactSerializationErrors.js
+7
@@ -14,6 +14,7 @@ import {
14 REACT_MEMO_TYPE,
15 REACT_SUSPENSE_TYPE,
16 REACT_SUSPENSE_LIST_TYPE,
17 + REACT_VIEW_TRANSITION_TYPE,
18 } from 'shared/ReactSymbols';
19
20 import type {LazyComponent} from 'react/src/ReactLazy';
@@ -21,6 +22,8 @@ import type {LazyComponent} from 'react/src/ReactLazy';
22 import isArray from 'shared/isArray';
23 import getPrototypeOf from 'shared/getPrototypeOf';
24
25 +import {enableViewTransition} from 'shared/ReactFeatureFlags';
26 +
27 // Used for DEV messages to keep track of which parent rendered some props,
28 // in case they error.
29 export const jsxPropsParents: WeakMap<any, any> = new WeakMap();
@@ -129,6 +132,10 @@ function describeElementType(type: any): string {
132 return 'Suspense';
133 case REACT_SUSPENSE_LIST_TYPE:
134 return 'SuspenseList';
135 + case REACT_VIEW_TRANSITION_TYPE:
136 + if (enableViewTransition) {
137 + return 'ViewTransition';
138 + }
139 }
140 if (typeof type === 'object') {
141 switch (type.$$typeof) {
packages/shared/ReactSymbols.js
+4
@@ -47,6 +47,10 @@ export const REACT_MEMO_CACHE_SENTINEL: symbol = Symbol.for(
47
48 export const REACT_POSTPONE_TYPE: symbol = Symbol.for('react.postpone');
49
50 +export const REACT_VIEW_TRANSITION_TYPE: symbol = Symbol.for(
51 + 'react.view_transition',
52 +);
53 +
54 const MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
55 const FAUX_ITERATOR_SYMBOL = '@@iterator';
56
packages/shared/forks/ReactFeatureFlags.native-fb.js
+1
@@ -80,6 +80,7 @@ export const transitionLaneExpirationMs = 5000;
80 export const enableHydrationLaneScheduling = true;
81 export const enableYieldingBeforePassive = false;
82 export const enableThrottledScheduling = false;
83 +export const enableViewTransition = false;
84
85 // Flow magic to verify the exports of this file match the original version.
86 ((((null: any): ExportsType): FeatureFlagsType): ExportsType);
packages/shared/forks/ReactFeatureFlags.native-oss.js
+1
@@ -72,6 +72,7 @@ export const enableHydrationLaneScheduling = true;
72 export const enableYieldingBeforePassive = false;
73
74 export const enableThrottledScheduling = false;
75 +export const enableViewTransition = false;
76
77 // Profiling Only
78 export const enableProfilerTimer = __PROFILE__;
packages/shared/forks/ReactFeatureFlags.test-renderer.js
+1
@@ -71,6 +71,7 @@ export const enableUseResourceEffectHook = false;
71 export const enableYieldingBeforePassive = true;
72
73 export const enableThrottledScheduling = false;
74 +export const enableViewTransition = false;
75
76 // TODO: This must be in sync with the main ReactFeatureFlags file because
77 // the Test Renderer's value must be the same as the one used by the
packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js
+1
@@ -68,6 +68,7 @@ export const enableUseResourceEffectHook = true;
68 export const enableHydrationLaneScheduling = true;
69 export const enableYieldingBeforePassive = false;
70 export const enableThrottledScheduling = false;
71 +export const enableViewTransition = false;
72
73 // Flow magic to verify the exports of this file match the original version.
74 ((((null: any): ExportsType): FeatureFlagsType): ExportsType);
packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
+1
@@ -83,6 +83,7 @@ export const enableHydrationLaneScheduling = true;
83 export const enableYieldingBeforePassive = false;
84
85 export const enableThrottledScheduling = false;
86 +export const enableViewTransition = false;
87
88 // Flow magic to verify the exports of this file match the original version.
89 ((((null: any): ExportsType): FeatureFlagsType): ExportsType);
packages/shared/forks/ReactFeatureFlags.www.js
+1
@@ -58,6 +58,7 @@ export const enableLegacyFBSupport = true;
58 export const enableYieldingBeforePassive = false;
59
60 export const enableThrottledScheduling = false;
61 +export const enableViewTransition = false;
62
63 export const enableHydrationLaneScheduling = true;
64
packages/shared/getComponentNameFromType.js
+7
@@ -24,11 +24,13 @@ import {
24 REACT_SUSPENSE_LIST_TYPE,
25 REACT_LAZY_TYPE,
26 REACT_TRACING_MARKER_TYPE,
27 + REACT_VIEW_TRANSITION_TYPE,
28 } from 'shared/ReactSymbols';
29
30 import {
31 enableTransitionTracing,
32 enableRenderableContext,
33 + enableViewTransition,
34 } from './ReactFeatureFlags';
35
36 // Keep in sync with react-reconciler/getComponentNameFromFiber
@@ -82,6 +84,11 @@ export default function getComponentNameFromType(type: mixed): string | null {
84 case REACT_SUSPENSE_LIST_TYPE:
85 return 'SuspenseList';
86 // Fall through
87 + case REACT_VIEW_TRANSITION_TYPE:
88 + if (enableViewTransition) {
89 + return 'ViewTransition';
90 + }
91 + // Fall through
92 case REACT_TRACING_MARKER_TYPE:
93 if (enableTransitionTracing) {
94 return 'TracingMarker';
packages/shared/isValidElementType.js
+4 -1
@@ -23,12 +23,14 @@ import {
23 REACT_LEGACY_HIDDEN_TYPE,
24 REACT_OFFSCREEN_TYPE,
25 REACT_TRACING_MARKER_TYPE,
26 + REACT_VIEW_TRANSITION_TYPE,
27 } from 'shared/ReactSymbols';
28 import {
29 enableScopeAPI,
30 enableTransitionTracing,
31 enableLegacyHidden,
32 enableRenderableContext,
33 + enableViewTransition,
34 } from './ReactFeatureFlags';
35
36 const REACT_CLIENT_REFERENCE: symbol = Symbol.for('react.client.reference');
@@ -50,7 +52,8 @@ export default function isValidElementType(type: mixed): boolean {
52 (enableLegacyHidden && type === REACT_LEGACY_HIDDEN_TYPE) ||
53 type === REACT_OFFSCREEN_TYPE ||
54 (enableScopeAPI && type === REACT_SCOPE_TYPE) ||
53 - (enableTransitionTracing && type === REACT_TRACING_MARKER_TYPE)
55 + (enableTransitionTracing && type === REACT_TRACING_MARKER_TYPE) ||
56 + (enableViewTransition && type === REACT_VIEW_TRANSITION_TYPE)
57 ) {
58 return true;
59 }
scripts/error-codes/codes.json
+2 -1
@@ -528,5 +528,6 @@
528 "540": "String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.",
529 "541": "Compared context values must be arrays",
530 "542": "Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary.",
531 - "543": "Expected a ResourceEffectUpdate to be pushed together with ResourceEffectIdentity. This is a bug in React."
531 + "543": "Expected a ResourceEffectUpdate to be pushed together with ResourceEffectIdentity. This is a bug in React.",
532 + "544": "Found a pair with an auto name. This is a bug in React."
533 }