├── .gitignore
├── LICENSE
├── README.md
├── examples
├── .babelrc
├── bundle.js
├── components
│ ├── App.js
│ ├── Input.js
│ ├── Items.js
│ └── Tab.js
├── index.html
├── main.js
├── package.json
├── webpack.config.js
└── yarn.lock
├── images
├── ReactDOM-10000-items.png
├── ReactDOM.png
├── ReactDOMFiber-10000-items-async.png
├── ReactDOMFiber-10000-items-sync.png
├── ReactDOMFiber-call-tree.png
└── ReactDOMFiber.png
└── toy-renderers
├── .babelrc
├── ReactConsole.js
├── ReactVoice.js
├── console.js
├── package-lock.json
├── package.json
└── voice.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21 | .grunt
22 |
23 | # node-waf configuration
24 | .lock-wscript
25 |
26 | # Compiled binary addons (http://nodejs.org/api/addons.html)
27 | build/Release
28 |
29 | # Dependency directories
30 | node_modules
31 | jspm_packages
32 |
33 | # Optional npm cache directory
34 | .npm
35 |
36 | # Optional REPL history
37 | .node_repl_history
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016 Toru Kobayashi
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Fiber resources [](CONTRIBUTING.md#pull-requests)
2 |
3 | This is a repository for resources about React Fiber.
4 |
5 | React Fiber is a new React reconciliation algorithm, which started using from v16. React Fiber makes many features like Suspense and Concurrent Mode possible.
6 |
7 | Concurrent Mode is still in experimental stage, but React already has the documentation so you can see what Concurrent Mode makes possible at the documentation.
8 |
9 | https://reactjs.org/docs/concurrent-mode-intro.html
10 |
11 | ## React internal algorithm
12 |
13 | If you are not familiar with React internals, I recommend you reading the documentations first, which are very helpful resources.
14 |
15 | * [Codebase Overview](https://reactjs.org/docs/codebase-overview.html)
16 | * [Implementation Notes](https://reactjs.org/docs/implementation-notes.html)
17 |
18 | ## React Fiber
19 |
20 | * [ReactFiber](https://github.com/facebook/react/tree/master/packages/react-reconciler/src)
21 | * [ReactFiberDOM](https://github.com/facebook/react/blob/master/packages/react-dom/src/client/ReactDOM.js)
22 | * [Fiber Debugger](http://fiber-debugger.surge.sh/)
23 |
24 | ## Articles & Slides
25 |
26 | * [React Fiber Architecture](https://github.com/acdlite/react-fiber-architecture)
27 | * [Fiber Principles: Contributing To Fiber #7942](https://github.com/facebook/react/issues/7942)
28 | * [How React Fiber Works](https://www.facebook.com/groups/2003630259862046/permalink/2054053404819731/)
29 | * [React Internals](https://zackargyle.github.io/react-internals-slides/)
30 | * [Capability of React Fiber](https://speakerdeck.com/koba04/capability-of-react-fiber)
31 | * [A look inside React Fiber - how work will get done](http://makersden.io/blog/look-inside-fiber/)
32 | * [Build your own React Fiber](https://engineering.hexacta.com/didact-fiber-incremental-reconciliation-b2fe028dcaec)
33 | * [Algorithms in React](https://speakerdeck.com/koba04/algorithms-in-react)
34 | * [Implementation notes on react's scheduling model as of (shortly before) 16.8.0](https://gist.github.com/Jessidhia/49d0915b7e722dc5b49ab9779b5906e8)
35 |
36 | ## Videos
37 |
38 | * [Dan Abramov: Beyond React 16](https://reactjs.org/blog/2018/03/01/sneak-peek-beyond-react-16.html)
39 | * [Andrew Clark: Roadmap for React Fiber and Beyond](https://www.youtube.com/watch?v=QW5TE4vrklU)
40 | * [The Evolution of React and GraphQL at Facebook and Beyond](https://developers.facebook.com/videos/f8-2017/the-evolution-of-react-and-graphql-at-facebook-and-beyond/)
41 | * [Lin Clark - A Cartoon Intro to Fiber - React Conf 2017](https://www.youtube.com/watch?v=ZCuYPiUIONs)
42 | * [Sebastian Markbåge - React Performance End to End (React Fiber)](https://www.youtube.com/watch?v=bvFpe5j9-zQ)
43 | * [Andrew Clark: What's Next for React — ReactNext 2016](https://www.youtube.com/watch?v=aV1271hd9ew)
44 | * [Why, What, and How of React Fiber with Dan Abramov and Andrew Clark](https://www.youtube.com/watch?v=crM1iRVGpGQ)
45 | * [A tiny Fiber renderer](https://www.youtube.com/watch?v=U9zFfIww3Go)
46 |
47 | ## React Fiber function call stacks
48 |
49 | **[Note]** React Fiber now behaves as synchronous by default. See [#8127](https://github.com/facebook/react/pull/8127).
50 | This call stacks are results in the time when it behaved as asynchronous.
51 |
52 | ### ReactDOMFiber
53 |
54 | 
55 |
56 | ### ReactDOM
57 |
58 | 
59 |
60 | ### ReactDOMFiber with 10000 items (Async Scheduling)
61 |
62 | 
63 |
64 | ```
65 | --- working asynchronously ---------------------------------------------------------------------------
66 | | ------- Fiber --------------- ------- Fiber --------------- ------ Fiber --------------- |
67 | | | beginWork -> completeWork | -> | beginWork -> completeWork | -> |beginWork -> completeWork | ... |
68 | | ----------------------------- ------------------------------ ---------------------------- |
69 | ------------------------------------------------------------------------------------------------------
70 | ↓↓↓
71 | -----------------------------------------------------------------------
72 | | commitAllWork(flush side effects computed in the above to the host) |
73 | -----------------------------------------------------------------------
74 | ```
75 |
76 | ### ReactDOMFiber with 10000 items (Sync Scheduling)
77 |
78 | 
79 |
80 | ### ReactDOM with 10000 items
81 |
82 | 
83 |
84 | ## React Fiber call tree
85 |
86 | 
87 |
88 | ## Related Words
89 |
90 | * [Fiber](https://en.wikipedia.org/wiki/Fiber_(computer_science))
91 | * [Call Stack](https://en.wikipedia.org/wiki/Call_stack)
92 | * [Coroutine](https://en.wikipedia.org/wiki/Coroutine)
93 | * [Continuation](https://en.wikipedia.org/wiki/Continuation)
94 | * Algebraic Effects
95 | * [One-shot Delimited Continuations with Effect Handlers](https://esdiscuss.org/topic/one-shot-delimited-continuations-with-effect-handlers)
96 | * [Effective Concurrency with Algebraic Effects](http://kcsrk.info/ocaml/multicore/2015/05/20/effects-multicore/)
97 | * [Concurrent & Multicore OCaml: A deep dive](http://kcsrk.info/slides/multicore_fb16.pdf)
98 |
99 | ## Custom Renderer Interface
100 |
101 | React doesn't depend on any specific environments like DOM and React provides us a way to create own custom renderers based on Fiber reconciliation. ReactDOM and ReactNative are implemented as one of the custom renderers.
102 |
103 | I've presented about the custom renderer; here is the link to the slide.
104 |
105 | * https://speakerdeck.com/koba04/make-it-declarative-with-react
106 | * https://github.com/koba04/jsconf-jp-presentation
107 |
108 | The following is a custom renderer named `react-fs`, which is a renderer for `fs` package
109 |
110 | ```js
111 | const React = require('react');
112 | const { ReactFS } = require('@koba04/react-fs');
113 |
114 | const targetDir = "test-react-fs-project";
115 | ReactFS.render(
116 | <>
117 |
118 | # Title
119 |
120 |
121 |
122 | console.log("Hello");
123 |
124 |
125 | >,
126 | targetDir
127 | );
128 | ```
129 |
130 | ## ReactNoop
131 |
132 | ReactNoop is a renderer for React Fiber, which is using for testing and debugging.
133 | It is very useful to understand React Fiber renderer!! :eyes:
134 |
135 | * https://github.com/facebook/react/tree/master/packages/react-noop-renderer
136 |
--------------------------------------------------------------------------------
/examples/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-react"]
3 | }
4 |
--------------------------------------------------------------------------------
/examples/components/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import Tab from './Tab';
5 | import Input from './Input';
6 | import Items from './Items';
7 |
8 | export default class App extends React.Component {
9 | constructor(props) {
10 | super(props);
11 | this.state = {
12 | isAsync: true,
13 | text: '',
14 | items: [...new Array(5000)].map((_, i) => ({index: i, name: `item:${i}`, value: i}))
15 | }
16 | }
17 | syncUpdate(fn, cb) {
18 | ReactDOM.flushSync(() => {
19 | this.setState(fn, cb);
20 | });
21 | }
22 | tick() {
23 | this.setState(
24 | state => ({
25 | count: state.count + 1,
26 | items: state.items.map(item => Object.assign({}, item, {name: `item:${item.value + 1}`, value: item.value + 1})),
27 | }),
28 | () => {
29 | this.timerId = setTimeout(() => {
30 | this.state.isAsync ? this.tick() : ReactDOM.flushSync(() => this.tick());
31 | }, 100);
32 | }
33 | );
34 | }
35 | componentDidMount() {
36 | this.tick();
37 | }
38 | componentWillUnmount() {
39 | if (this.timerId) {
40 | clearTimeout(this.timerId);
41 | }
42 | }
43 | render() {
44 | const {isAsync, text, count, items} = this.state;
45 | return (
46 |
47 | React Fiber Time Slicing Sample
48 | You can switch a rendering mode to Async or Sync.
49 | Please try to input text and switch the mode.
50 | If you can't get any diferrence between Async mode and Sync mode, you should use CPU throttling on DevTools
51 | this.setState(() => ({isAsync: value, text: ''}))}
54 | />
55 | Rendering a text input as sync priority
56 | this.syncUpdate(() => ({text: value}))} />
57 | Rendering {items.length}items as {isAsync ? 'low' : 'sync'} priority
58 |
59 |
60 | );
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/examples/components/Input.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const style = {
4 | input: {
5 | fontSize: '1.5rem',
6 | lineHeight: 1.2,
7 | width: '90%',
8 | padding: 5,
9 | backgroundColor: '#fafafa'
10 | }
11 | }
12 |
13 | const Input = ({value, onChange}) => (
14 |
24 | );
25 | export default Input;
26 |
--------------------------------------------------------------------------------
/examples/components/Items.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default class Items extends React.PureComponent {
4 | render() {
5 | return (
6 |
7 | {this.props.items.map(item => - {item.name}
)}
8 |
9 | );
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/examples/components/Tab.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const style = {
4 | tab: {
5 | padding: 0,
6 | listStyle: 'none',
7 | display: 'flex',
8 | height: 100,
9 | },
10 | content: {
11 | flex: 1,
12 | textAlign: 'center',
13 | padding: 'auto',
14 | backgroundColor: '#eee',
15 | color: 'black',
16 | borderRadius: 3,
17 | fontSize: '1.2rem',
18 | paddingTop: 40,
19 | },
20 | active: {
21 | backgroundColor: 'tomato',
22 | color: '#fff',
23 | },
24 | };
25 |
26 | const Tab = ({isAsync, onClick}) => (
27 |
28 | - onClick(true)}
31 | >
32 | Async mode
33 |
34 | - onClick(false)}
37 | >
38 | Sync mode
39 |
40 |
41 | );
42 | export default Tab;
43 |
--------------------------------------------------------------------------------
/examples/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | React Fiber Time Slicing Sample
5 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/examples/main.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import App from './components/App';
5 |
6 | const AsyncMode = React.unstable_AsyncMode;
7 |
8 | ReactDOM.render(
9 |
10 |
11 | ,
12 | document.getElementById('app')
13 | );
14 |
--------------------------------------------------------------------------------
/examples/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-fiber-examples",
3 | "version": "1.0.0",
4 | "description": "Resources for ReactFiber",
5 | "main": "app.js",
6 | "scripts": {
7 | "build": "webpack",
8 | "start": "webpack-dev-server",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "keywords": ["react", "react-fiber"],
12 | "author": "koba04",
13 | "license": "MIT",
14 | "dependencies": {
15 | "react": "^16.3.0-alpha.2",
16 | "react-dom": "^16.3.0-alpha.2"
17 | },
18 | "devDependencies": {
19 | "@babel/core": "^7.0.0-beta.42",
20 | "@babel/preset-react": "^7.0.0-beta.42",
21 | "babel-loader": "^8.0.0-beta.2",
22 | "webpack": "^4.1.1",
23 | "webpack-cli": "^2.0.12",
24 | "webpack-dev-server": "^3.1.1"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/examples/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | module.exports = {
3 | mode: 'development',
4 | entry: './main.js',
5 | output: {
6 | filename: 'bundle.js',
7 | path: path.resolve(__dirname),
8 | },
9 | module: {
10 | rules: [
11 | {
12 | test: /\.js$/,
13 | use: 'babel-loader',
14 | exclude: /node_modules/,
15 | }
16 | ]
17 | },
18 | devServer: {
19 | contentBase: path.resolve(__dirname),
20 | },
21 | };
22 |
--------------------------------------------------------------------------------
/images/ReactDOM-10000-items.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOM-10000-items.png
--------------------------------------------------------------------------------
/images/ReactDOM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOM.png
--------------------------------------------------------------------------------
/images/ReactDOMFiber-10000-items-async.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOMFiber-10000-items-async.png
--------------------------------------------------------------------------------
/images/ReactDOMFiber-10000-items-sync.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOMFiber-10000-items-sync.png
--------------------------------------------------------------------------------
/images/ReactDOMFiber-call-tree.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOMFiber-call-tree.png
--------------------------------------------------------------------------------
/images/ReactDOMFiber.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koba04/react-fiber-resources/1c5124b859d5c58b2b48bae8bf685b988b4063c4/images/ReactDOMFiber.png
--------------------------------------------------------------------------------
/toy-renderers/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-react"]
3 | }
4 |
--------------------------------------------------------------------------------
/toy-renderers/ReactConsole.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const Reconciler = require('react-reconciler');
4 | const colors = require('colors/safe');
5 |
6 | const sideEffect = (method, text) => console.log(colors[method](text));
7 |
8 | const ConsoleRenderer = Reconciler({
9 | getRootHostContext() {
10 | return {};
11 | },
12 |
13 | getChildHostContext() {
14 | return {};
15 | },
16 |
17 | getPublicInstance(instance) {
18 | return null;
19 | },
20 |
21 | createInstance(type, props) {
22 | return {};
23 | },
24 |
25 | appendInitialChild(parentInstance, child) {},
26 |
27 | finalizeInitialChildren(host, type, props) {
28 | if (typeof props.children === 'string') {
29 | sideEffect(type, props.children);
30 | }
31 | return false;
32 | },
33 |
34 | prepareUpdate(instance, type, oldProps, newProps) {
35 | return {};
36 | },
37 |
38 | shouldSetTextContent(type, props) {},
39 | shouldDeprioritizeSubtree(type, props) {},
40 |
41 | createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {},
42 |
43 | useSyncScheduling: true,
44 |
45 | scheduleDeferredCallback(cb) {},
46 | cancelDeferredCallback() {},
47 |
48 | prepareForCommit() {},
49 | resetAfterCommit() {},
50 |
51 | now() { return Date.now() },
52 |
53 | mutation: {
54 | commitUpdate(instance, updatePayload, type, oldProps, newProps) {
55 | if (typeof newProps.children === 'string') {
56 | if (newProps.children !== oldProps.children) {
57 | sideEffect(type, newProps.children);
58 | }
59 | }
60 | },
61 | commitMount(instance, type, newProps) {},
62 | commitTextUpdate(textInstance, oldText, newText) {},
63 | resetTextContent(instance) {},
64 | appendChild(parentInstance, child) {},
65 | appendChildToContainer(parentInstance, child) {},
66 | insertBefore(parentInstance, child, beforeChild) {},
67 | insertInContainerBefore(container, child, beforeChild) {},
68 | removeChild(parentInstance, child) {},
69 | removeChildFromContainer(container, child) {},
70 | },
71 | });
72 |
73 | let root;
74 | const ReactConsole = {
75 | render(element, callback) {
76 | if (!root) {
77 | const container = {};
78 | root = ConsoleRenderer.createContainer(container);
79 | }
80 | ConsoleRenderer.updateContainer(element, root, null, callback);
81 | },
82 | };
83 |
84 | module.exports = ReactConsole;
85 |
--------------------------------------------------------------------------------
/toy-renderers/ReactVoice.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const Reconciler = require('react-reconciler');
4 | const {spawnSync} = require('child_process');
5 |
6 | const sideEffect = (method, text) => spawnSync('say', ['-v', method, text]);
7 |
8 | const VoiceRenderer = Reconciler({
9 | getRootHostContext() {
10 | return {};
11 | },
12 |
13 | getChildHostContext() {
14 | return {};
15 | },
16 |
17 | getPublicInstance(instance) {
18 | return null;
19 | },
20 |
21 | createInstance(type, props) {
22 | return {};
23 | },
24 |
25 | appendInitialChild(parentInstance, child) {},
26 |
27 | finalizeInitialChildren(host, type, props) {
28 | if (typeof props.children === 'string') {
29 | sideEffect(type, props.children);
30 | }
31 | return false;
32 | },
33 |
34 | prepareUpdate(instance, type, oldProps, newProps) {
35 | return {};
36 | },
37 |
38 | shouldSetTextContent(type, props) {},
39 | shouldDeprioritizeSubtree(type, props) {},
40 |
41 | createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {},
42 |
43 | useSyncScheduling: true,
44 |
45 | scheduleDeferredCallback(cb) {},
46 | cancelDeferredCallback() {},
47 |
48 | prepareForCommit() {},
49 | resetAfterCommit() {},
50 |
51 | now() { return Date.now() },
52 |
53 | mutation: {
54 | commitUpdate(instance, updatePayload, type, oldProps, newProps) {
55 | if (typeof newProps.children === 'string') {
56 | if (newProps.children !== oldProps.children) {
57 | sideEffect(type, newProps.children);
58 | }
59 | }
60 | },
61 | commitMount(instance, type, newProps) {},
62 | commitTextUpdate(textInstance, oldText, newText) {},
63 | resetTextContent(instance) {},
64 | appendChild(parentInstance, child) {},
65 | appendChildToContainer(parentInstance, child) {},
66 | insertBefore(parentInstance, child, beforeChild) {},
67 | insertInContainerBefore(container, child, beforeChild) {},
68 | removeChild(parentInstance, child) {},
69 | removeChildFromContainer(container, child) {},
70 | },
71 | });
72 |
73 | let root;
74 | const ReactVoice = {
75 | render(element, callback) {
76 | if (!root) {
77 | const container = {};
78 | root = VoiceRenderer.createContainer(container);
79 | }
80 | VoiceRenderer.updateContainer(element, root, null, callback);
81 | },
82 | };
83 |
84 | module.exports = ReactVoice;
85 |
--------------------------------------------------------------------------------
/toy-renderers/console.js:
--------------------------------------------------------------------------------
1 | const React = require('react');
2 | const ReactConsole = require('./ReactConsole');
3 | const colors = require('colors/safe');
4 |
5 | ReactConsole.render(
6 | <>
7 | Hello
8 | World
9 | React
10 | Custom Renderer!
11 | >,
12 | () => console.log(colors.inverse('##### Update ######'))
13 | );
14 |
15 | ReactConsole.render(
16 | <>
17 | Hello
18 | World2
19 | React
20 | >
21 | );
22 |
--------------------------------------------------------------------------------
/toy-renderers/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "toy-renderers",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.0.0-beta.39",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.39.tgz",
10 | "integrity": "sha512-PConL+YIK9BgNUWWC2q4fbltj1g475TofpNVNivSypcAAKElfpSS1cv7MrpLYRG8TzZvwcVu9M30hLA/WAp1HQ==",
11 | "dev": true,
12 | "requires": {
13 | "chalk": "2.3.0",
14 | "esutils": "2.0.2",
15 | "js-tokens": "3.0.2"
16 | }
17 | },
18 | "@babel/core": {
19 | "version": "7.0.0-beta.39",
20 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.39.tgz",
21 | "integrity": "sha512-hYqbFuzkhj81kpeH/0s2VDRyzKcGAvDMUjtyfSgZMXsL0h8qNMp9nOx7NakzSErIt/LW/KQFyo7LbeIR0JKDNQ==",
22 | "dev": true,
23 | "requires": {
24 | "@babel/code-frame": "7.0.0-beta.39",
25 | "@babel/generator": "7.0.0-beta.39",
26 | "@babel/helpers": "7.0.0-beta.39",
27 | "@babel/template": "7.0.0-beta.39",
28 | "@babel/traverse": "7.0.0-beta.39",
29 | "@babel/types": "7.0.0-beta.39",
30 | "babylon": "7.0.0-beta.39",
31 | "convert-source-map": "1.5.1",
32 | "debug": "3.1.0",
33 | "json5": "0.5.1",
34 | "lodash": "4.17.5",
35 | "micromatch": "2.3.11",
36 | "resolve": "1.5.0",
37 | "source-map": "0.5.7"
38 | }
39 | },
40 | "@babel/generator": {
41 | "version": "7.0.0-beta.39",
42 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.39.tgz",
43 | "integrity": "sha512-fjKbJxdvzmTxpZPDrXxSMrzzJ+qUEjVNXmJuXwMTupPVBAIr13EGE+VauHXp/14AcXAXqX1/XvFK9cf/tB3OMA==",
44 | "dev": true,
45 | "requires": {
46 | "@babel/types": "7.0.0-beta.39",
47 | "jsesc": "2.5.1",
48 | "lodash": "4.17.5",
49 | "source-map": "0.5.7",
50 | "trim-right": "1.0.1"
51 | }
52 | },
53 | "@babel/helper-builder-react-jsx": {
54 | "version": "7.0.0-beta.39",
55 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0-beta.39.tgz",
56 | "integrity": "sha512-2HT/2DkgOgsOUQcSNeH29tOi4To6d2xofBisVhNysTbFMVnxllNJsgTholcD5za9Yk4VDZyVeOEVLQLmm/wpBw==",
57 | "requires": {
58 | "@babel/types": "7.0.0-beta.39",
59 | "esutils": "2.0.2"
60 | }
61 | },
62 | "@babel/helper-function-name": {
63 | "version": "7.0.0-beta.39",
64 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.39.tgz",
65 | "integrity": "sha512-pxxwRka5meE13lBtwzuzYBRIZV/aPgp41aGWP2IMopHebCogOZUSNX0knwiEduyXtRsWlW/laewGwI+TV60xAw==",
66 | "dev": true,
67 | "requires": {
68 | "@babel/helper-get-function-arity": "7.0.0-beta.39",
69 | "@babel/template": "7.0.0-beta.39",
70 | "@babel/types": "7.0.0-beta.39"
71 | }
72 | },
73 | "@babel/helper-get-function-arity": {
74 | "version": "7.0.0-beta.39",
75 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.39.tgz",
76 | "integrity": "sha512-OgtkcyBS8BtKItdb+NHoPBZGhlpJJkSFj0unfKH6/fwibcgCoC5CbuSiP/y8BT264hdQKXpw/QSt8WxYcUgMXA==",
77 | "dev": true,
78 | "requires": {
79 | "@babel/types": "7.0.0-beta.39"
80 | }
81 | },
82 | "@babel/helpers": {
83 | "version": "7.0.0-beta.39",
84 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.39.tgz",
85 | "integrity": "sha512-lhi9xvTcTIpv/m/T/T6aa10e0V0lxaN+zFFh61cEseYlqqlt1rZ2rYQ+zpZVfIyL8enDwz+zZMBKOOkyskDdlQ==",
86 | "dev": true,
87 | "requires": {
88 | "@babel/template": "7.0.0-beta.39",
89 | "@babel/traverse": "7.0.0-beta.39",
90 | "@babel/types": "7.0.0-beta.39"
91 | }
92 | },
93 | "@babel/node": {
94 | "version": "7.0.0-beta.39",
95 | "resolved": "https://registry.npmjs.org/@babel/node/-/node-7.0.0-beta.39.tgz",
96 | "integrity": "sha512-PKaN0JIMETLXQnamHb5oa9D7i5qdH6dROehIxobFwf8BHucUsjCp3DvjkZ/m98ojOHIyOKdcCudryvciO6yBvw==",
97 | "requires": {
98 | "@babel/polyfill": "7.0.0-beta.39",
99 | "@babel/register": "7.0.0-beta.39",
100 | "commander": "2.13.0",
101 | "fs-readdir-recursive": "1.1.0",
102 | "lodash": "4.17.5",
103 | "output-file-sync": "2.0.0",
104 | "v8flags": "3.0.1"
105 | }
106 | },
107 | "@babel/plugin-syntax-jsx": {
108 | "version": "7.0.0-beta.39",
109 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.39.tgz",
110 | "integrity": "sha512-Ir49hnpnyDTz/RlTStks6FTihjNarSOp8jdutwU2yFgBTWFM1OnRgIZV8gVhZjinZDGc6UGdVTr03QtgLwW4bA=="
111 | },
112 | "@babel/plugin-transform-react-display-name": {
113 | "version": "7.0.0-beta.39",
114 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0-beta.39.tgz",
115 | "integrity": "sha512-qnVsLdKLvSNMuJD2pQwR35j8CtwY31TkoCusReZFFXKMKV+2dGwZ9lntI7yHTxFijsOY0ziWjO6MPhFAtklgtA=="
116 | },
117 | "@babel/plugin-transform-react-jsx": {
118 | "version": "7.0.0-beta.39",
119 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0-beta.39.tgz",
120 | "integrity": "sha512-OA8PKBLfdmSwLdJ1Tx2bV35MXnMEiDZNXqgKZMpIoz1HDY3ShQbdev8hgtzCgJDu4M0/xx3c1skgAfN+hluSvg==",
121 | "requires": {
122 | "@babel/helper-builder-react-jsx": "7.0.0-beta.39",
123 | "@babel/plugin-syntax-jsx": "7.0.0-beta.39"
124 | }
125 | },
126 | "@babel/plugin-transform-react-jsx-self": {
127 | "version": "7.0.0-beta.39",
128 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0-beta.39.tgz",
129 | "integrity": "sha512-dA85ufk2NFpJMy6ms1I6JB4jgtmz4SvIJ1YBAtBX4pEjXvTnY09qo4P46cf1CuXdpc8UXIy7nuUrgWgTDn6kLQ==",
130 | "requires": {
131 | "@babel/plugin-syntax-jsx": "7.0.0-beta.39"
132 | }
133 | },
134 | "@babel/plugin-transform-react-jsx-source": {
135 | "version": "7.0.0-beta.39",
136 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0-beta.39.tgz",
137 | "integrity": "sha512-yYXrja2peiPWWnIzH7CmdsZkDuPtPF0Wv1HOOKIOE1fXwceMtef4eXOgD1mUo/eY3vsgJO2nTc1W+k5/1XrppQ==",
138 | "requires": {
139 | "@babel/plugin-syntax-jsx": "7.0.0-beta.39"
140 | }
141 | },
142 | "@babel/polyfill": {
143 | "version": "7.0.0-beta.39",
144 | "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.0.0-beta.39.tgz",
145 | "integrity": "sha512-tnvhzReuEr3s/FpEiruCZO/dXUBV8iIyV2AV9DCXIOcnA9YG2hkyJMgqAA2deC7Z4UVF0UN3R6+kZVpzox/RUg==",
146 | "requires": {
147 | "core-js": "2.5.3",
148 | "regenerator-runtime": "0.11.1"
149 | },
150 | "dependencies": {
151 | "core-js": {
152 | "version": "2.5.3",
153 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
154 | "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
155 | }
156 | }
157 | },
158 | "@babel/preset-react": {
159 | "version": "7.0.0-beta.39",
160 | "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0-beta.39.tgz",
161 | "integrity": "sha512-XDOeRVO/qxJrfN4fQXzeUUgLujQTxoHzIUP63phg5KB/avnd03H4TiKNgTBol4X6IvS7z/9/p6SECM5mKH5ZUA==",
162 | "requires": {
163 | "@babel/plugin-syntax-jsx": "7.0.0-beta.39",
164 | "@babel/plugin-transform-react-display-name": "7.0.0-beta.39",
165 | "@babel/plugin-transform-react-jsx": "7.0.0-beta.39",
166 | "@babel/plugin-transform-react-jsx-self": "7.0.0-beta.39",
167 | "@babel/plugin-transform-react-jsx-source": "7.0.0-beta.39"
168 | }
169 | },
170 | "@babel/register": {
171 | "version": "7.0.0-beta.39",
172 | "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0-beta.39.tgz",
173 | "integrity": "sha512-nipN2qZVT+hPlfaWaOLw3GqQLvNKUovj2ckdipffy2jJtE01uInVqZ52daiAkUGAi51l/LLmrr7+XRGlhx1zDA==",
174 | "requires": {
175 | "core-js": "2.5.3",
176 | "find-cache-dir": "1.0.0",
177 | "home-or-tmp": "3.0.0",
178 | "lodash": "4.17.5",
179 | "mkdirp": "0.5.1",
180 | "pirates": "3.0.2",
181 | "source-map-support": "0.4.18"
182 | },
183 | "dependencies": {
184 | "core-js": {
185 | "version": "2.5.3",
186 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
187 | "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4="
188 | }
189 | }
190 | },
191 | "@babel/template": {
192 | "version": "7.0.0-beta.39",
193 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.39.tgz",
194 | "integrity": "sha512-EDVszuqo0ZtNeC6j0yFrWIW1Sh5v+pv0POnj1xjPHy6gsg1U5IYjcc6uVarFgTCmtWsjFB5KSRqxC7N+YYcwCQ==",
195 | "dev": true,
196 | "requires": {
197 | "@babel/code-frame": "7.0.0-beta.39",
198 | "@babel/types": "7.0.0-beta.39",
199 | "babylon": "7.0.0-beta.39",
200 | "lodash": "4.17.5"
201 | }
202 | },
203 | "@babel/traverse": {
204 | "version": "7.0.0-beta.39",
205 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.39.tgz",
206 | "integrity": "sha512-L/MFJCUTiiK4wAN2nCEEc67yYm5fMtsVtWOizCHgPi45iYeqI3Zp7mL5RMrLqd7cCn6WpsLWVHuCGhDyDIONjQ==",
207 | "dev": true,
208 | "requires": {
209 | "@babel/code-frame": "7.0.0-beta.39",
210 | "@babel/generator": "7.0.0-beta.39",
211 | "@babel/helper-function-name": "7.0.0-beta.39",
212 | "@babel/types": "7.0.0-beta.39",
213 | "babylon": "7.0.0-beta.39",
214 | "debug": "3.1.0",
215 | "globals": "11.3.0",
216 | "invariant": "2.2.2",
217 | "lodash": "4.17.5"
218 | }
219 | },
220 | "@babel/types": {
221 | "version": "7.0.0-beta.39",
222 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.39.tgz",
223 | "integrity": "sha512-wrEe0z4kFP0KbFz8aHbPOGQal0gn+J2Iv9ZJGYbD77JN4BpavbF5l/BvLNZ0Omn665VENncoLVmQpclMbh64sQ==",
224 | "requires": {
225 | "esutils": "2.0.2",
226 | "lodash": "4.17.5",
227 | "to-fast-properties": "2.0.0"
228 | }
229 | },
230 | "ansi-styles": {
231 | "version": "3.2.0",
232 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
233 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
234 | "dev": true,
235 | "requires": {
236 | "color-convert": "1.9.1"
237 | }
238 | },
239 | "arr-diff": {
240 | "version": "2.0.0",
241 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
242 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
243 | "dev": true,
244 | "requires": {
245 | "arr-flatten": "1.1.0"
246 | }
247 | },
248 | "arr-flatten": {
249 | "version": "1.1.0",
250 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
251 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
252 | "dev": true
253 | },
254 | "array-unique": {
255 | "version": "0.2.1",
256 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
257 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
258 | "dev": true
259 | },
260 | "asap": {
261 | "version": "2.0.6",
262 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
263 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
264 | },
265 | "babylon": {
266 | "version": "7.0.0-beta.39",
267 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.39.tgz",
268 | "integrity": "sha512-ojkbli5jOr5oxSdXoRNV1vf8q+73fk7N54tcd86Dhxe72eudwoFv1uB5/ofxdnj9LtMeTtVPrMyaUo8FpCpE3Q==",
269 | "dev": true
270 | },
271 | "braces": {
272 | "version": "1.8.5",
273 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
274 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
275 | "dev": true,
276 | "requires": {
277 | "expand-range": "1.8.2",
278 | "preserve": "0.2.0",
279 | "repeat-element": "1.1.2"
280 | }
281 | },
282 | "chalk": {
283 | "version": "2.3.0",
284 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
285 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
286 | "dev": true,
287 | "requires": {
288 | "ansi-styles": "3.2.0",
289 | "escape-string-regexp": "1.0.5",
290 | "supports-color": "4.5.0"
291 | }
292 | },
293 | "color-convert": {
294 | "version": "1.9.1",
295 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
296 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
297 | "dev": true,
298 | "requires": {
299 | "color-name": "1.1.3"
300 | }
301 | },
302 | "color-name": {
303 | "version": "1.1.3",
304 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
305 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
306 | "dev": true
307 | },
308 | "colors": {
309 | "version": "1.1.2",
310 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
311 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
312 | },
313 | "commander": {
314 | "version": "2.13.0",
315 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz",
316 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA=="
317 | },
318 | "commondir": {
319 | "version": "1.0.1",
320 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
321 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
322 | },
323 | "convert-source-map": {
324 | "version": "1.5.1",
325 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
326 | "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
327 | "dev": true
328 | },
329 | "core-js": {
330 | "version": "1.2.7",
331 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
332 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
333 | },
334 | "debug": {
335 | "version": "3.1.0",
336 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
337 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
338 | "dev": true,
339 | "requires": {
340 | "ms": "2.0.0"
341 | }
342 | },
343 | "encoding": {
344 | "version": "0.1.12",
345 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
346 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
347 | "requires": {
348 | "iconv-lite": "0.4.19"
349 | }
350 | },
351 | "escape-string-regexp": {
352 | "version": "1.0.5",
353 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
354 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
355 | "dev": true
356 | },
357 | "esutils": {
358 | "version": "2.0.2",
359 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
360 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
361 | },
362 | "expand-brackets": {
363 | "version": "0.1.5",
364 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
365 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
366 | "dev": true,
367 | "requires": {
368 | "is-posix-bracket": "0.1.1"
369 | }
370 | },
371 | "expand-range": {
372 | "version": "1.8.2",
373 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
374 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
375 | "dev": true,
376 | "requires": {
377 | "fill-range": "2.2.3"
378 | }
379 | },
380 | "extglob": {
381 | "version": "0.3.2",
382 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
383 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
384 | "dev": true,
385 | "requires": {
386 | "is-extglob": "1.0.0"
387 | }
388 | },
389 | "fbjs": {
390 | "version": "0.8.16",
391 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
392 | "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
393 | "requires": {
394 | "core-js": "1.2.7",
395 | "isomorphic-fetch": "2.2.1",
396 | "loose-envify": "1.3.1",
397 | "object-assign": "4.1.1",
398 | "promise": "7.3.1",
399 | "setimmediate": "1.0.5",
400 | "ua-parser-js": "0.7.17"
401 | }
402 | },
403 | "filename-regex": {
404 | "version": "2.0.1",
405 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
406 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
407 | "dev": true
408 | },
409 | "fill-range": {
410 | "version": "2.2.3",
411 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
412 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
413 | "dev": true,
414 | "requires": {
415 | "is-number": "2.1.0",
416 | "isobject": "2.1.0",
417 | "randomatic": "1.1.7",
418 | "repeat-element": "1.1.2",
419 | "repeat-string": "1.6.1"
420 | }
421 | },
422 | "find-cache-dir": {
423 | "version": "1.0.0",
424 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
425 | "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
426 | "requires": {
427 | "commondir": "1.0.1",
428 | "make-dir": "1.1.0",
429 | "pkg-dir": "2.0.0"
430 | }
431 | },
432 | "find-up": {
433 | "version": "2.1.0",
434 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
435 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
436 | "requires": {
437 | "locate-path": "2.0.0"
438 | }
439 | },
440 | "for-in": {
441 | "version": "1.0.2",
442 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
443 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
444 | "dev": true
445 | },
446 | "for-own": {
447 | "version": "0.1.5",
448 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
449 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
450 | "dev": true,
451 | "requires": {
452 | "for-in": "1.0.2"
453 | }
454 | },
455 | "fs-readdir-recursive": {
456 | "version": "1.1.0",
457 | "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
458 | "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
459 | },
460 | "glob-base": {
461 | "version": "0.3.0",
462 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
463 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
464 | "dev": true,
465 | "requires": {
466 | "glob-parent": "2.0.0",
467 | "is-glob": "2.0.1"
468 | }
469 | },
470 | "glob-parent": {
471 | "version": "2.0.0",
472 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
473 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
474 | "dev": true,
475 | "requires": {
476 | "is-glob": "2.0.1"
477 | }
478 | },
479 | "globals": {
480 | "version": "11.3.0",
481 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
482 | "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==",
483 | "dev": true
484 | },
485 | "graceful-fs": {
486 | "version": "4.1.11",
487 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
488 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
489 | },
490 | "has-flag": {
491 | "version": "2.0.0",
492 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
493 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
494 | "dev": true
495 | },
496 | "home-or-tmp": {
497 | "version": "3.0.0",
498 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz",
499 | "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs="
500 | },
501 | "homedir-polyfill": {
502 | "version": "1.0.1",
503 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
504 | "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
505 | "requires": {
506 | "parse-passwd": "1.0.0"
507 | }
508 | },
509 | "iconv-lite": {
510 | "version": "0.4.19",
511 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
512 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
513 | },
514 | "invariant": {
515 | "version": "2.2.2",
516 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
517 | "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
518 | "dev": true,
519 | "requires": {
520 | "loose-envify": "1.3.1"
521 | }
522 | },
523 | "is-buffer": {
524 | "version": "1.1.6",
525 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
526 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
527 | "dev": true
528 | },
529 | "is-dotfile": {
530 | "version": "1.0.3",
531 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
532 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
533 | "dev": true
534 | },
535 | "is-equal-shallow": {
536 | "version": "0.1.3",
537 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
538 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
539 | "dev": true,
540 | "requires": {
541 | "is-primitive": "2.0.0"
542 | }
543 | },
544 | "is-extendable": {
545 | "version": "0.1.1",
546 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
547 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
548 | "dev": true
549 | },
550 | "is-extglob": {
551 | "version": "1.0.0",
552 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
553 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
554 | "dev": true
555 | },
556 | "is-glob": {
557 | "version": "2.0.1",
558 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
559 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
560 | "dev": true,
561 | "requires": {
562 | "is-extglob": "1.0.0"
563 | }
564 | },
565 | "is-number": {
566 | "version": "2.1.0",
567 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
568 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
569 | "dev": true,
570 | "requires": {
571 | "kind-of": "3.2.2"
572 | }
573 | },
574 | "is-plain-obj": {
575 | "version": "1.1.0",
576 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
577 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
578 | },
579 | "is-posix-bracket": {
580 | "version": "0.1.1",
581 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
582 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
583 | "dev": true
584 | },
585 | "is-primitive": {
586 | "version": "2.0.0",
587 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
588 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
589 | "dev": true
590 | },
591 | "is-stream": {
592 | "version": "1.1.0",
593 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
594 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
595 | },
596 | "isarray": {
597 | "version": "1.0.0",
598 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
599 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
600 | "dev": true
601 | },
602 | "isobject": {
603 | "version": "2.1.0",
604 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
605 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
606 | "dev": true,
607 | "requires": {
608 | "isarray": "1.0.0"
609 | }
610 | },
611 | "isomorphic-fetch": {
612 | "version": "2.2.1",
613 | "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
614 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
615 | "requires": {
616 | "node-fetch": "1.7.3",
617 | "whatwg-fetch": "2.0.3"
618 | }
619 | },
620 | "js-tokens": {
621 | "version": "3.0.2",
622 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
623 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
624 | },
625 | "jsesc": {
626 | "version": "2.5.1",
627 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
628 | "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=",
629 | "dev": true
630 | },
631 | "json5": {
632 | "version": "0.5.1",
633 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
634 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
635 | "dev": true
636 | },
637 | "kind-of": {
638 | "version": "3.2.2",
639 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
640 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
641 | "dev": true,
642 | "requires": {
643 | "is-buffer": "1.1.6"
644 | }
645 | },
646 | "locate-path": {
647 | "version": "2.0.0",
648 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
649 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
650 | "requires": {
651 | "p-locate": "2.0.0",
652 | "path-exists": "3.0.0"
653 | }
654 | },
655 | "lodash": {
656 | "version": "4.17.5",
657 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
658 | "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
659 | },
660 | "loose-envify": {
661 | "version": "1.3.1",
662 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
663 | "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
664 | "requires": {
665 | "js-tokens": "3.0.2"
666 | }
667 | },
668 | "make-dir": {
669 | "version": "1.1.0",
670 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
671 | "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
672 | "requires": {
673 | "pify": "3.0.0"
674 | }
675 | },
676 | "micromatch": {
677 | "version": "2.3.11",
678 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
679 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
680 | "dev": true,
681 | "requires": {
682 | "arr-diff": "2.0.0",
683 | "array-unique": "0.2.1",
684 | "braces": "1.8.5",
685 | "expand-brackets": "0.1.5",
686 | "extglob": "0.3.2",
687 | "filename-regex": "2.0.1",
688 | "is-extglob": "1.0.0",
689 | "is-glob": "2.0.1",
690 | "kind-of": "3.2.2",
691 | "normalize-path": "2.1.1",
692 | "object.omit": "2.0.1",
693 | "parse-glob": "3.0.4",
694 | "regex-cache": "0.4.4"
695 | }
696 | },
697 | "minimist": {
698 | "version": "0.0.8",
699 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
700 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
701 | },
702 | "mkdirp": {
703 | "version": "0.5.1",
704 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
705 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
706 | "requires": {
707 | "minimist": "0.0.8"
708 | }
709 | },
710 | "ms": {
711 | "version": "2.0.0",
712 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
713 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
714 | "dev": true
715 | },
716 | "node-fetch": {
717 | "version": "1.7.3",
718 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
719 | "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
720 | "requires": {
721 | "encoding": "0.1.12",
722 | "is-stream": "1.1.0"
723 | }
724 | },
725 | "node-modules-regexp": {
726 | "version": "1.0.0",
727 | "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
728 | "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
729 | },
730 | "normalize-path": {
731 | "version": "2.1.1",
732 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
733 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
734 | "dev": true,
735 | "requires": {
736 | "remove-trailing-separator": "1.1.0"
737 | }
738 | },
739 | "object-assign": {
740 | "version": "4.1.1",
741 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
742 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
743 | },
744 | "object.omit": {
745 | "version": "2.0.1",
746 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
747 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
748 | "dev": true,
749 | "requires": {
750 | "for-own": "0.1.5",
751 | "is-extendable": "0.1.1"
752 | }
753 | },
754 | "output-file-sync": {
755 | "version": "2.0.0",
756 | "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.0.tgz",
757 | "integrity": "sha1-XTSKGh6u0a0WhkigGi1tEweM6Yc=",
758 | "requires": {
759 | "graceful-fs": "4.1.11",
760 | "is-plain-obj": "1.1.0",
761 | "mkdirp": "0.5.1"
762 | }
763 | },
764 | "p-limit": {
765 | "version": "1.2.0",
766 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
767 | "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
768 | "requires": {
769 | "p-try": "1.0.0"
770 | }
771 | },
772 | "p-locate": {
773 | "version": "2.0.0",
774 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
775 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
776 | "requires": {
777 | "p-limit": "1.2.0"
778 | }
779 | },
780 | "p-try": {
781 | "version": "1.0.0",
782 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
783 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
784 | },
785 | "parse-glob": {
786 | "version": "3.0.4",
787 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
788 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
789 | "dev": true,
790 | "requires": {
791 | "glob-base": "0.3.0",
792 | "is-dotfile": "1.0.3",
793 | "is-extglob": "1.0.0",
794 | "is-glob": "2.0.1"
795 | }
796 | },
797 | "parse-passwd": {
798 | "version": "1.0.0",
799 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
800 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
801 | },
802 | "path-exists": {
803 | "version": "3.0.0",
804 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
805 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
806 | },
807 | "path-parse": {
808 | "version": "1.0.5",
809 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
810 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
811 | "dev": true
812 | },
813 | "pify": {
814 | "version": "3.0.0",
815 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
816 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
817 | },
818 | "pirates": {
819 | "version": "3.0.2",
820 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz",
821 | "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==",
822 | "requires": {
823 | "node-modules-regexp": "1.0.0"
824 | }
825 | },
826 | "pkg-dir": {
827 | "version": "2.0.0",
828 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
829 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
830 | "requires": {
831 | "find-up": "2.1.0"
832 | }
833 | },
834 | "preserve": {
835 | "version": "0.2.0",
836 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
837 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
838 | "dev": true
839 | },
840 | "promise": {
841 | "version": "7.3.1",
842 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
843 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
844 | "requires": {
845 | "asap": "2.0.6"
846 | }
847 | },
848 | "prop-types": {
849 | "version": "15.6.0",
850 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz",
851 | "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=",
852 | "requires": {
853 | "fbjs": "0.8.16",
854 | "loose-envify": "1.3.1",
855 | "object-assign": "4.1.1"
856 | }
857 | },
858 | "randomatic": {
859 | "version": "1.1.7",
860 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
861 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
862 | "dev": true,
863 | "requires": {
864 | "is-number": "3.0.0",
865 | "kind-of": "4.0.0"
866 | },
867 | "dependencies": {
868 | "is-number": {
869 | "version": "3.0.0",
870 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
871 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
872 | "dev": true,
873 | "requires": {
874 | "kind-of": "3.2.2"
875 | },
876 | "dependencies": {
877 | "kind-of": {
878 | "version": "3.2.2",
879 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
880 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
881 | "dev": true,
882 | "requires": {
883 | "is-buffer": "1.1.6"
884 | }
885 | }
886 | }
887 | },
888 | "kind-of": {
889 | "version": "4.0.0",
890 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
891 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
892 | "dev": true,
893 | "requires": {
894 | "is-buffer": "1.1.6"
895 | }
896 | }
897 | }
898 | },
899 | "react": {
900 | "version": "16.2.0",
901 | "resolved": "https://registry.npmjs.org/react/-/react-16.2.0.tgz",
902 | "integrity": "sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ==",
903 | "requires": {
904 | "fbjs": "0.8.16",
905 | "loose-envify": "1.3.1",
906 | "object-assign": "4.1.1",
907 | "prop-types": "15.6.0"
908 | }
909 | },
910 | "react-reconciler": {
911 | "version": "0.7.0",
912 | "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz",
913 | "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==",
914 | "requires": {
915 | "fbjs": "0.8.16",
916 | "loose-envify": "1.3.1",
917 | "object-assign": "4.1.1",
918 | "prop-types": "15.6.0"
919 | }
920 | },
921 | "regenerator-runtime": {
922 | "version": "0.11.1",
923 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
924 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
925 | },
926 | "regex-cache": {
927 | "version": "0.4.4",
928 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
929 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
930 | "dev": true,
931 | "requires": {
932 | "is-equal-shallow": "0.1.3"
933 | }
934 | },
935 | "remove-trailing-separator": {
936 | "version": "1.1.0",
937 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
938 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
939 | "dev": true
940 | },
941 | "repeat-element": {
942 | "version": "1.1.2",
943 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
944 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
945 | "dev": true
946 | },
947 | "repeat-string": {
948 | "version": "1.6.1",
949 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
950 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
951 | "dev": true
952 | },
953 | "resolve": {
954 | "version": "1.5.0",
955 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
956 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
957 | "dev": true,
958 | "requires": {
959 | "path-parse": "1.0.5"
960 | }
961 | },
962 | "setimmediate": {
963 | "version": "1.0.5",
964 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
965 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
966 | },
967 | "source-map": {
968 | "version": "0.5.7",
969 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
970 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
971 | },
972 | "source-map-support": {
973 | "version": "0.4.18",
974 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
975 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
976 | "requires": {
977 | "source-map": "0.5.7"
978 | }
979 | },
980 | "supports-color": {
981 | "version": "4.5.0",
982 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
983 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
984 | "dev": true,
985 | "requires": {
986 | "has-flag": "2.0.0"
987 | }
988 | },
989 | "to-fast-properties": {
990 | "version": "2.0.0",
991 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
992 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
993 | },
994 | "trim-right": {
995 | "version": "1.0.1",
996 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
997 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
998 | "dev": true
999 | },
1000 | "ua-parser-js": {
1001 | "version": "0.7.17",
1002 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
1003 | "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g=="
1004 | },
1005 | "v8flags": {
1006 | "version": "3.0.1",
1007 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz",
1008 | "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=",
1009 | "requires": {
1010 | "homedir-polyfill": "1.0.1"
1011 | }
1012 | },
1013 | "whatwg-fetch": {
1014 | "version": "2.0.3",
1015 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
1016 | "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ="
1017 | }
1018 | }
1019 | }
1020 |
--------------------------------------------------------------------------------
/toy-renderers/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "toy-renderers",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "console": "babel-node console.js",
8 | "voice": "babel-node voice.js",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "keywords": [],
12 | "author": "koba04",
13 | "license": "MIT",
14 | "dependencies": {
15 | "@babel/node": "^7.0.0-beta.39",
16 | "@babel/preset-react": "^7.0.0-beta.39",
17 | "colors": "^1.1.2",
18 | "react": "^16.2.0",
19 | "react-reconciler": "^0.7.0"
20 | },
21 | "devDependencies": {
22 | "@babel/core": "^7.0.0-beta.39"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/toy-renderers/voice.js:
--------------------------------------------------------------------------------
1 | const React = require('react');
2 | const ReactVoice = require('./ReactVoice');
3 |
4 | ReactVoice.render(
5 | <>
6 | Hello
7 | React Fiber
8 | こんにちは React Reconciler
9 | >
10 | );
11 |
--------------------------------------------------------------------------------