├── .gitignore
├── LICENSE
├── README.md
├── mockData
├── fiber.js
├── ticTacToe.js
├── ticTacToeFiberRoot.js
├── tinyFlameGraph.js
└── treeGraph.js
├── package-lock.json
├── package.json
├── package
├── JSONStringify.js
├── README.md
├── ReactWorkTags.js
├── compareStateAndProps.js
├── containerWrapper.js
├── createTree.js
├── deleteParent.js
├── deleteParent.test.js
├── makeTreeCreator.js
├── makeTreeCreator.test.js
├── newNode.js
├── package-lock.json
├── package.json
├── sendContentScript.js
├── treeGraphFactory.js
└── treeGraphFactory.test.js
├── src
├── app
│ ├── App.js
│ ├── components
│ │ ├── d3tree.js
│ │ ├── flameChart.js
│ │ ├── helperFunctions.js
│ │ ├── mainContainer.js
│ │ ├── playButton.js
│ │ ├── record.js
│ │ ├── stateChange.js
│ │ └── timeTravel.js
│ ├── index.html
│ └── style.scss
├── assets
│ ├── readmeDemo.gif
│ ├── rm-icon-128.png
│ ├── rm-icon-48.png
│ └── rm-icon16.png
└── extension
│ ├── backgroundScript.js
│ ├── contentScript.js
│ ├── devtools.html
│ ├── devtools.js
│ └── manifest.json
├── uml
├── devtools.plantuml
├── highLevelDiagram.plantuml
└── treeCreator.plantuml
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | /dist
3 | .vscode/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 OSLabs Beta
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 | # ReactMonitor
2 | Quickly visualize React's component tree performance for improved onboarding and debugging
3 |
4 | ## What does it do
5 | By using the ReactMonitor Chrome DevTool, beginning and experienced developers alike are able to get a visual representation of an existing codebase that they are working on. Built with React, this tool will dynamically traverse the fiber root object behind the scenes, displaying state, props, render times and the type of components on the page.
6 |
7 | 
8 |
9 | ## How to install and run
10 |
11 | To be able to use the application, users can:
12 |
13 | - Download the 'ReactMonitor' Google Chrome extension from [The Chrome Web Store](https://chrome.google.com/webstore/detail/reactmonitor)
14 |
15 | - Navigate to the domain of your React application that you will be running React Monitor on
16 |
17 | - Open your Chrome Developer Tools and select React Monitor
18 |
19 | - You are now able to view state changes on your application in real time!
20 |
21 | ### Method 2: Clone this repository
22 |
23 | - in the root directory of the clone run `npm build`
24 |
25 | - in Chrome -> extensions, enable developer mode
26 |
27 | - select add new unpackaged extension
28 |
29 | - in the folder selection window, select the _dist_ folder
30 |
31 | Requirements:
32 |
33 | - reactmonitor will only search in children (depth 1) of `
` for the HTML element where a React DOM is rendered only ([issue #10](https://github.com/React-Monitor-2-0/ReactMonitor/issues/10))
34 |
35 | - app to be tested needs to include React versions that use Fiber Tree (such as React 16)
36 |
37 | - app to be tested need to be in a development build of React or a Production build with React Profiler enabled
38 |
39 | ## Contributing
40 |
41 | As an open-sourced project, ReactMonitor gladly accepts help whenever possible. If you have suggestions for improvements or run into any bugs, please feel free to open a github issue after checking whether no such issue has been filed yet. When you file a github issue, please include the following information:
42 |
43 | #### Description
44 | ##### Steps to Reproduce
45 | ###### 1.
46 | ###### 2.
47 | ###### 3.
48 | ##### Expected behavior:
49 | ##### Actual behavior:
50 | ##### Reproduces how often:
51 | ##### Versions: x.x
52 | ##### Additional Information:
53 |
54 | ## Authors
55 |
56 | **Rudo Hengst:** [@RudoH](https://github.com/RudoH)\
57 | **Lia Pham:** [@lpham598](https://github.com/lpham598)\
58 | **Tommy Han:** [@simple-sifu](https://github.com/simple-sifu)
59 | **Nay:**
60 | **Philip:**
61 | **Hamoud:**
62 | **Dan:**
63 |
64 | ## License
65 |
66 | This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details
67 |
--------------------------------------------------------------------------------
/mockData/fiber.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | type: {
3 | name: "h1"
4 | },
5 | tag: 5,
6 | effectTag: 1,
7 | actualDuration: 9.00,
8 | actualStartTime: 400,
9 | memorizedProps: {},
10 | memorizedState: null,
11 | child: {
12 | type: { name: "div"},
13 | tag: 1,
14 | effectTag: 0,
15 | actualDuration: 8.00,
16 | actualStartTime: 300,
17 | memorizedProps: {},
18 | memorizedState: null,
19 | child: {
20 | type: "div",
21 | tag: 1,
22 | effectTag: 2,
23 | actualDuration: 8.00,
24 | actualStartTime: 300,
25 | memorizedProps: {},
26 | memorizedState: null,
27 | }
28 | },
29 | }
30 |
--------------------------------------------------------------------------------
/mockData/ticTacToe.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | function TicTacToe() {
4 | return (
5 |
6 |
Tic Tac Toe
7 |
8 |
9 |
10 | -
11 |
12 |
13 | -
14 |
15 |
16 | -
17 |
18 |
19 |
20 |
21 | -
22 |
23 |
24 | -
25 |
26 |
27 | -
28 |
29 |
30 |
31 |
32 | -
33 |
34 |
35 | -
36 |
37 |
38 | -
39 |
40 |
41 |
42 |
43 | );
44 | }
45 |
46 | export default TicTacToe;
47 |
--------------------------------------------------------------------------------
/mockData/ticTacToeFiberRoot.js:
--------------------------------------------------------------------------------
1 | container - HTMLDivElement {
2 | '__reactContainere$3ovmxfu0tzp': FiberNode {
3 | tag: 3,
4 | key: null,
5 | elementType: null,
6 | type: null,
7 | stateNode: FiberRootNode {
8 | tag: 0,
9 | current: [FiberNode],
10 | containerInfo: [Circular],
11 | pendingChildren: null,
12 | pingCache: null,
13 | finishedExpirationTime: 0,
14 | finishedWork: null,
15 | timeoutHandle: -1,
16 | context: {},
17 | pendingContext: null,
18 | hydrate: false,
19 | callbackNode: null,
20 | callbackPriority: 90,
21 | firstPendingTime: 0,
22 | firstSuspendedTime: 0,
23 | lastSuspendedTime: 0,
24 | nextKnownPendingLevel: 0,
25 | lastPingedTime: 0,
26 | lastExpiredTime: 0,
27 | interactionThreadID: 1,
28 | memoizedInteractions: Set {},
29 | pendingInteractionMap: Map {},
30 | callbackExpirationTime: 0
31 | },
32 | return: null,
33 | child: null,
34 | sibling: null,
35 | index: 0,
36 | ref: null,
37 | pendingProps: null,
38 | memoizedProps: null,
39 | updateQueue: {
40 | baseState: null,
41 | baseQueue: [Object],
42 | shared: [Object],
43 | effects: null
44 | },
45 | memoizedState: null,
46 | dependencies: null,
47 | mode: 0,
48 | effectTag: 0,
49 | nextEffect: null,
50 | firstEffect: null,
51 | lastEffect: null,
52 | expirationTime: 1073741823,
53 | childExpirationTime: 0,
54 | alternate: FiberNode {
55 | tag: 3,
56 | key: null,
57 | elementType: null,
58 | type: null,
59 | stateNode: [FiberRootNode],
60 | return: null,
61 | child: [FiberNode],
62 | sibling: null,
63 | index: 0,
64 | ref: null,
65 | pendingProps: null,
66 | memoizedProps: null,
67 | updateQueue: [Object],
68 | memoizedState: [Object],
69 | dependencies: null,
70 | mode: 0,
71 | effectTag: 0,
72 | nextEffect: null,
73 | firstEffect: [FiberNode],
74 | lastEffect: [FiberNode],
75 | expirationTime: 0,
76 | childExpirationTime: 0,
77 | alternate: [Circular],
78 | actualDuration: 0,
79 | actualStartTime: -1,
80 | selfBaseDuration: 0,
81 | treeBaseDuration: 0,
82 | _debugID: 1,
83 | _debugIsCurrentlyTiming: false,
84 | _debugSource: null,
85 | _debugOwner: null,
86 | _debugNeedsRemount: false,
87 | _debugHookTypes: null
88 | },
89 | actualDuration: 0,
90 | actualStartTime: -1,
91 | selfBaseDuration: 0,
92 | treeBaseDuration: 0,
93 | _debugID: 1,
94 | _debugIsCurrentlyTiming: false,
95 | _debugSource: null,
96 | _debugOwner: null,
97 | _debugNeedsRemount: false,
98 | _debugHookTypes: null
99 | },
100 | _reactRootContainer: ReactDOMBlockingRoot {
101 | _internalRoot: FiberRootNode {
102 | tag: 0,
103 | current: [FiberNode],
104 | containerInfo: [Circular],
105 | pendingChildren: null,
106 | pingCache: null,
107 | finishedExpirationTime: 0,
108 | finishedWork: null,
109 | timeoutHandle: -1,
110 | context: {},
111 | pendingContext: null,
112 | hydrate: false,
113 | callbackNode: null,
114 | callbackPriority: 90,
115 | firstPendingTime: 0,
116 | firstSuspendedTime: 0,
117 | lastSuspendedTime: 0,
118 | nextKnownPendingLevel: 0,
119 | lastPingedTime: 0,
120 | lastExpiredTime: 0,
121 | interactionThreadID: 1,
122 | memoizedInteractions: Set {},
123 | pendingInteractionMap: Map {},
124 | callbackExpirationTime: 0
125 | }
126 | }
127 | }
--------------------------------------------------------------------------------
/mockData/tinyFlameGraph.js:
--------------------------------------------------------------------------------
1 | const flameGraphData = {
2 | "children": [
3 | {
4 | "name": "genunix`syscall_mstate",
5 | "value": 89
6 | },
7 | {
8 | "children": [
9 | {
10 | "name": "unix`page_lookup_create",
11 | "value": 1
12 | }
13 | ],
14 | "name": "america",
15 | "value": 99
16 | }],
17 | "name": "codesmith",
18 | "value": 56
19 | }
20 |
21 | export default flameGraphData;
--------------------------------------------------------------------------------
/mockData/treeGraph.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitsmith1010/ReactMonitor/c0f21d04e7d91d66c65ed16e897898f19992e35a/mockData/treeGraph.js
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reactmonitor",
3 | "version": "1.0.1",
4 | "description": "Visualize React's component tree performance and optimization suggestions",
5 | "main": "App.js",
6 | "babel": {
7 | "presets": [
8 | "@babel/preset-env",
9 | "@babel/preset-react"
10 | ]
11 | },
12 | "scripts": {
13 | "build": "rm -rf dist && cpy src/extension/manifest.json dist && NODE_ENV=production webpack",
14 | "start": "webpack-dev-server --open",
15 | "test": "jest"
16 | },
17 | "repository": {
18 | "type": "git",
19 | "url": "git+https://github.com/oslabs-beta/ReactMonitor"
20 | },
21 | "author": "",
22 | "license": "ISC",
23 | "bugs": {
24 | "url": "https://github.com/oslabs-beta/ReactMonitor/issues"
25 | },
26 | "homepage": "https://github.com/oslabs-beta/ReactMonitor#readme",
27 | "dependencies": {
28 | "cpy-cli": "^3.1.1",
29 | "d3": "^5.16.0",
30 | "d3-flame-graph": "^3.1.1",
31 | "d3-hierarchy": "^1.1.9",
32 | "immutable": "^4.0.0-rc.12",
33 | "react": "^16.13.1",
34 | "react-dom": "^16.13.1",
35 | "react-flame-graph": "^1.4.0",
36 | "react-router-dom": "^5.2.0",
37 | "react-treeview": "^0.4.7"
38 | },
39 | "devDependencies": {
40 | "@babel/core": "^7.9.6",
41 | "@babel/preset-env": "^7.9.6",
42 | "@babel/preset-react": "^7.9.4",
43 | "@testing-library/jest-dom": "^5.8.0",
44 | "@testing-library/react": "^10.0.4",
45 | "babel-loader": "^8.1.0",
46 | "copy-webpack-plugin": "^6.0.2",
47 | "css-loader": "^3.5.3",
48 | "file-loader": "^6.0.0",
49 | "html-webpack-plugin": "^4.3.0",
50 | "jest": "^26.0.1",
51 | "mini-css-extract-plugin": "^0.9.0",
52 | "node-sass": "^4.14.1",
53 | "react-test-render": "^1.1.2",
54 | "sass-loader": "^8.0.2",
55 | "style-loader": "^1.2.1",
56 | "url-loader": "^4.1.0",
57 | "webpack": "^4.43.0",
58 | "webpack-cli": "^3.3.11",
59 | "webpack-dev-server": "^3.11.0"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/package/JSONStringify.js:
--------------------------------------------------------------------------------
1 | module.exports = function (object){
2 |
3 | let cache = [];
4 | const string = JSON.stringify(
5 | object,
6 | // custom replacer - gets around "TypeError: Converting circular structure to JSON"
7 | (key, value) => {
8 | if (typeof value === 'object' && value !== null) {
9 | if (cache.indexOf(value) !== -1) {
10 | // Circular reference found, discard key
11 | return;
12 | }
13 | // Store value in collection
14 | cache.push(value);
15 | }
16 | return value;
17 | },
18 | 4
19 | );
20 | cache = null; // garbage collection
21 | return string;
22 | }
--------------------------------------------------------------------------------
/package/README.md:
--------------------------------------------------------------------------------
1 | # ReactMonitor
2 | Quickly visualize React's component tree performance for improved onboarding and debugging
3 |
4 | ## What does it do
5 | By using the ReactMonitor Chrome DevTool, beginning and experienced developers alike are able to get a visual representation of an existing codebase that they are working on. Built with React, this tool will dynamically traverse the fiber root object behind the scenes, displaying state, props, render times and the type of components on the page.
6 |
7 |
8 | 
9 |
10 | ## How to install and run
11 | To be able to use the application, users can:
12 | - Download the 'ReactMonitor' Google Chrome extension from [The Chrome Web Store](https://chrome.google.com/webstore/detail/reactmonitor)
13 | - Run the NPM package in your own codebase by following these steps:
14 | - Install the [package](https://www.npmjs.com/package/reactmonitorfiber)\
15 | `npm install reactmonitorfiber`
16 | - Require/Import the package\
17 | `import reactMonitor from 'reactmonitorfiber'`\
18 | or\
19 | `const reactMonitor = require('reactmonitorfiber')`
20 | - Invoke React Monitor with an input of the DOM element that you are rendering the React Element into
21 | ```
22 | const container = document.querySelector('#root');
23 | reactDOM.render( , container);
24 | reactMonitor(container);
25 | ```
26 | - Navigate to the domain of your React application that you will be running React Monitor on
27 | - Open your Chrome Developer Tools and select React Monitor
28 | > Placeholder for Screenshot/Gif
29 | - You are now able to view state changes on your application in real time!
30 |
31 | ## Contributing
32 |
33 | As an open-sourced project, ReactMonitor gladly accepts help whenever possible. If you have suggestions for improvements or run into any bugs, please feel free to open a github issue after checking whether no such issue has been filed yet. When you file a github issue, please include the following information:
34 |
35 | #### Description
36 | ##### Steps to Reproduce
37 | ###### 1.
38 | ###### 2.
39 | ###### 3.
40 | ##### Expected behavior:
41 | ##### Actual behavior:
42 | ##### Reproduces how often:
43 | ##### Versions: x.x
44 | ##### Additional Information:
45 |
46 | ## Authors
47 |
48 | Rudo Hengst: [@RudoH](https://github.com/RudoH)\
49 | Lia Pham: [@lpham598](https://github.com/lpham598)\
50 | Tommy Han: [@simple-sifu](https://github.com/simple-sifu)
51 |
52 | ## License
53 |
54 | This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details
--------------------------------------------------------------------------------
/package/ReactWorkTags.js:
--------------------------------------------------------------------------------
1 | export const FunctionComponent = 0;
2 | export const ClassComponent = 1;
3 | export const IndeterminateComponent = 2; // Before we know whether it is function or class
4 | export const HostRoot = 3; // Root of a host tree. Could be nested inside another node.
5 | export const HostPortal = 4; // A subtree. Could be an entry point to a different renderer.
6 | export const HostComponent = 5;
7 | export const HostText = 6;
8 | export const Fragment = 7;
9 | export const Mode = 8;
10 | export const ContextConsumer = 9;
11 | export const ContextProvider = 10;
12 | export const ForwardRef = 11;
13 | export const Profiler = 12;
14 | export const SuspenseComponent = 13;
15 | export const MemoComponent = 14;
16 | export const SimpleMemoComponent = 15;
17 | export const LazyComponent = 16;
--------------------------------------------------------------------------------
/package/compareStateAndProps.js:
--------------------------------------------------------------------------------
1 | function compareStateAndProps(wasMounted, node, prevNode, parentShapeProps) {
2 | // compare state and props properties on stats properties for both nodes
3 | // if same - treeGraph.stats.stateOrPropsChanged - false
4 | if (node && prevNode) {
5 | // check if the node's type is a string
6 | // yes? give it a color of the parent - because Composite Component renders(or not) Host Component
7 | if (node.stats.type === 'string') {
8 | node.nodeSvgShape.shapeProps = parentShapeProps;
9 | delete node.stats.state;
10 | delete node.stats.props;
11 | } else if (
12 | prevNode.stats.state === node.stats.state &&
13 | prevNode.stats.props === node.stats.props
14 | ) {
15 | if (
16 | (node.stats.effectTag === 0 || node.stats.effectTag === 4) &&
17 | wasMounted
18 | ) {
19 | node.nodeSvgShape.shapeProps.fill = 'gray';
20 | } else {
21 | node.nodeSvgShape.shapeProps.fill = 'red';
22 | node.nodeSvgShape.shapeProps.rx = 12;
23 | node.nodeSvgShape.shapeProps.ry = 12;
24 | }
25 | }
26 |
27 | // delete node.stats;
28 |
29 | // recursively invoke the function for each children
30 | if (node.children.length) {
31 | for (let i = 0; i < node.children.length; i += 1) {
32 | compareStateAndProps(
33 | wasMounted,
34 | node.children[i],
35 | prevNode.children[i],
36 | node.nodeSvgShape.shapeProps
37 | );
38 | }
39 | }
40 | } else if (node) {
41 | // delete node.stats;
42 | if (node.stats.type === 'string') {
43 | delete node.stats.state;
44 | delete node.stats.props;
45 | }
46 |
47 | // recursively invoke the function for each children
48 | if (node.children.length) {
49 | for (let i = 0; i < node.children.length; i += 1) {
50 | compareStateAndProps(
51 | wasMounted,
52 | node.children[i],
53 | null,
54 | node.nodeSvgShape.shapeProps
55 | );
56 | }
57 | }
58 | }
59 |
60 | if (!wasMounted) {
61 | // delete node.stats;
62 | if (node.stats.type === 'string') {
63 | delete node.stats.state;
64 | delete node.stats.props;
65 | }
66 | if (node.children.length) {
67 | for (let i = 0; i < node.children.length; i += 1) {
68 | compareStateAndProps(wasMounted, node.children[i]);
69 | }
70 | }
71 | }
72 | };
73 |
74 |
75 | module.exports = compareStateAndProps;
76 |
77 |
--------------------------------------------------------------------------------
/package/containerWrapper.js:
--------------------------------------------------------------------------------
1 | const reactMonitor = require("./createTree.js");
2 |
3 | //grabbing the Dom element that has the property of react_RootContiner
4 | function get_fiber_root(document_children) {
5 | for (let ele of document_children) {
6 | if (ele.hasOwnProperty("_reactRootContainer")) return ele;
7 | }
8 | }
9 |
10 | const container = get_fiber_root(document.body.children);
11 |
12 | //invoking the createTree function by passing the DOM element that contain the property of react_RootContainer
13 | reactMonitor(container);
14 |
--------------------------------------------------------------------------------
/package/createTree.js:
--------------------------------------------------------------------------------
1 | const sendContentScript = require("./sendContentScript");
2 |
3 | //this function will be invoked in containerWrapper.js
4 |
5 | module.exports = function (container) {
6 |
7 | console.log("***IN CREATE TREE***");
8 | console.log("*** container ***", container );
9 | const fiberRoot = container._reactRootContainer._internalRoot;
10 | console.log("*** fiberroot ***", fiberRoot );
11 | let hostRoot = fiberRoot.current;
12 | const treeCreator = require("./makeTreeCreator")();
13 | let time_last = -Infinity;
14 | console.log("[info] actualStartTime:", hostRoot.actualStartTime);
15 |
16 | setInterval( function() {
17 | hostRoot = fiberRoot.current;
18 | if (hostRoot.actualStartTime != time_last) {
19 | console.log(
20 | "[info] actualStartTime:", hostRoot.actualStartTime);
21 | // sendContentScript(
22 | // treeCreator, hostRoot, fiberRoot.current
23 | // );
24 | sendContentScript(
25 | treeCreator, undefined, hostRoot
26 | );
27 | time_last = hostRoot.actualStartTime;
28 | }
29 | }, 100 );
30 | /*
31 | // on first load use initial render.
32 | window.addEventListener("load", () => {
33 | console.log("LOAD");
34 | sendContentScript(treeCreator, hostRoot);
35 | });
36 |
37 | window.addEventListener("click", () => {
38 | setTimeout(() => {
39 | console.log("CLICK");
40 | sendContentScript(treeCreator, hostRoot, fiberRoot.current);
41 | hostRoot=fiberRoot.current// to prevent none changing clicks from afecting the tree graph
42 | }, 200);
43 | });
44 |
45 | window.addEventListener("keyup", () => {
46 | setTimeout(() => {
47 | console.log("KEYUP");
48 | sendContentScript(treeCreator, hostRoot, fiberRoot.current);
49 | hostRoot=fiberRoot.current// to prevent none changing clicks from afecting the tree graph
50 | }, 200);
51 | });
52 | */
53 | };
54 |
--------------------------------------------------------------------------------
/package/deleteParent.js:
--------------------------------------------------------------------------------
1 |
2 | function deleteParent(root){
3 |
4 | if (root.parent) {
5 | delete root.parent;
6 | }
7 | if (root.children) {
8 | root.children.forEach((child) => deleteParent(child));
9 | }
10 |
11 | }
12 |
13 |
14 |
15 | module.exports = deleteParent;
--------------------------------------------------------------------------------
/package/deleteParent.test.js:
--------------------------------------------------------------------------------
1 | const treeGraph = require('../mockData/treeGraph');
2 | const deleteParent = require('./deleteParent');
3 |
4 |
5 | describe('test deleteParent', () => {
6 |
7 |
8 | xit('test deleteParent deletes Parents', () => {
9 |
10 | const prunedTreeGraph = deleteParent(treeGraph);
11 |
12 | console.log("prunedTreeGraph -", prunedTreeGraph);
13 | expect(prunedTreeGraph.name).toBe('h1');
14 | expect(prunedTreeGraph.value).toBe(9);
15 | expect(prunedTreeGraph.tag).toBe(5);
16 | expect(prunedTreeGraph.stats.effectTag).toBe(1);
17 | expect(prunedTreeGraph.stats.renderStart).toBe('400.00');
18 | expect(prunedTreeGraph.stats.renderTotal).toBe('9.00');
19 | expect(prunedTreeGraph.children[0].name).toBe('div');
20 | expect(prunedTreeGraph.children[0].value).toBe(8);
21 | expect(prunedTreeGraph.children[0].tag).toBe(1);
22 | expect(prunedTreeGraph.children[0].stats.effectTag).toBe(2)
23 | });
24 |
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/package/makeTreeCreator.js:
--------------------------------------------------------------------------------
1 | const treeGraphFactory = require('./treeGraphFactory');
2 | const deleteParent = require('./deleteParent');
3 | const compareStateAndProps = require('./compareStateAndProps');
4 |
5 |
6 | module.exports = function (){
7 |
8 | // first time load these closure variables
9 | // need to be initialized accordingly.
10 | let wasMounted = false;
11 | let prevTreeGraph = null;
12 |
13 | function treeCreator(hostRoot, treeGraph = null) {
14 |
15 | // 1.) create treeGraph
16 | if (hostRoot.child) {
17 | // recursively traverse App Fiber Tree and create treeGraph
18 | treeGraph = treeGraphFactory(hostRoot.child);
19 | }
20 |
21 | // 2.) prune treeGraph
22 | deleteParent(treeGraph);
23 | delete treeGraph.parent;
24 |
25 | // 3.) enhance treeGraph
26 | // by comparing state and props in prevTreeGraph and treeGraph(current)
27 | const tempTreeGraph = JSON.parse(JSON.stringify(treeGraph));
28 | compareStateAndProps(wasMounted, treeGraph, prevTreeGraph, null);
29 | prevTreeGraph = tempTreeGraph;
30 | wasMounted = true;
31 |
32 |
33 | return treeGraph;
34 |
35 | }
36 | return treeCreator;
37 | }
38 |
--------------------------------------------------------------------------------
/package/makeTreeCreator.test.js:
--------------------------------------------------------------------------------
1 | const makeTreeCreator = require('./makeTreeCreator');
2 | const fiber = require('../mockData/fiber');
3 |
4 |
5 | describe('test makeTreeCreator', () => {
6 |
7 |
8 | it('test makeTreeCreator returns a function', () => {
9 |
10 | const treeCreator = makeTreeCreator();
11 | const treeGraph = treeCreator(fiber);
12 |
13 | expect( treeCreator ).toBeInstanceOf( Function )
14 | expect( treeGraph.name ).toBe('div');
15 | });
16 |
17 | it('test makeTreeCreator has valid value', () => {
18 |
19 | const treeCreator = makeTreeCreator();
20 | const treeGraph = treeCreator(fiber);
21 |
22 | expect( treeGraph.name ).toBe('div');
23 | });
24 |
25 |
26 | });
27 |
--------------------------------------------------------------------------------
/package/newNode.js:
--------------------------------------------------------------------------------
1 | const JSONStringify = require('./JSONStringify');
2 |
3 | function Node(name, parent, children, fiber) {
4 |
5 | this.name = name;
6 | this.parent = parent;
7 | this.value = Number(fiber.actualDuration.toFixed(2));
8 | this.children = children;
9 | this.stats = {
10 | state: JSONStringify(fiber.memoizedState),
11 | props: JSONStringify(fiber.memoizedProps),
12 | effectTag: fiber.effectTag,
13 | type: typeof fiber.type,
14 | renderStart: fiber.actualStartTime.toFixed(2),
15 | renderTotal: fiber.actualDuration.toFixed(2),
16 | };
17 | this.nodeSvgShape = {
18 | shape: 'ellipse',
19 | shapeProps: {
20 | rx: 10,
21 | ry: 10,
22 | fill: 'lightgreen',
23 | },
24 | };
25 | if (typeof this.type === "string") {
26 | this.type = fiber.type;
27 | }
28 | this.tag = fiber.tag;
29 |
30 | }
31 |
32 | module.exports = {
33 | Node: Node
34 | }
35 |
--------------------------------------------------------------------------------
/package/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "reactmonitorfiber",
3 | "version": "1.0.11",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@webassemblyjs/ast": {
8 | "version": "1.9.0",
9 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
10 | "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
11 | "dev": true,
12 | "requires": {
13 | "@webassemblyjs/helper-module-context": "1.9.0",
14 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
15 | "@webassemblyjs/wast-parser": "1.9.0"
16 | }
17 | },
18 | "@webassemblyjs/floating-point-hex-parser": {
19 | "version": "1.9.0",
20 | "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
21 | "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
22 | "dev": true
23 | },
24 | "@webassemblyjs/helper-api-error": {
25 | "version": "1.9.0",
26 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
27 | "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
28 | "dev": true
29 | },
30 | "@webassemblyjs/helper-buffer": {
31 | "version": "1.9.0",
32 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
33 | "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
34 | "dev": true
35 | },
36 | "@webassemblyjs/helper-code-frame": {
37 | "version": "1.9.0",
38 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
39 | "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
40 | "dev": true,
41 | "requires": {
42 | "@webassemblyjs/wast-printer": "1.9.0"
43 | }
44 | },
45 | "@webassemblyjs/helper-fsm": {
46 | "version": "1.9.0",
47 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
48 | "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
49 | "dev": true
50 | },
51 | "@webassemblyjs/helper-module-context": {
52 | "version": "1.9.0",
53 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
54 | "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
55 | "dev": true,
56 | "requires": {
57 | "@webassemblyjs/ast": "1.9.0"
58 | }
59 | },
60 | "@webassemblyjs/helper-wasm-bytecode": {
61 | "version": "1.9.0",
62 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
63 | "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
64 | "dev": true
65 | },
66 | "@webassemblyjs/helper-wasm-section": {
67 | "version": "1.9.0",
68 | "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
69 | "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
70 | "dev": true,
71 | "requires": {
72 | "@webassemblyjs/ast": "1.9.0",
73 | "@webassemblyjs/helper-buffer": "1.9.0",
74 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
75 | "@webassemblyjs/wasm-gen": "1.9.0"
76 | }
77 | },
78 | "@webassemblyjs/ieee754": {
79 | "version": "1.9.0",
80 | "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
81 | "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
82 | "dev": true,
83 | "requires": {
84 | "@xtuc/ieee754": "^1.2.0"
85 | }
86 | },
87 | "@webassemblyjs/leb128": {
88 | "version": "1.9.0",
89 | "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
90 | "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
91 | "dev": true,
92 | "requires": {
93 | "@xtuc/long": "4.2.2"
94 | }
95 | },
96 | "@webassemblyjs/utf8": {
97 | "version": "1.9.0",
98 | "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
99 | "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
100 | "dev": true
101 | },
102 | "@webassemblyjs/wasm-edit": {
103 | "version": "1.9.0",
104 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
105 | "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
106 | "dev": true,
107 | "requires": {
108 | "@webassemblyjs/ast": "1.9.0",
109 | "@webassemblyjs/helper-buffer": "1.9.0",
110 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
111 | "@webassemblyjs/helper-wasm-section": "1.9.0",
112 | "@webassemblyjs/wasm-gen": "1.9.0",
113 | "@webassemblyjs/wasm-opt": "1.9.0",
114 | "@webassemblyjs/wasm-parser": "1.9.0",
115 | "@webassemblyjs/wast-printer": "1.9.0"
116 | }
117 | },
118 | "@webassemblyjs/wasm-gen": {
119 | "version": "1.9.0",
120 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
121 | "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
122 | "dev": true,
123 | "requires": {
124 | "@webassemblyjs/ast": "1.9.0",
125 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
126 | "@webassemblyjs/ieee754": "1.9.0",
127 | "@webassemblyjs/leb128": "1.9.0",
128 | "@webassemblyjs/utf8": "1.9.0"
129 | }
130 | },
131 | "@webassemblyjs/wasm-opt": {
132 | "version": "1.9.0",
133 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
134 | "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
135 | "dev": true,
136 | "requires": {
137 | "@webassemblyjs/ast": "1.9.0",
138 | "@webassemblyjs/helper-buffer": "1.9.0",
139 | "@webassemblyjs/wasm-gen": "1.9.0",
140 | "@webassemblyjs/wasm-parser": "1.9.0"
141 | }
142 | },
143 | "@webassemblyjs/wasm-parser": {
144 | "version": "1.9.0",
145 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
146 | "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
147 | "dev": true,
148 | "requires": {
149 | "@webassemblyjs/ast": "1.9.0",
150 | "@webassemblyjs/helper-api-error": "1.9.0",
151 | "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
152 | "@webassemblyjs/ieee754": "1.9.0",
153 | "@webassemblyjs/leb128": "1.9.0",
154 | "@webassemblyjs/utf8": "1.9.0"
155 | }
156 | },
157 | "@webassemblyjs/wast-parser": {
158 | "version": "1.9.0",
159 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
160 | "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
161 | "dev": true,
162 | "requires": {
163 | "@webassemblyjs/ast": "1.9.0",
164 | "@webassemblyjs/floating-point-hex-parser": "1.9.0",
165 | "@webassemblyjs/helper-api-error": "1.9.0",
166 | "@webassemblyjs/helper-code-frame": "1.9.0",
167 | "@webassemblyjs/helper-fsm": "1.9.0",
168 | "@xtuc/long": "4.2.2"
169 | }
170 | },
171 | "@webassemblyjs/wast-printer": {
172 | "version": "1.9.0",
173 | "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
174 | "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
175 | "dev": true,
176 | "requires": {
177 | "@webassemblyjs/ast": "1.9.0",
178 | "@webassemblyjs/wast-parser": "1.9.0",
179 | "@xtuc/long": "4.2.2"
180 | }
181 | },
182 | "@xtuc/ieee754": {
183 | "version": "1.2.0",
184 | "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
185 | "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
186 | "dev": true
187 | },
188 | "@xtuc/long": {
189 | "version": "4.2.2",
190 | "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
191 | "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
192 | "dev": true
193 | },
194 | "acorn": {
195 | "version": "6.4.1",
196 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
197 | "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
198 | "dev": true
199 | },
200 | "ajv": {
201 | "version": "6.12.3",
202 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
203 | "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
204 | "dev": true,
205 | "requires": {
206 | "fast-deep-equal": "^3.1.1",
207 | "fast-json-stable-stringify": "^2.0.0",
208 | "json-schema-traverse": "^0.4.1",
209 | "uri-js": "^4.2.2"
210 | }
211 | },
212 | "ajv-errors": {
213 | "version": "1.0.1",
214 | "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
215 | "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
216 | "dev": true
217 | },
218 | "ajv-keywords": {
219 | "version": "3.5.1",
220 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz",
221 | "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==",
222 | "dev": true
223 | },
224 | "ansi-regex": {
225 | "version": "4.1.0",
226 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
227 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
228 | "dev": true
229 | },
230 | "ansi-styles": {
231 | "version": "3.2.1",
232 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
233 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
234 | "dev": true,
235 | "requires": {
236 | "color-convert": "^1.9.0"
237 | }
238 | },
239 | "anymatch": {
240 | "version": "3.1.1",
241 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
242 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
243 | "dev": true,
244 | "optional": true,
245 | "requires": {
246 | "normalize-path": "^3.0.0",
247 | "picomatch": "^2.0.4"
248 | }
249 | },
250 | "aproba": {
251 | "version": "1.2.0",
252 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
253 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
254 | "dev": true
255 | },
256 | "arr-diff": {
257 | "version": "4.0.0",
258 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
259 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
260 | "dev": true
261 | },
262 | "arr-flatten": {
263 | "version": "1.1.0",
264 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
265 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
266 | "dev": true
267 | },
268 | "arr-union": {
269 | "version": "3.1.0",
270 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
271 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
272 | "dev": true
273 | },
274 | "array-unique": {
275 | "version": "0.3.2",
276 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
277 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
278 | "dev": true
279 | },
280 | "asn1.js": {
281 | "version": "4.10.1",
282 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
283 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
284 | "dev": true,
285 | "requires": {
286 | "bn.js": "^4.0.0",
287 | "inherits": "^2.0.1",
288 | "minimalistic-assert": "^1.0.0"
289 | },
290 | "dependencies": {
291 | "bn.js": {
292 | "version": "4.11.9",
293 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
294 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
295 | "dev": true
296 | }
297 | }
298 | },
299 | "assert": {
300 | "version": "1.5.0",
301 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
302 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
303 | "dev": true,
304 | "requires": {
305 | "object-assign": "^4.1.1",
306 | "util": "0.10.3"
307 | },
308 | "dependencies": {
309 | "inherits": {
310 | "version": "2.0.1",
311 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
312 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
313 | "dev": true
314 | },
315 | "util": {
316 | "version": "0.10.3",
317 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
318 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
319 | "dev": true,
320 | "requires": {
321 | "inherits": "2.0.1"
322 | }
323 | }
324 | }
325 | },
326 | "assign-symbols": {
327 | "version": "1.0.0",
328 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
329 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
330 | "dev": true
331 | },
332 | "async-each": {
333 | "version": "1.0.3",
334 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
335 | "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
336 | "dev": true,
337 | "optional": true
338 | },
339 | "atob": {
340 | "version": "2.1.2",
341 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
342 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
343 | "dev": true
344 | },
345 | "balanced-match": {
346 | "version": "1.0.0",
347 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
348 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
349 | "dev": true
350 | },
351 | "base": {
352 | "version": "0.11.2",
353 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
354 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
355 | "dev": true,
356 | "requires": {
357 | "cache-base": "^1.0.1",
358 | "class-utils": "^0.3.5",
359 | "component-emitter": "^1.2.1",
360 | "define-property": "^1.0.0",
361 | "isobject": "^3.0.1",
362 | "mixin-deep": "^1.2.0",
363 | "pascalcase": "^0.1.1"
364 | },
365 | "dependencies": {
366 | "define-property": {
367 | "version": "1.0.0",
368 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
369 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
370 | "dev": true,
371 | "requires": {
372 | "is-descriptor": "^1.0.0"
373 | }
374 | },
375 | "is-accessor-descriptor": {
376 | "version": "1.0.0",
377 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
378 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
379 | "dev": true,
380 | "requires": {
381 | "kind-of": "^6.0.0"
382 | }
383 | },
384 | "is-data-descriptor": {
385 | "version": "1.0.0",
386 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
387 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
388 | "dev": true,
389 | "requires": {
390 | "kind-of": "^6.0.0"
391 | }
392 | },
393 | "is-descriptor": {
394 | "version": "1.0.2",
395 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
396 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
397 | "dev": true,
398 | "requires": {
399 | "is-accessor-descriptor": "^1.0.0",
400 | "is-data-descriptor": "^1.0.0",
401 | "kind-of": "^6.0.2"
402 | }
403 | }
404 | }
405 | },
406 | "base64-js": {
407 | "version": "1.3.1",
408 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
409 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
410 | "dev": true
411 | },
412 | "big.js": {
413 | "version": "5.2.2",
414 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
415 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
416 | "dev": true
417 | },
418 | "binary-extensions": {
419 | "version": "2.1.0",
420 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
421 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
422 | "dev": true,
423 | "optional": true
424 | },
425 | "bluebird": {
426 | "version": "3.7.2",
427 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
428 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
429 | "dev": true
430 | },
431 | "bn.js": {
432 | "version": "5.1.2",
433 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
434 | "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==",
435 | "dev": true
436 | },
437 | "brace-expansion": {
438 | "version": "1.1.11",
439 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
440 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
441 | "dev": true,
442 | "requires": {
443 | "balanced-match": "^1.0.0",
444 | "concat-map": "0.0.1"
445 | }
446 | },
447 | "braces": {
448 | "version": "2.3.2",
449 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
450 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
451 | "dev": true,
452 | "requires": {
453 | "arr-flatten": "^1.1.0",
454 | "array-unique": "^0.3.2",
455 | "extend-shallow": "^2.0.1",
456 | "fill-range": "^4.0.0",
457 | "isobject": "^3.0.1",
458 | "repeat-element": "^1.1.2",
459 | "snapdragon": "^0.8.1",
460 | "snapdragon-node": "^2.0.1",
461 | "split-string": "^3.0.2",
462 | "to-regex": "^3.0.1"
463 | },
464 | "dependencies": {
465 | "extend-shallow": {
466 | "version": "2.0.1",
467 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
468 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
469 | "dev": true,
470 | "requires": {
471 | "is-extendable": "^0.1.0"
472 | }
473 | }
474 | }
475 | },
476 | "brorand": {
477 | "version": "1.1.0",
478 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
479 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
480 | "dev": true
481 | },
482 | "browserify-aes": {
483 | "version": "1.2.0",
484 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
485 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
486 | "dev": true,
487 | "requires": {
488 | "buffer-xor": "^1.0.3",
489 | "cipher-base": "^1.0.0",
490 | "create-hash": "^1.1.0",
491 | "evp_bytestokey": "^1.0.3",
492 | "inherits": "^2.0.1",
493 | "safe-buffer": "^5.0.1"
494 | }
495 | },
496 | "browserify-cipher": {
497 | "version": "1.0.1",
498 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
499 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
500 | "dev": true,
501 | "requires": {
502 | "browserify-aes": "^1.0.4",
503 | "browserify-des": "^1.0.0",
504 | "evp_bytestokey": "^1.0.0"
505 | }
506 | },
507 | "browserify-des": {
508 | "version": "1.0.2",
509 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
510 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
511 | "dev": true,
512 | "requires": {
513 | "cipher-base": "^1.0.1",
514 | "des.js": "^1.0.0",
515 | "inherits": "^2.0.1",
516 | "safe-buffer": "^5.1.2"
517 | }
518 | },
519 | "browserify-rsa": {
520 | "version": "4.0.1",
521 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
522 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
523 | "dev": true,
524 | "requires": {
525 | "bn.js": "^4.1.0",
526 | "randombytes": "^2.0.1"
527 | },
528 | "dependencies": {
529 | "bn.js": {
530 | "version": "4.11.9",
531 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
532 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
533 | "dev": true
534 | }
535 | }
536 | },
537 | "browserify-sign": {
538 | "version": "4.2.0",
539 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
540 | "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
541 | "dev": true,
542 | "requires": {
543 | "bn.js": "^5.1.1",
544 | "browserify-rsa": "^4.0.1",
545 | "create-hash": "^1.2.0",
546 | "create-hmac": "^1.1.7",
547 | "elliptic": "^6.5.2",
548 | "inherits": "^2.0.4",
549 | "parse-asn1": "^5.1.5",
550 | "readable-stream": "^3.6.0",
551 | "safe-buffer": "^5.2.0"
552 | },
553 | "dependencies": {
554 | "readable-stream": {
555 | "version": "3.6.0",
556 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
557 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
558 | "dev": true,
559 | "requires": {
560 | "inherits": "^2.0.3",
561 | "string_decoder": "^1.1.1",
562 | "util-deprecate": "^1.0.1"
563 | }
564 | },
565 | "safe-buffer": {
566 | "version": "5.2.1",
567 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
568 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
569 | "dev": true
570 | }
571 | }
572 | },
573 | "browserify-zlib": {
574 | "version": "0.2.0",
575 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
576 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
577 | "dev": true,
578 | "requires": {
579 | "pako": "~1.0.5"
580 | }
581 | },
582 | "buffer": {
583 | "version": "4.9.2",
584 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
585 | "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
586 | "dev": true,
587 | "requires": {
588 | "base64-js": "^1.0.2",
589 | "ieee754": "^1.1.4",
590 | "isarray": "^1.0.0"
591 | }
592 | },
593 | "buffer-from": {
594 | "version": "1.1.1",
595 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
596 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
597 | "dev": true
598 | },
599 | "buffer-xor": {
600 | "version": "1.0.3",
601 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
602 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
603 | "dev": true
604 | },
605 | "builtin-status-codes": {
606 | "version": "3.0.0",
607 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
608 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
609 | "dev": true
610 | },
611 | "cacache": {
612 | "version": "12.0.4",
613 | "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
614 | "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
615 | "dev": true,
616 | "requires": {
617 | "bluebird": "^3.5.5",
618 | "chownr": "^1.1.1",
619 | "figgy-pudding": "^3.5.1",
620 | "glob": "^7.1.4",
621 | "graceful-fs": "^4.1.15",
622 | "infer-owner": "^1.0.3",
623 | "lru-cache": "^5.1.1",
624 | "mississippi": "^3.0.0",
625 | "mkdirp": "^0.5.1",
626 | "move-concurrently": "^1.0.1",
627 | "promise-inflight": "^1.0.1",
628 | "rimraf": "^2.6.3",
629 | "ssri": "^6.0.1",
630 | "unique-filename": "^1.1.1",
631 | "y18n": "^4.0.0"
632 | }
633 | },
634 | "cache-base": {
635 | "version": "1.0.1",
636 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
637 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
638 | "dev": true,
639 | "requires": {
640 | "collection-visit": "^1.0.0",
641 | "component-emitter": "^1.2.1",
642 | "get-value": "^2.0.6",
643 | "has-value": "^1.0.0",
644 | "isobject": "^3.0.1",
645 | "set-value": "^2.0.0",
646 | "to-object-path": "^0.3.0",
647 | "union-value": "^1.0.0",
648 | "unset-value": "^1.0.0"
649 | }
650 | },
651 | "camelcase": {
652 | "version": "5.3.1",
653 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
654 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
655 | "dev": true
656 | },
657 | "chalk": {
658 | "version": "2.4.2",
659 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
660 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
661 | "dev": true,
662 | "requires": {
663 | "ansi-styles": "^3.2.1",
664 | "escape-string-regexp": "^1.0.5",
665 | "supports-color": "^5.3.0"
666 | },
667 | "dependencies": {
668 | "supports-color": {
669 | "version": "5.5.0",
670 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
671 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
672 | "dev": true,
673 | "requires": {
674 | "has-flag": "^3.0.0"
675 | }
676 | }
677 | }
678 | },
679 | "chokidar": {
680 | "version": "3.4.1",
681 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
682 | "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
683 | "dev": true,
684 | "optional": true,
685 | "requires": {
686 | "anymatch": "~3.1.1",
687 | "braces": "~3.0.2",
688 | "fsevents": "~2.1.2",
689 | "glob-parent": "~5.1.0",
690 | "is-binary-path": "~2.1.0",
691 | "is-glob": "~4.0.1",
692 | "normalize-path": "~3.0.0",
693 | "readdirp": "~3.4.0"
694 | },
695 | "dependencies": {
696 | "braces": {
697 | "version": "3.0.2",
698 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
699 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
700 | "dev": true,
701 | "optional": true,
702 | "requires": {
703 | "fill-range": "^7.0.1"
704 | }
705 | },
706 | "fill-range": {
707 | "version": "7.0.1",
708 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
709 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
710 | "dev": true,
711 | "optional": true,
712 | "requires": {
713 | "to-regex-range": "^5.0.1"
714 | }
715 | },
716 | "is-number": {
717 | "version": "7.0.0",
718 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
719 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
720 | "dev": true,
721 | "optional": true
722 | },
723 | "to-regex-range": {
724 | "version": "5.0.1",
725 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
726 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
727 | "dev": true,
728 | "optional": true,
729 | "requires": {
730 | "is-number": "^7.0.0"
731 | }
732 | }
733 | }
734 | },
735 | "chownr": {
736 | "version": "1.1.4",
737 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
738 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
739 | "dev": true
740 | },
741 | "chrome-trace-event": {
742 | "version": "1.0.2",
743 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
744 | "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
745 | "dev": true,
746 | "requires": {
747 | "tslib": "^1.9.0"
748 | }
749 | },
750 | "cipher-base": {
751 | "version": "1.0.4",
752 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
753 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
754 | "dev": true,
755 | "requires": {
756 | "inherits": "^2.0.1",
757 | "safe-buffer": "^5.0.1"
758 | }
759 | },
760 | "class-utils": {
761 | "version": "0.3.6",
762 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
763 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
764 | "dev": true,
765 | "requires": {
766 | "arr-union": "^3.1.0",
767 | "define-property": "^0.2.5",
768 | "isobject": "^3.0.0",
769 | "static-extend": "^0.1.1"
770 | },
771 | "dependencies": {
772 | "define-property": {
773 | "version": "0.2.5",
774 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
775 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
776 | "dev": true,
777 | "requires": {
778 | "is-descriptor": "^0.1.0"
779 | }
780 | }
781 | }
782 | },
783 | "cliui": {
784 | "version": "5.0.0",
785 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
786 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
787 | "dev": true,
788 | "requires": {
789 | "string-width": "^3.1.0",
790 | "strip-ansi": "^5.2.0",
791 | "wrap-ansi": "^5.1.0"
792 | }
793 | },
794 | "collection-visit": {
795 | "version": "1.0.0",
796 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
797 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
798 | "dev": true,
799 | "requires": {
800 | "map-visit": "^1.0.0",
801 | "object-visit": "^1.0.0"
802 | }
803 | },
804 | "color-convert": {
805 | "version": "1.9.3",
806 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
807 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
808 | "dev": true,
809 | "requires": {
810 | "color-name": "1.1.3"
811 | }
812 | },
813 | "color-name": {
814 | "version": "1.1.3",
815 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
816 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
817 | "dev": true
818 | },
819 | "commander": {
820 | "version": "2.20.3",
821 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
822 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
823 | "dev": true
824 | },
825 | "commondir": {
826 | "version": "1.0.1",
827 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
828 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
829 | "dev": true
830 | },
831 | "component-emitter": {
832 | "version": "1.3.0",
833 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
834 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
835 | "dev": true
836 | },
837 | "concat-map": {
838 | "version": "0.0.1",
839 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
840 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
841 | "dev": true
842 | },
843 | "concat-stream": {
844 | "version": "1.6.2",
845 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
846 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
847 | "dev": true,
848 | "requires": {
849 | "buffer-from": "^1.0.0",
850 | "inherits": "^2.0.3",
851 | "readable-stream": "^2.2.2",
852 | "typedarray": "^0.0.6"
853 | }
854 | },
855 | "console-browserify": {
856 | "version": "1.2.0",
857 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
858 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
859 | "dev": true
860 | },
861 | "constants-browserify": {
862 | "version": "1.0.0",
863 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
864 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
865 | "dev": true
866 | },
867 | "copy-concurrently": {
868 | "version": "1.0.5",
869 | "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
870 | "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
871 | "dev": true,
872 | "requires": {
873 | "aproba": "^1.1.1",
874 | "fs-write-stream-atomic": "^1.0.8",
875 | "iferr": "^0.1.5",
876 | "mkdirp": "^0.5.1",
877 | "rimraf": "^2.5.4",
878 | "run-queue": "^1.0.0"
879 | }
880 | },
881 | "copy-descriptor": {
882 | "version": "0.1.1",
883 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
884 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
885 | "dev": true
886 | },
887 | "core-util-is": {
888 | "version": "1.0.2",
889 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
890 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
891 | "dev": true
892 | },
893 | "create-ecdh": {
894 | "version": "4.0.3",
895 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
896 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
897 | "dev": true,
898 | "requires": {
899 | "bn.js": "^4.1.0",
900 | "elliptic": "^6.0.0"
901 | },
902 | "dependencies": {
903 | "bn.js": {
904 | "version": "4.11.9",
905 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
906 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
907 | "dev": true
908 | }
909 | }
910 | },
911 | "create-hash": {
912 | "version": "1.2.0",
913 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
914 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
915 | "dev": true,
916 | "requires": {
917 | "cipher-base": "^1.0.1",
918 | "inherits": "^2.0.1",
919 | "md5.js": "^1.3.4",
920 | "ripemd160": "^2.0.1",
921 | "sha.js": "^2.4.0"
922 | }
923 | },
924 | "create-hmac": {
925 | "version": "1.1.7",
926 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
927 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
928 | "dev": true,
929 | "requires": {
930 | "cipher-base": "^1.0.3",
931 | "create-hash": "^1.1.0",
932 | "inherits": "^2.0.1",
933 | "ripemd160": "^2.0.0",
934 | "safe-buffer": "^5.0.1",
935 | "sha.js": "^2.4.8"
936 | }
937 | },
938 | "cross-spawn": {
939 | "version": "6.0.5",
940 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
941 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
942 | "dev": true,
943 | "requires": {
944 | "nice-try": "^1.0.4",
945 | "path-key": "^2.0.1",
946 | "semver": "^5.5.0",
947 | "shebang-command": "^1.2.0",
948 | "which": "^1.2.9"
949 | }
950 | },
951 | "crypto-browserify": {
952 | "version": "3.12.0",
953 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
954 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
955 | "dev": true,
956 | "requires": {
957 | "browserify-cipher": "^1.0.0",
958 | "browserify-sign": "^4.0.0",
959 | "create-ecdh": "^4.0.0",
960 | "create-hash": "^1.1.0",
961 | "create-hmac": "^1.1.0",
962 | "diffie-hellman": "^5.0.0",
963 | "inherits": "^2.0.1",
964 | "pbkdf2": "^3.0.3",
965 | "public-encrypt": "^4.0.0",
966 | "randombytes": "^2.0.0",
967 | "randomfill": "^1.0.3"
968 | }
969 | },
970 | "cyclist": {
971 | "version": "1.0.1",
972 | "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
973 | "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
974 | "dev": true
975 | },
976 | "debug": {
977 | "version": "2.6.9",
978 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
979 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
980 | "dev": true,
981 | "requires": {
982 | "ms": "2.0.0"
983 | }
984 | },
985 | "decamelize": {
986 | "version": "1.2.0",
987 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
988 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
989 | "dev": true
990 | },
991 | "decode-uri-component": {
992 | "version": "0.2.0",
993 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
994 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
995 | "dev": true
996 | },
997 | "define-property": {
998 | "version": "2.0.2",
999 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
1000 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
1001 | "dev": true,
1002 | "requires": {
1003 | "is-descriptor": "^1.0.2",
1004 | "isobject": "^3.0.1"
1005 | },
1006 | "dependencies": {
1007 | "is-accessor-descriptor": {
1008 | "version": "1.0.0",
1009 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
1010 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
1011 | "dev": true,
1012 | "requires": {
1013 | "kind-of": "^6.0.0"
1014 | }
1015 | },
1016 | "is-data-descriptor": {
1017 | "version": "1.0.0",
1018 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
1019 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
1020 | "dev": true,
1021 | "requires": {
1022 | "kind-of": "^6.0.0"
1023 | }
1024 | },
1025 | "is-descriptor": {
1026 | "version": "1.0.2",
1027 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
1028 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
1029 | "dev": true,
1030 | "requires": {
1031 | "is-accessor-descriptor": "^1.0.0",
1032 | "is-data-descriptor": "^1.0.0",
1033 | "kind-of": "^6.0.2"
1034 | }
1035 | }
1036 | }
1037 | },
1038 | "des.js": {
1039 | "version": "1.0.1",
1040 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
1041 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
1042 | "dev": true,
1043 | "requires": {
1044 | "inherits": "^2.0.1",
1045 | "minimalistic-assert": "^1.0.0"
1046 | }
1047 | },
1048 | "detect-file": {
1049 | "version": "1.0.0",
1050 | "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
1051 | "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
1052 | "dev": true
1053 | },
1054 | "diffie-hellman": {
1055 | "version": "5.0.3",
1056 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
1057 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
1058 | "dev": true,
1059 | "requires": {
1060 | "bn.js": "^4.1.0",
1061 | "miller-rabin": "^4.0.0",
1062 | "randombytes": "^2.0.0"
1063 | },
1064 | "dependencies": {
1065 | "bn.js": {
1066 | "version": "4.11.9",
1067 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
1068 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
1069 | "dev": true
1070 | }
1071 | }
1072 | },
1073 | "domain-browser": {
1074 | "version": "1.2.0",
1075 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
1076 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
1077 | "dev": true
1078 | },
1079 | "duplexify": {
1080 | "version": "3.7.1",
1081 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
1082 | "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
1083 | "dev": true,
1084 | "requires": {
1085 | "end-of-stream": "^1.0.0",
1086 | "inherits": "^2.0.1",
1087 | "readable-stream": "^2.0.0",
1088 | "stream-shift": "^1.0.0"
1089 | }
1090 | },
1091 | "elliptic": {
1092 | "version": "6.5.3",
1093 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
1094 | "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
1095 | "dev": true,
1096 | "requires": {
1097 | "bn.js": "^4.4.0",
1098 | "brorand": "^1.0.1",
1099 | "hash.js": "^1.0.0",
1100 | "hmac-drbg": "^1.0.0",
1101 | "inherits": "^2.0.1",
1102 | "minimalistic-assert": "^1.0.0",
1103 | "minimalistic-crypto-utils": "^1.0.0"
1104 | },
1105 | "dependencies": {
1106 | "bn.js": {
1107 | "version": "4.11.9",
1108 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
1109 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
1110 | "dev": true
1111 | }
1112 | }
1113 | },
1114 | "emoji-regex": {
1115 | "version": "7.0.3",
1116 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
1117 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
1118 | "dev": true
1119 | },
1120 | "emojis-list": {
1121 | "version": "3.0.0",
1122 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
1123 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
1124 | "dev": true
1125 | },
1126 | "end-of-stream": {
1127 | "version": "1.4.4",
1128 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1129 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1130 | "dev": true,
1131 | "requires": {
1132 | "once": "^1.4.0"
1133 | }
1134 | },
1135 | "enhanced-resolve": {
1136 | "version": "4.3.0",
1137 | "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
1138 | "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
1139 | "dev": true,
1140 | "requires": {
1141 | "graceful-fs": "^4.1.2",
1142 | "memory-fs": "^0.5.0",
1143 | "tapable": "^1.0.0"
1144 | },
1145 | "dependencies": {
1146 | "memory-fs": {
1147 | "version": "0.5.0",
1148 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
1149 | "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
1150 | "dev": true,
1151 | "requires": {
1152 | "errno": "^0.1.3",
1153 | "readable-stream": "^2.0.1"
1154 | }
1155 | }
1156 | }
1157 | },
1158 | "errno": {
1159 | "version": "0.1.7",
1160 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
1161 | "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
1162 | "dev": true,
1163 | "requires": {
1164 | "prr": "~1.0.1"
1165 | }
1166 | },
1167 | "escape-string-regexp": {
1168 | "version": "1.0.5",
1169 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1170 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1171 | "dev": true
1172 | },
1173 | "eslint-scope": {
1174 | "version": "4.0.3",
1175 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
1176 | "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
1177 | "dev": true,
1178 | "requires": {
1179 | "esrecurse": "^4.1.0",
1180 | "estraverse": "^4.1.1"
1181 | }
1182 | },
1183 | "esrecurse": {
1184 | "version": "4.2.1",
1185 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
1186 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
1187 | "dev": true,
1188 | "requires": {
1189 | "estraverse": "^4.1.0"
1190 | }
1191 | },
1192 | "estraverse": {
1193 | "version": "4.3.0",
1194 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1195 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1196 | "dev": true
1197 | },
1198 | "events": {
1199 | "version": "3.1.0",
1200 | "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
1201 | "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
1202 | "dev": true
1203 | },
1204 | "evp_bytestokey": {
1205 | "version": "1.0.3",
1206 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
1207 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
1208 | "dev": true,
1209 | "requires": {
1210 | "md5.js": "^1.3.4",
1211 | "safe-buffer": "^5.1.1"
1212 | }
1213 | },
1214 | "expand-brackets": {
1215 | "version": "2.1.4",
1216 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
1217 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
1218 | "dev": true,
1219 | "requires": {
1220 | "debug": "^2.3.3",
1221 | "define-property": "^0.2.5",
1222 | "extend-shallow": "^2.0.1",
1223 | "posix-character-classes": "^0.1.0",
1224 | "regex-not": "^1.0.0",
1225 | "snapdragon": "^0.8.1",
1226 | "to-regex": "^3.0.1"
1227 | },
1228 | "dependencies": {
1229 | "define-property": {
1230 | "version": "0.2.5",
1231 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
1232 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
1233 | "dev": true,
1234 | "requires": {
1235 | "is-descriptor": "^0.1.0"
1236 | }
1237 | },
1238 | "extend-shallow": {
1239 | "version": "2.0.1",
1240 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1241 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1242 | "dev": true,
1243 | "requires": {
1244 | "is-extendable": "^0.1.0"
1245 | }
1246 | }
1247 | }
1248 | },
1249 | "expand-tilde": {
1250 | "version": "2.0.2",
1251 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
1252 | "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
1253 | "dev": true,
1254 | "requires": {
1255 | "homedir-polyfill": "^1.0.1"
1256 | }
1257 | },
1258 | "extend-shallow": {
1259 | "version": "3.0.2",
1260 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
1261 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
1262 | "dev": true,
1263 | "requires": {
1264 | "assign-symbols": "^1.0.0",
1265 | "is-extendable": "^1.0.1"
1266 | },
1267 | "dependencies": {
1268 | "is-extendable": {
1269 | "version": "1.0.1",
1270 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
1271 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
1272 | "dev": true,
1273 | "requires": {
1274 | "is-plain-object": "^2.0.4"
1275 | }
1276 | }
1277 | }
1278 | },
1279 | "extglob": {
1280 | "version": "2.0.4",
1281 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
1282 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
1283 | "dev": true,
1284 | "requires": {
1285 | "array-unique": "^0.3.2",
1286 | "define-property": "^1.0.0",
1287 | "expand-brackets": "^2.1.4",
1288 | "extend-shallow": "^2.0.1",
1289 | "fragment-cache": "^0.2.1",
1290 | "regex-not": "^1.0.0",
1291 | "snapdragon": "^0.8.1",
1292 | "to-regex": "^3.0.1"
1293 | },
1294 | "dependencies": {
1295 | "define-property": {
1296 | "version": "1.0.0",
1297 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
1298 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
1299 | "dev": true,
1300 | "requires": {
1301 | "is-descriptor": "^1.0.0"
1302 | }
1303 | },
1304 | "extend-shallow": {
1305 | "version": "2.0.1",
1306 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1307 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1308 | "dev": true,
1309 | "requires": {
1310 | "is-extendable": "^0.1.0"
1311 | }
1312 | },
1313 | "is-accessor-descriptor": {
1314 | "version": "1.0.0",
1315 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
1316 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
1317 | "dev": true,
1318 | "requires": {
1319 | "kind-of": "^6.0.0"
1320 | }
1321 | },
1322 | "is-data-descriptor": {
1323 | "version": "1.0.0",
1324 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
1325 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
1326 | "dev": true,
1327 | "requires": {
1328 | "kind-of": "^6.0.0"
1329 | }
1330 | },
1331 | "is-descriptor": {
1332 | "version": "1.0.2",
1333 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
1334 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
1335 | "dev": true,
1336 | "requires": {
1337 | "is-accessor-descriptor": "^1.0.0",
1338 | "is-data-descriptor": "^1.0.0",
1339 | "kind-of": "^6.0.2"
1340 | }
1341 | }
1342 | }
1343 | },
1344 | "fast-deep-equal": {
1345 | "version": "3.1.3",
1346 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1347 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1348 | "dev": true
1349 | },
1350 | "fast-json-stable-stringify": {
1351 | "version": "2.1.0",
1352 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1353 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1354 | "dev": true
1355 | },
1356 | "figgy-pudding": {
1357 | "version": "3.5.2",
1358 | "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
1359 | "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
1360 | "dev": true
1361 | },
1362 | "fill-range": {
1363 | "version": "4.0.0",
1364 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
1365 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
1366 | "dev": true,
1367 | "requires": {
1368 | "extend-shallow": "^2.0.1",
1369 | "is-number": "^3.0.0",
1370 | "repeat-string": "^1.6.1",
1371 | "to-regex-range": "^2.1.0"
1372 | },
1373 | "dependencies": {
1374 | "extend-shallow": {
1375 | "version": "2.0.1",
1376 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1377 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1378 | "dev": true,
1379 | "requires": {
1380 | "is-extendable": "^0.1.0"
1381 | }
1382 | }
1383 | }
1384 | },
1385 | "find-cache-dir": {
1386 | "version": "2.1.0",
1387 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
1388 | "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
1389 | "dev": true,
1390 | "requires": {
1391 | "commondir": "^1.0.1",
1392 | "make-dir": "^2.0.0",
1393 | "pkg-dir": "^3.0.0"
1394 | }
1395 | },
1396 | "find-up": {
1397 | "version": "3.0.0",
1398 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
1399 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
1400 | "dev": true,
1401 | "requires": {
1402 | "locate-path": "^3.0.0"
1403 | }
1404 | },
1405 | "findup-sync": {
1406 | "version": "3.0.0",
1407 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
1408 | "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
1409 | "dev": true,
1410 | "requires": {
1411 | "detect-file": "^1.0.0",
1412 | "is-glob": "^4.0.0",
1413 | "micromatch": "^3.0.4",
1414 | "resolve-dir": "^1.0.1"
1415 | }
1416 | },
1417 | "flush-write-stream": {
1418 | "version": "1.1.1",
1419 | "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
1420 | "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
1421 | "dev": true,
1422 | "requires": {
1423 | "inherits": "^2.0.3",
1424 | "readable-stream": "^2.3.6"
1425 | }
1426 | },
1427 | "for-in": {
1428 | "version": "1.0.2",
1429 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
1430 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
1431 | "dev": true
1432 | },
1433 | "fragment-cache": {
1434 | "version": "0.2.1",
1435 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
1436 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
1437 | "dev": true,
1438 | "requires": {
1439 | "map-cache": "^0.2.2"
1440 | }
1441 | },
1442 | "from2": {
1443 | "version": "2.3.0",
1444 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
1445 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
1446 | "dev": true,
1447 | "requires": {
1448 | "inherits": "^2.0.1",
1449 | "readable-stream": "^2.0.0"
1450 | }
1451 | },
1452 | "fs-write-stream-atomic": {
1453 | "version": "1.0.10",
1454 | "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
1455 | "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
1456 | "dev": true,
1457 | "requires": {
1458 | "graceful-fs": "^4.1.2",
1459 | "iferr": "^0.1.5",
1460 | "imurmurhash": "^0.1.4",
1461 | "readable-stream": "1 || 2"
1462 | }
1463 | },
1464 | "fs.realpath": {
1465 | "version": "1.0.0",
1466 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1467 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
1468 | "dev": true
1469 | },
1470 | "fsevents": {
1471 | "version": "2.1.3",
1472 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
1473 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
1474 | "dev": true,
1475 | "optional": true
1476 | },
1477 | "get-caller-file": {
1478 | "version": "2.0.5",
1479 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1480 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1481 | "dev": true
1482 | },
1483 | "get-value": {
1484 | "version": "2.0.6",
1485 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
1486 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
1487 | "dev": true
1488 | },
1489 | "glob": {
1490 | "version": "7.1.6",
1491 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1492 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
1493 | "dev": true,
1494 | "requires": {
1495 | "fs.realpath": "^1.0.0",
1496 | "inflight": "^1.0.4",
1497 | "inherits": "2",
1498 | "minimatch": "^3.0.4",
1499 | "once": "^1.3.0",
1500 | "path-is-absolute": "^1.0.0"
1501 | }
1502 | },
1503 | "glob-parent": {
1504 | "version": "5.1.1",
1505 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
1506 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
1507 | "dev": true,
1508 | "optional": true,
1509 | "requires": {
1510 | "is-glob": "^4.0.1"
1511 | }
1512 | },
1513 | "global-modules": {
1514 | "version": "2.0.0",
1515 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
1516 | "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
1517 | "dev": true,
1518 | "requires": {
1519 | "global-prefix": "^3.0.0"
1520 | },
1521 | "dependencies": {
1522 | "global-prefix": {
1523 | "version": "3.0.0",
1524 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
1525 | "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
1526 | "dev": true,
1527 | "requires": {
1528 | "ini": "^1.3.5",
1529 | "kind-of": "^6.0.2",
1530 | "which": "^1.3.1"
1531 | }
1532 | }
1533 | }
1534 | },
1535 | "global-prefix": {
1536 | "version": "1.0.2",
1537 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
1538 | "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
1539 | "dev": true,
1540 | "requires": {
1541 | "expand-tilde": "^2.0.2",
1542 | "homedir-polyfill": "^1.0.1",
1543 | "ini": "^1.3.4",
1544 | "is-windows": "^1.0.1",
1545 | "which": "^1.2.14"
1546 | }
1547 | },
1548 | "graceful-fs": {
1549 | "version": "4.2.4",
1550 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
1551 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
1552 | "dev": true
1553 | },
1554 | "has-flag": {
1555 | "version": "3.0.0",
1556 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1557 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1558 | "dev": true
1559 | },
1560 | "has-value": {
1561 | "version": "1.0.0",
1562 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
1563 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
1564 | "dev": true,
1565 | "requires": {
1566 | "get-value": "^2.0.6",
1567 | "has-values": "^1.0.0",
1568 | "isobject": "^3.0.0"
1569 | }
1570 | },
1571 | "has-values": {
1572 | "version": "1.0.0",
1573 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
1574 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
1575 | "dev": true,
1576 | "requires": {
1577 | "is-number": "^3.0.0",
1578 | "kind-of": "^4.0.0"
1579 | },
1580 | "dependencies": {
1581 | "kind-of": {
1582 | "version": "4.0.0",
1583 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
1584 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
1585 | "dev": true,
1586 | "requires": {
1587 | "is-buffer": "^1.1.5"
1588 | }
1589 | }
1590 | }
1591 | },
1592 | "hash-base": {
1593 | "version": "3.1.0",
1594 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
1595 | "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
1596 | "dev": true,
1597 | "requires": {
1598 | "inherits": "^2.0.4",
1599 | "readable-stream": "^3.6.0",
1600 | "safe-buffer": "^5.2.0"
1601 | },
1602 | "dependencies": {
1603 | "readable-stream": {
1604 | "version": "3.6.0",
1605 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1606 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1607 | "dev": true,
1608 | "requires": {
1609 | "inherits": "^2.0.3",
1610 | "string_decoder": "^1.1.1",
1611 | "util-deprecate": "^1.0.1"
1612 | }
1613 | },
1614 | "safe-buffer": {
1615 | "version": "5.2.1",
1616 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1617 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1618 | "dev": true
1619 | }
1620 | }
1621 | },
1622 | "hash.js": {
1623 | "version": "1.1.7",
1624 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
1625 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
1626 | "dev": true,
1627 | "requires": {
1628 | "inherits": "^2.0.3",
1629 | "minimalistic-assert": "^1.0.1"
1630 | }
1631 | },
1632 | "hmac-drbg": {
1633 | "version": "1.0.1",
1634 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
1635 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
1636 | "dev": true,
1637 | "requires": {
1638 | "hash.js": "^1.0.3",
1639 | "minimalistic-assert": "^1.0.0",
1640 | "minimalistic-crypto-utils": "^1.0.1"
1641 | }
1642 | },
1643 | "homedir-polyfill": {
1644 | "version": "1.0.3",
1645 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
1646 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
1647 | "dev": true,
1648 | "requires": {
1649 | "parse-passwd": "^1.0.0"
1650 | }
1651 | },
1652 | "https-browserify": {
1653 | "version": "1.0.0",
1654 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
1655 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
1656 | "dev": true
1657 | },
1658 | "ieee754": {
1659 | "version": "1.1.13",
1660 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
1661 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
1662 | "dev": true
1663 | },
1664 | "iferr": {
1665 | "version": "0.1.5",
1666 | "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
1667 | "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
1668 | "dev": true
1669 | },
1670 | "import-local": {
1671 | "version": "2.0.0",
1672 | "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
1673 | "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
1674 | "dev": true,
1675 | "requires": {
1676 | "pkg-dir": "^3.0.0",
1677 | "resolve-cwd": "^2.0.0"
1678 | }
1679 | },
1680 | "imurmurhash": {
1681 | "version": "0.1.4",
1682 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1683 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1684 | "dev": true
1685 | },
1686 | "infer-owner": {
1687 | "version": "1.0.4",
1688 | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
1689 | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
1690 | "dev": true
1691 | },
1692 | "inflight": {
1693 | "version": "1.0.6",
1694 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1695 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1696 | "dev": true,
1697 | "requires": {
1698 | "once": "^1.3.0",
1699 | "wrappy": "1"
1700 | }
1701 | },
1702 | "inherits": {
1703 | "version": "2.0.4",
1704 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1705 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1706 | "dev": true
1707 | },
1708 | "ini": {
1709 | "version": "1.3.5",
1710 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1711 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
1712 | "dev": true
1713 | },
1714 | "interpret": {
1715 | "version": "1.4.0",
1716 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
1717 | "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
1718 | "dev": true
1719 | },
1720 | "is-accessor-descriptor": {
1721 | "version": "0.1.6",
1722 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
1723 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
1724 | "dev": true,
1725 | "requires": {
1726 | "kind-of": "^3.0.2"
1727 | },
1728 | "dependencies": {
1729 | "kind-of": {
1730 | "version": "3.2.2",
1731 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1732 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1733 | "dev": true,
1734 | "requires": {
1735 | "is-buffer": "^1.1.5"
1736 | }
1737 | }
1738 | }
1739 | },
1740 | "is-binary-path": {
1741 | "version": "2.1.0",
1742 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1743 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1744 | "dev": true,
1745 | "optional": true,
1746 | "requires": {
1747 | "binary-extensions": "^2.0.0"
1748 | }
1749 | },
1750 | "is-buffer": {
1751 | "version": "1.1.6",
1752 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1753 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
1754 | "dev": true
1755 | },
1756 | "is-data-descriptor": {
1757 | "version": "0.1.4",
1758 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
1759 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
1760 | "dev": true,
1761 | "requires": {
1762 | "kind-of": "^3.0.2"
1763 | },
1764 | "dependencies": {
1765 | "kind-of": {
1766 | "version": "3.2.2",
1767 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1768 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1769 | "dev": true,
1770 | "requires": {
1771 | "is-buffer": "^1.1.5"
1772 | }
1773 | }
1774 | }
1775 | },
1776 | "is-descriptor": {
1777 | "version": "0.1.6",
1778 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
1779 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
1780 | "dev": true,
1781 | "requires": {
1782 | "is-accessor-descriptor": "^0.1.6",
1783 | "is-data-descriptor": "^0.1.4",
1784 | "kind-of": "^5.0.0"
1785 | },
1786 | "dependencies": {
1787 | "kind-of": {
1788 | "version": "5.1.0",
1789 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
1790 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
1791 | "dev": true
1792 | }
1793 | }
1794 | },
1795 | "is-extendable": {
1796 | "version": "0.1.1",
1797 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1798 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1799 | "dev": true
1800 | },
1801 | "is-extglob": {
1802 | "version": "2.1.1",
1803 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1804 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1805 | "dev": true
1806 | },
1807 | "is-fullwidth-code-point": {
1808 | "version": "2.0.0",
1809 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1810 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1811 | "dev": true
1812 | },
1813 | "is-glob": {
1814 | "version": "4.0.1",
1815 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1816 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1817 | "dev": true,
1818 | "requires": {
1819 | "is-extglob": "^2.1.1"
1820 | }
1821 | },
1822 | "is-number": {
1823 | "version": "3.0.0",
1824 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
1825 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
1826 | "dev": true,
1827 | "requires": {
1828 | "kind-of": "^3.0.2"
1829 | },
1830 | "dependencies": {
1831 | "kind-of": {
1832 | "version": "3.2.2",
1833 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1834 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1835 | "dev": true,
1836 | "requires": {
1837 | "is-buffer": "^1.1.5"
1838 | }
1839 | }
1840 | }
1841 | },
1842 | "is-plain-object": {
1843 | "version": "2.0.4",
1844 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
1845 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
1846 | "dev": true,
1847 | "requires": {
1848 | "isobject": "^3.0.1"
1849 | }
1850 | },
1851 | "is-windows": {
1852 | "version": "1.0.2",
1853 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
1854 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
1855 | "dev": true
1856 | },
1857 | "is-wsl": {
1858 | "version": "1.1.0",
1859 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
1860 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
1861 | "dev": true
1862 | },
1863 | "isarray": {
1864 | "version": "1.0.0",
1865 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1866 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1867 | "dev": true
1868 | },
1869 | "isexe": {
1870 | "version": "2.0.0",
1871 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1872 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1873 | "dev": true
1874 | },
1875 | "isobject": {
1876 | "version": "3.0.1",
1877 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
1878 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
1879 | "dev": true
1880 | },
1881 | "json-parse-better-errors": {
1882 | "version": "1.0.2",
1883 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1884 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1885 | "dev": true
1886 | },
1887 | "json-schema-traverse": {
1888 | "version": "0.4.1",
1889 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1890 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
1891 | "dev": true
1892 | },
1893 | "json5": {
1894 | "version": "1.0.1",
1895 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
1896 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
1897 | "dev": true,
1898 | "requires": {
1899 | "minimist": "^1.2.0"
1900 | }
1901 | },
1902 | "kind-of": {
1903 | "version": "6.0.3",
1904 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
1905 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
1906 | "dev": true
1907 | },
1908 | "loader-runner": {
1909 | "version": "2.4.0",
1910 | "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
1911 | "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
1912 | "dev": true
1913 | },
1914 | "loader-utils": {
1915 | "version": "1.4.0",
1916 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
1917 | "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
1918 | "dev": true,
1919 | "requires": {
1920 | "big.js": "^5.2.2",
1921 | "emojis-list": "^3.0.0",
1922 | "json5": "^1.0.1"
1923 | }
1924 | },
1925 | "locate-path": {
1926 | "version": "3.0.0",
1927 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1928 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1929 | "dev": true,
1930 | "requires": {
1931 | "p-locate": "^3.0.0",
1932 | "path-exists": "^3.0.0"
1933 | }
1934 | },
1935 | "lru-cache": {
1936 | "version": "5.1.1",
1937 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1938 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1939 | "dev": true,
1940 | "requires": {
1941 | "yallist": "^3.0.2"
1942 | }
1943 | },
1944 | "make-dir": {
1945 | "version": "2.1.0",
1946 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
1947 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
1948 | "dev": true,
1949 | "requires": {
1950 | "pify": "^4.0.1",
1951 | "semver": "^5.6.0"
1952 | }
1953 | },
1954 | "map-cache": {
1955 | "version": "0.2.2",
1956 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
1957 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
1958 | "dev": true
1959 | },
1960 | "map-visit": {
1961 | "version": "1.0.0",
1962 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
1963 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
1964 | "dev": true,
1965 | "requires": {
1966 | "object-visit": "^1.0.0"
1967 | }
1968 | },
1969 | "md5.js": {
1970 | "version": "1.3.5",
1971 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
1972 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
1973 | "dev": true,
1974 | "requires": {
1975 | "hash-base": "^3.0.0",
1976 | "inherits": "^2.0.1",
1977 | "safe-buffer": "^5.1.2"
1978 | }
1979 | },
1980 | "memory-fs": {
1981 | "version": "0.4.1",
1982 | "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
1983 | "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
1984 | "dev": true,
1985 | "requires": {
1986 | "errno": "^0.1.3",
1987 | "readable-stream": "^2.0.1"
1988 | }
1989 | },
1990 | "micromatch": {
1991 | "version": "3.1.10",
1992 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
1993 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
1994 | "dev": true,
1995 | "requires": {
1996 | "arr-diff": "^4.0.0",
1997 | "array-unique": "^0.3.2",
1998 | "braces": "^2.3.1",
1999 | "define-property": "^2.0.2",
2000 | "extend-shallow": "^3.0.2",
2001 | "extglob": "^2.0.4",
2002 | "fragment-cache": "^0.2.1",
2003 | "kind-of": "^6.0.2",
2004 | "nanomatch": "^1.2.9",
2005 | "object.pick": "^1.3.0",
2006 | "regex-not": "^1.0.0",
2007 | "snapdragon": "^0.8.1",
2008 | "to-regex": "^3.0.2"
2009 | }
2010 | },
2011 | "miller-rabin": {
2012 | "version": "4.0.1",
2013 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
2014 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
2015 | "dev": true,
2016 | "requires": {
2017 | "bn.js": "^4.0.0",
2018 | "brorand": "^1.0.1"
2019 | },
2020 | "dependencies": {
2021 | "bn.js": {
2022 | "version": "4.11.9",
2023 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2024 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2025 | "dev": true
2026 | }
2027 | }
2028 | },
2029 | "minimalistic-assert": {
2030 | "version": "1.0.1",
2031 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
2032 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
2033 | "dev": true
2034 | },
2035 | "minimalistic-crypto-utils": {
2036 | "version": "1.0.1",
2037 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
2038 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
2039 | "dev": true
2040 | },
2041 | "minimatch": {
2042 | "version": "3.0.4",
2043 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2044 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2045 | "dev": true,
2046 | "requires": {
2047 | "brace-expansion": "^1.1.7"
2048 | }
2049 | },
2050 | "minimist": {
2051 | "version": "1.2.5",
2052 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
2053 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
2054 | "dev": true
2055 | },
2056 | "mississippi": {
2057 | "version": "3.0.0",
2058 | "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
2059 | "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
2060 | "dev": true,
2061 | "requires": {
2062 | "concat-stream": "^1.5.0",
2063 | "duplexify": "^3.4.2",
2064 | "end-of-stream": "^1.1.0",
2065 | "flush-write-stream": "^1.0.0",
2066 | "from2": "^2.1.0",
2067 | "parallel-transform": "^1.1.0",
2068 | "pump": "^3.0.0",
2069 | "pumpify": "^1.3.3",
2070 | "stream-each": "^1.1.0",
2071 | "through2": "^2.0.0"
2072 | }
2073 | },
2074 | "mixin-deep": {
2075 | "version": "1.3.2",
2076 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
2077 | "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
2078 | "dev": true,
2079 | "requires": {
2080 | "for-in": "^1.0.2",
2081 | "is-extendable": "^1.0.1"
2082 | },
2083 | "dependencies": {
2084 | "is-extendable": {
2085 | "version": "1.0.1",
2086 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
2087 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
2088 | "dev": true,
2089 | "requires": {
2090 | "is-plain-object": "^2.0.4"
2091 | }
2092 | }
2093 | }
2094 | },
2095 | "mkdirp": {
2096 | "version": "0.5.5",
2097 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
2098 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
2099 | "dev": true,
2100 | "requires": {
2101 | "minimist": "^1.2.5"
2102 | }
2103 | },
2104 | "move-concurrently": {
2105 | "version": "1.0.1",
2106 | "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
2107 | "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
2108 | "dev": true,
2109 | "requires": {
2110 | "aproba": "^1.1.1",
2111 | "copy-concurrently": "^1.0.0",
2112 | "fs-write-stream-atomic": "^1.0.8",
2113 | "mkdirp": "^0.5.1",
2114 | "rimraf": "^2.5.4",
2115 | "run-queue": "^1.0.3"
2116 | }
2117 | },
2118 | "ms": {
2119 | "version": "2.0.0",
2120 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2121 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2122 | "dev": true
2123 | },
2124 | "nanomatch": {
2125 | "version": "1.2.13",
2126 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
2127 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
2128 | "dev": true,
2129 | "requires": {
2130 | "arr-diff": "^4.0.0",
2131 | "array-unique": "^0.3.2",
2132 | "define-property": "^2.0.2",
2133 | "extend-shallow": "^3.0.2",
2134 | "fragment-cache": "^0.2.1",
2135 | "is-windows": "^1.0.2",
2136 | "kind-of": "^6.0.2",
2137 | "object.pick": "^1.3.0",
2138 | "regex-not": "^1.0.0",
2139 | "snapdragon": "^0.8.1",
2140 | "to-regex": "^3.0.1"
2141 | }
2142 | },
2143 | "neo-async": {
2144 | "version": "2.6.2",
2145 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
2146 | "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
2147 | "dev": true
2148 | },
2149 | "nice-try": {
2150 | "version": "1.0.5",
2151 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
2152 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
2153 | "dev": true
2154 | },
2155 | "node-libs-browser": {
2156 | "version": "2.2.1",
2157 | "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
2158 | "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
2159 | "dev": true,
2160 | "requires": {
2161 | "assert": "^1.1.1",
2162 | "browserify-zlib": "^0.2.0",
2163 | "buffer": "^4.3.0",
2164 | "console-browserify": "^1.1.0",
2165 | "constants-browserify": "^1.0.0",
2166 | "crypto-browserify": "^3.11.0",
2167 | "domain-browser": "^1.1.1",
2168 | "events": "^3.0.0",
2169 | "https-browserify": "^1.0.0",
2170 | "os-browserify": "^0.3.0",
2171 | "path-browserify": "0.0.1",
2172 | "process": "^0.11.10",
2173 | "punycode": "^1.2.4",
2174 | "querystring-es3": "^0.2.0",
2175 | "readable-stream": "^2.3.3",
2176 | "stream-browserify": "^2.0.1",
2177 | "stream-http": "^2.7.2",
2178 | "string_decoder": "^1.0.0",
2179 | "timers-browserify": "^2.0.4",
2180 | "tty-browserify": "0.0.0",
2181 | "url": "^0.11.0",
2182 | "util": "^0.11.0",
2183 | "vm-browserify": "^1.0.1"
2184 | },
2185 | "dependencies": {
2186 | "punycode": {
2187 | "version": "1.4.1",
2188 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
2189 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
2190 | "dev": true
2191 | }
2192 | }
2193 | },
2194 | "normalize-path": {
2195 | "version": "3.0.0",
2196 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2197 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2198 | "dev": true,
2199 | "optional": true
2200 | },
2201 | "object-assign": {
2202 | "version": "4.1.1",
2203 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2204 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
2205 | "dev": true
2206 | },
2207 | "object-copy": {
2208 | "version": "0.1.0",
2209 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
2210 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
2211 | "dev": true,
2212 | "requires": {
2213 | "copy-descriptor": "^0.1.0",
2214 | "define-property": "^0.2.5",
2215 | "kind-of": "^3.0.3"
2216 | },
2217 | "dependencies": {
2218 | "define-property": {
2219 | "version": "0.2.5",
2220 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2221 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2222 | "dev": true,
2223 | "requires": {
2224 | "is-descriptor": "^0.1.0"
2225 | }
2226 | },
2227 | "kind-of": {
2228 | "version": "3.2.2",
2229 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2230 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2231 | "dev": true,
2232 | "requires": {
2233 | "is-buffer": "^1.1.5"
2234 | }
2235 | }
2236 | }
2237 | },
2238 | "object-visit": {
2239 | "version": "1.0.1",
2240 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
2241 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
2242 | "dev": true,
2243 | "requires": {
2244 | "isobject": "^3.0.0"
2245 | }
2246 | },
2247 | "object.pick": {
2248 | "version": "1.3.0",
2249 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
2250 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
2251 | "dev": true,
2252 | "requires": {
2253 | "isobject": "^3.0.1"
2254 | }
2255 | },
2256 | "once": {
2257 | "version": "1.4.0",
2258 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2259 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2260 | "dev": true,
2261 | "requires": {
2262 | "wrappy": "1"
2263 | }
2264 | },
2265 | "os-browserify": {
2266 | "version": "0.3.0",
2267 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
2268 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
2269 | "dev": true
2270 | },
2271 | "p-limit": {
2272 | "version": "2.3.0",
2273 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
2274 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
2275 | "dev": true,
2276 | "requires": {
2277 | "p-try": "^2.0.0"
2278 | }
2279 | },
2280 | "p-locate": {
2281 | "version": "3.0.0",
2282 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
2283 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
2284 | "dev": true,
2285 | "requires": {
2286 | "p-limit": "^2.0.0"
2287 | }
2288 | },
2289 | "p-try": {
2290 | "version": "2.2.0",
2291 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
2292 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
2293 | "dev": true
2294 | },
2295 | "pako": {
2296 | "version": "1.0.11",
2297 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
2298 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
2299 | "dev": true
2300 | },
2301 | "parallel-transform": {
2302 | "version": "1.2.0",
2303 | "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
2304 | "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
2305 | "dev": true,
2306 | "requires": {
2307 | "cyclist": "^1.0.1",
2308 | "inherits": "^2.0.3",
2309 | "readable-stream": "^2.1.5"
2310 | }
2311 | },
2312 | "parse-asn1": {
2313 | "version": "5.1.5",
2314 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
2315 | "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
2316 | "dev": true,
2317 | "requires": {
2318 | "asn1.js": "^4.0.0",
2319 | "browserify-aes": "^1.0.0",
2320 | "create-hash": "^1.1.0",
2321 | "evp_bytestokey": "^1.0.0",
2322 | "pbkdf2": "^3.0.3",
2323 | "safe-buffer": "^5.1.1"
2324 | }
2325 | },
2326 | "parse-passwd": {
2327 | "version": "1.0.0",
2328 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
2329 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
2330 | "dev": true
2331 | },
2332 | "pascalcase": {
2333 | "version": "0.1.1",
2334 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
2335 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
2336 | "dev": true
2337 | },
2338 | "path-browserify": {
2339 | "version": "0.0.1",
2340 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
2341 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
2342 | "dev": true
2343 | },
2344 | "path-dirname": {
2345 | "version": "1.0.2",
2346 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
2347 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
2348 | "dev": true,
2349 | "optional": true
2350 | },
2351 | "path-exists": {
2352 | "version": "3.0.0",
2353 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2354 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2355 | "dev": true
2356 | },
2357 | "path-is-absolute": {
2358 | "version": "1.0.1",
2359 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2360 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2361 | "dev": true
2362 | },
2363 | "path-key": {
2364 | "version": "2.0.1",
2365 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
2366 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
2367 | "dev": true
2368 | },
2369 | "pbkdf2": {
2370 | "version": "3.1.1",
2371 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
2372 | "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
2373 | "dev": true,
2374 | "requires": {
2375 | "create-hash": "^1.1.2",
2376 | "create-hmac": "^1.1.4",
2377 | "ripemd160": "^2.0.1",
2378 | "safe-buffer": "^5.0.1",
2379 | "sha.js": "^2.4.8"
2380 | }
2381 | },
2382 | "picomatch": {
2383 | "version": "2.2.2",
2384 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
2385 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
2386 | "dev": true,
2387 | "optional": true
2388 | },
2389 | "pify": {
2390 | "version": "4.0.1",
2391 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
2392 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
2393 | "dev": true
2394 | },
2395 | "pkg-dir": {
2396 | "version": "3.0.0",
2397 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
2398 | "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
2399 | "dev": true,
2400 | "requires": {
2401 | "find-up": "^3.0.0"
2402 | }
2403 | },
2404 | "posix-character-classes": {
2405 | "version": "0.1.1",
2406 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
2407 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
2408 | "dev": true
2409 | },
2410 | "process": {
2411 | "version": "0.11.10",
2412 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
2413 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
2414 | "dev": true
2415 | },
2416 | "process-nextick-args": {
2417 | "version": "2.0.1",
2418 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2419 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
2420 | "dev": true
2421 | },
2422 | "promise-inflight": {
2423 | "version": "1.0.1",
2424 | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
2425 | "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
2426 | "dev": true
2427 | },
2428 | "prr": {
2429 | "version": "1.0.1",
2430 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
2431 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
2432 | "dev": true
2433 | },
2434 | "public-encrypt": {
2435 | "version": "4.0.3",
2436 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
2437 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
2438 | "dev": true,
2439 | "requires": {
2440 | "bn.js": "^4.1.0",
2441 | "browserify-rsa": "^4.0.0",
2442 | "create-hash": "^1.1.0",
2443 | "parse-asn1": "^5.0.0",
2444 | "randombytes": "^2.0.1",
2445 | "safe-buffer": "^5.1.2"
2446 | },
2447 | "dependencies": {
2448 | "bn.js": {
2449 | "version": "4.11.9",
2450 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
2451 | "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
2452 | "dev": true
2453 | }
2454 | }
2455 | },
2456 | "pump": {
2457 | "version": "3.0.0",
2458 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2459 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2460 | "dev": true,
2461 | "requires": {
2462 | "end-of-stream": "^1.1.0",
2463 | "once": "^1.3.1"
2464 | }
2465 | },
2466 | "pumpify": {
2467 | "version": "1.5.1",
2468 | "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
2469 | "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
2470 | "dev": true,
2471 | "requires": {
2472 | "duplexify": "^3.6.0",
2473 | "inherits": "^2.0.3",
2474 | "pump": "^2.0.0"
2475 | },
2476 | "dependencies": {
2477 | "pump": {
2478 | "version": "2.0.1",
2479 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
2480 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
2481 | "dev": true,
2482 | "requires": {
2483 | "end-of-stream": "^1.1.0",
2484 | "once": "^1.3.1"
2485 | }
2486 | }
2487 | }
2488 | },
2489 | "punycode": {
2490 | "version": "2.1.1",
2491 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2492 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2493 | "dev": true
2494 | },
2495 | "querystring": {
2496 | "version": "0.2.0",
2497 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
2498 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
2499 | "dev": true
2500 | },
2501 | "querystring-es3": {
2502 | "version": "0.2.1",
2503 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
2504 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
2505 | "dev": true
2506 | },
2507 | "randombytes": {
2508 | "version": "2.1.0",
2509 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
2510 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
2511 | "dev": true,
2512 | "requires": {
2513 | "safe-buffer": "^5.1.0"
2514 | }
2515 | },
2516 | "randomfill": {
2517 | "version": "1.0.4",
2518 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
2519 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
2520 | "dev": true,
2521 | "requires": {
2522 | "randombytes": "^2.0.5",
2523 | "safe-buffer": "^5.1.0"
2524 | }
2525 | },
2526 | "readable-stream": {
2527 | "version": "2.3.7",
2528 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
2529 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
2530 | "dev": true,
2531 | "requires": {
2532 | "core-util-is": "~1.0.0",
2533 | "inherits": "~2.0.3",
2534 | "isarray": "~1.0.0",
2535 | "process-nextick-args": "~2.0.0",
2536 | "safe-buffer": "~5.1.1",
2537 | "string_decoder": "~1.1.1",
2538 | "util-deprecate": "~1.0.1"
2539 | }
2540 | },
2541 | "readdirp": {
2542 | "version": "3.4.0",
2543 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
2544 | "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
2545 | "dev": true,
2546 | "optional": true,
2547 | "requires": {
2548 | "picomatch": "^2.2.1"
2549 | }
2550 | },
2551 | "regex-not": {
2552 | "version": "1.0.2",
2553 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
2554 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
2555 | "dev": true,
2556 | "requires": {
2557 | "extend-shallow": "^3.0.2",
2558 | "safe-regex": "^1.1.0"
2559 | }
2560 | },
2561 | "remove-trailing-separator": {
2562 | "version": "1.1.0",
2563 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
2564 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
2565 | "dev": true,
2566 | "optional": true
2567 | },
2568 | "repeat-element": {
2569 | "version": "1.1.3",
2570 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
2571 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
2572 | "dev": true
2573 | },
2574 | "repeat-string": {
2575 | "version": "1.6.1",
2576 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2577 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
2578 | "dev": true
2579 | },
2580 | "require-directory": {
2581 | "version": "2.1.1",
2582 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2583 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
2584 | "dev": true
2585 | },
2586 | "require-main-filename": {
2587 | "version": "2.0.0",
2588 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
2589 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
2590 | "dev": true
2591 | },
2592 | "resolve-cwd": {
2593 | "version": "2.0.0",
2594 | "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
2595 | "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
2596 | "dev": true,
2597 | "requires": {
2598 | "resolve-from": "^3.0.0"
2599 | }
2600 | },
2601 | "resolve-dir": {
2602 | "version": "1.0.1",
2603 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
2604 | "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
2605 | "dev": true,
2606 | "requires": {
2607 | "expand-tilde": "^2.0.0",
2608 | "global-modules": "^1.0.0"
2609 | },
2610 | "dependencies": {
2611 | "global-modules": {
2612 | "version": "1.0.0",
2613 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
2614 | "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
2615 | "dev": true,
2616 | "requires": {
2617 | "global-prefix": "^1.0.1",
2618 | "is-windows": "^1.0.1",
2619 | "resolve-dir": "^1.0.0"
2620 | }
2621 | }
2622 | }
2623 | },
2624 | "resolve-from": {
2625 | "version": "3.0.0",
2626 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
2627 | "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
2628 | "dev": true
2629 | },
2630 | "resolve-url": {
2631 | "version": "0.2.1",
2632 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
2633 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
2634 | "dev": true
2635 | },
2636 | "ret": {
2637 | "version": "0.1.15",
2638 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
2639 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
2640 | "dev": true
2641 | },
2642 | "rimraf": {
2643 | "version": "2.7.1",
2644 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
2645 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
2646 | "dev": true,
2647 | "requires": {
2648 | "glob": "^7.1.3"
2649 | }
2650 | },
2651 | "ripemd160": {
2652 | "version": "2.0.2",
2653 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
2654 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
2655 | "dev": true,
2656 | "requires": {
2657 | "hash-base": "^3.0.0",
2658 | "inherits": "^2.0.1"
2659 | }
2660 | },
2661 | "run-queue": {
2662 | "version": "1.0.3",
2663 | "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
2664 | "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
2665 | "dev": true,
2666 | "requires": {
2667 | "aproba": "^1.1.1"
2668 | }
2669 | },
2670 | "safe-buffer": {
2671 | "version": "5.1.2",
2672 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2673 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2674 | "dev": true
2675 | },
2676 | "safe-regex": {
2677 | "version": "1.1.0",
2678 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
2679 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
2680 | "dev": true,
2681 | "requires": {
2682 | "ret": "~0.1.10"
2683 | }
2684 | },
2685 | "schema-utils": {
2686 | "version": "1.0.0",
2687 | "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
2688 | "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
2689 | "dev": true,
2690 | "requires": {
2691 | "ajv": "^6.1.0",
2692 | "ajv-errors": "^1.0.0",
2693 | "ajv-keywords": "^3.1.0"
2694 | }
2695 | },
2696 | "semver": {
2697 | "version": "5.7.1",
2698 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
2699 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
2700 | "dev": true
2701 | },
2702 | "serialize-javascript": {
2703 | "version": "3.1.0",
2704 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
2705 | "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
2706 | "dev": true,
2707 | "requires": {
2708 | "randombytes": "^2.1.0"
2709 | }
2710 | },
2711 | "set-blocking": {
2712 | "version": "2.0.0",
2713 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
2714 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
2715 | "dev": true
2716 | },
2717 | "set-value": {
2718 | "version": "2.0.1",
2719 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
2720 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
2721 | "dev": true,
2722 | "requires": {
2723 | "extend-shallow": "^2.0.1",
2724 | "is-extendable": "^0.1.1",
2725 | "is-plain-object": "^2.0.3",
2726 | "split-string": "^3.0.1"
2727 | },
2728 | "dependencies": {
2729 | "extend-shallow": {
2730 | "version": "2.0.1",
2731 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2732 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
2733 | "dev": true,
2734 | "requires": {
2735 | "is-extendable": "^0.1.0"
2736 | }
2737 | }
2738 | }
2739 | },
2740 | "setimmediate": {
2741 | "version": "1.0.5",
2742 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
2743 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
2744 | "dev": true
2745 | },
2746 | "sha.js": {
2747 | "version": "2.4.11",
2748 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
2749 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
2750 | "dev": true,
2751 | "requires": {
2752 | "inherits": "^2.0.1",
2753 | "safe-buffer": "^5.0.1"
2754 | }
2755 | },
2756 | "shebang-command": {
2757 | "version": "1.2.0",
2758 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
2759 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
2760 | "dev": true,
2761 | "requires": {
2762 | "shebang-regex": "^1.0.0"
2763 | }
2764 | },
2765 | "shebang-regex": {
2766 | "version": "1.0.0",
2767 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
2768 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
2769 | "dev": true
2770 | },
2771 | "snapdragon": {
2772 | "version": "0.8.2",
2773 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
2774 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
2775 | "dev": true,
2776 | "requires": {
2777 | "base": "^0.11.1",
2778 | "debug": "^2.2.0",
2779 | "define-property": "^0.2.5",
2780 | "extend-shallow": "^2.0.1",
2781 | "map-cache": "^0.2.2",
2782 | "source-map": "^0.5.6",
2783 | "source-map-resolve": "^0.5.0",
2784 | "use": "^3.1.0"
2785 | },
2786 | "dependencies": {
2787 | "define-property": {
2788 | "version": "0.2.5",
2789 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2790 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2791 | "dev": true,
2792 | "requires": {
2793 | "is-descriptor": "^0.1.0"
2794 | }
2795 | },
2796 | "extend-shallow": {
2797 | "version": "2.0.1",
2798 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2799 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
2800 | "dev": true,
2801 | "requires": {
2802 | "is-extendable": "^0.1.0"
2803 | }
2804 | }
2805 | }
2806 | },
2807 | "snapdragon-node": {
2808 | "version": "2.1.1",
2809 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
2810 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
2811 | "dev": true,
2812 | "requires": {
2813 | "define-property": "^1.0.0",
2814 | "isobject": "^3.0.0",
2815 | "snapdragon-util": "^3.0.1"
2816 | },
2817 | "dependencies": {
2818 | "define-property": {
2819 | "version": "1.0.0",
2820 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
2821 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
2822 | "dev": true,
2823 | "requires": {
2824 | "is-descriptor": "^1.0.0"
2825 | }
2826 | },
2827 | "is-accessor-descriptor": {
2828 | "version": "1.0.0",
2829 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
2830 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
2831 | "dev": true,
2832 | "requires": {
2833 | "kind-of": "^6.0.0"
2834 | }
2835 | },
2836 | "is-data-descriptor": {
2837 | "version": "1.0.0",
2838 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
2839 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
2840 | "dev": true,
2841 | "requires": {
2842 | "kind-of": "^6.0.0"
2843 | }
2844 | },
2845 | "is-descriptor": {
2846 | "version": "1.0.2",
2847 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
2848 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
2849 | "dev": true,
2850 | "requires": {
2851 | "is-accessor-descriptor": "^1.0.0",
2852 | "is-data-descriptor": "^1.0.0",
2853 | "kind-of": "^6.0.2"
2854 | }
2855 | }
2856 | }
2857 | },
2858 | "snapdragon-util": {
2859 | "version": "3.0.1",
2860 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
2861 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
2862 | "dev": true,
2863 | "requires": {
2864 | "kind-of": "^3.2.0"
2865 | },
2866 | "dependencies": {
2867 | "kind-of": {
2868 | "version": "3.2.2",
2869 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
2870 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
2871 | "dev": true,
2872 | "requires": {
2873 | "is-buffer": "^1.1.5"
2874 | }
2875 | }
2876 | }
2877 | },
2878 | "source-list-map": {
2879 | "version": "2.0.1",
2880 | "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
2881 | "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
2882 | "dev": true
2883 | },
2884 | "source-map": {
2885 | "version": "0.5.7",
2886 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
2887 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
2888 | "dev": true
2889 | },
2890 | "source-map-resolve": {
2891 | "version": "0.5.3",
2892 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
2893 | "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
2894 | "dev": true,
2895 | "requires": {
2896 | "atob": "^2.1.2",
2897 | "decode-uri-component": "^0.2.0",
2898 | "resolve-url": "^0.2.1",
2899 | "source-map-url": "^0.4.0",
2900 | "urix": "^0.1.0"
2901 | }
2902 | },
2903 | "source-map-support": {
2904 | "version": "0.5.19",
2905 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
2906 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
2907 | "dev": true,
2908 | "requires": {
2909 | "buffer-from": "^1.0.0",
2910 | "source-map": "^0.6.0"
2911 | },
2912 | "dependencies": {
2913 | "source-map": {
2914 | "version": "0.6.1",
2915 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2916 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2917 | "dev": true
2918 | }
2919 | }
2920 | },
2921 | "source-map-url": {
2922 | "version": "0.4.0",
2923 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
2924 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
2925 | "dev": true
2926 | },
2927 | "split-string": {
2928 | "version": "3.1.0",
2929 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
2930 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
2931 | "dev": true,
2932 | "requires": {
2933 | "extend-shallow": "^3.0.0"
2934 | }
2935 | },
2936 | "ssri": {
2937 | "version": "6.0.1",
2938 | "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
2939 | "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
2940 | "dev": true,
2941 | "requires": {
2942 | "figgy-pudding": "^3.5.1"
2943 | }
2944 | },
2945 | "static-extend": {
2946 | "version": "0.1.2",
2947 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
2948 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
2949 | "dev": true,
2950 | "requires": {
2951 | "define-property": "^0.2.5",
2952 | "object-copy": "^0.1.0"
2953 | },
2954 | "dependencies": {
2955 | "define-property": {
2956 | "version": "0.2.5",
2957 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2958 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2959 | "dev": true,
2960 | "requires": {
2961 | "is-descriptor": "^0.1.0"
2962 | }
2963 | }
2964 | }
2965 | },
2966 | "stream-browserify": {
2967 | "version": "2.0.2",
2968 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
2969 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
2970 | "dev": true,
2971 | "requires": {
2972 | "inherits": "~2.0.1",
2973 | "readable-stream": "^2.0.2"
2974 | }
2975 | },
2976 | "stream-each": {
2977 | "version": "1.2.3",
2978 | "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
2979 | "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
2980 | "dev": true,
2981 | "requires": {
2982 | "end-of-stream": "^1.1.0",
2983 | "stream-shift": "^1.0.0"
2984 | }
2985 | },
2986 | "stream-http": {
2987 | "version": "2.8.3",
2988 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
2989 | "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
2990 | "dev": true,
2991 | "requires": {
2992 | "builtin-status-codes": "^3.0.0",
2993 | "inherits": "^2.0.1",
2994 | "readable-stream": "^2.3.6",
2995 | "to-arraybuffer": "^1.0.0",
2996 | "xtend": "^4.0.0"
2997 | }
2998 | },
2999 | "stream-shift": {
3000 | "version": "1.0.1",
3001 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
3002 | "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
3003 | "dev": true
3004 | },
3005 | "string-width": {
3006 | "version": "3.1.0",
3007 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
3008 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
3009 | "dev": true,
3010 | "requires": {
3011 | "emoji-regex": "^7.0.1",
3012 | "is-fullwidth-code-point": "^2.0.0",
3013 | "strip-ansi": "^5.1.0"
3014 | }
3015 | },
3016 | "string_decoder": {
3017 | "version": "1.1.1",
3018 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
3019 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
3020 | "dev": true,
3021 | "requires": {
3022 | "safe-buffer": "~5.1.0"
3023 | }
3024 | },
3025 | "strip-ansi": {
3026 | "version": "5.2.0",
3027 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
3028 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
3029 | "dev": true,
3030 | "requires": {
3031 | "ansi-regex": "^4.1.0"
3032 | }
3033 | },
3034 | "supports-color": {
3035 | "version": "6.1.0",
3036 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
3037 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
3038 | "dev": true,
3039 | "requires": {
3040 | "has-flag": "^3.0.0"
3041 | }
3042 | },
3043 | "tapable": {
3044 | "version": "1.1.3",
3045 | "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
3046 | "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
3047 | "dev": true
3048 | },
3049 | "terser": {
3050 | "version": "4.8.0",
3051 | "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
3052 | "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
3053 | "dev": true,
3054 | "requires": {
3055 | "commander": "^2.20.0",
3056 | "source-map": "~0.6.1",
3057 | "source-map-support": "~0.5.12"
3058 | },
3059 | "dependencies": {
3060 | "source-map": {
3061 | "version": "0.6.1",
3062 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3063 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3064 | "dev": true
3065 | }
3066 | }
3067 | },
3068 | "terser-webpack-plugin": {
3069 | "version": "1.4.4",
3070 | "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz",
3071 | "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==",
3072 | "dev": true,
3073 | "requires": {
3074 | "cacache": "^12.0.2",
3075 | "find-cache-dir": "^2.1.0",
3076 | "is-wsl": "^1.1.0",
3077 | "schema-utils": "^1.0.0",
3078 | "serialize-javascript": "^3.1.0",
3079 | "source-map": "^0.6.1",
3080 | "terser": "^4.1.2",
3081 | "webpack-sources": "^1.4.0",
3082 | "worker-farm": "^1.7.0"
3083 | },
3084 | "dependencies": {
3085 | "source-map": {
3086 | "version": "0.6.1",
3087 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3088 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3089 | "dev": true
3090 | }
3091 | }
3092 | },
3093 | "through2": {
3094 | "version": "2.0.5",
3095 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
3096 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
3097 | "dev": true,
3098 | "requires": {
3099 | "readable-stream": "~2.3.6",
3100 | "xtend": "~4.0.1"
3101 | }
3102 | },
3103 | "timers-browserify": {
3104 | "version": "2.0.11",
3105 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
3106 | "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
3107 | "dev": true,
3108 | "requires": {
3109 | "setimmediate": "^1.0.4"
3110 | }
3111 | },
3112 | "to-arraybuffer": {
3113 | "version": "1.0.1",
3114 | "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
3115 | "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
3116 | "dev": true
3117 | },
3118 | "to-object-path": {
3119 | "version": "0.3.0",
3120 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
3121 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
3122 | "dev": true,
3123 | "requires": {
3124 | "kind-of": "^3.0.2"
3125 | },
3126 | "dependencies": {
3127 | "kind-of": {
3128 | "version": "3.2.2",
3129 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
3130 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
3131 | "dev": true,
3132 | "requires": {
3133 | "is-buffer": "^1.1.5"
3134 | }
3135 | }
3136 | }
3137 | },
3138 | "to-regex": {
3139 | "version": "3.0.2",
3140 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
3141 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
3142 | "dev": true,
3143 | "requires": {
3144 | "define-property": "^2.0.2",
3145 | "extend-shallow": "^3.0.2",
3146 | "regex-not": "^1.0.2",
3147 | "safe-regex": "^1.1.0"
3148 | }
3149 | },
3150 | "to-regex-range": {
3151 | "version": "2.1.1",
3152 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
3153 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
3154 | "dev": true,
3155 | "requires": {
3156 | "is-number": "^3.0.0",
3157 | "repeat-string": "^1.6.1"
3158 | }
3159 | },
3160 | "tslib": {
3161 | "version": "1.13.0",
3162 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
3163 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
3164 | "dev": true
3165 | },
3166 | "tty-browserify": {
3167 | "version": "0.0.0",
3168 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
3169 | "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
3170 | "dev": true
3171 | },
3172 | "typedarray": {
3173 | "version": "0.0.6",
3174 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
3175 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
3176 | "dev": true
3177 | },
3178 | "union-value": {
3179 | "version": "1.0.1",
3180 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
3181 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
3182 | "dev": true,
3183 | "requires": {
3184 | "arr-union": "^3.1.0",
3185 | "get-value": "^2.0.6",
3186 | "is-extendable": "^0.1.1",
3187 | "set-value": "^2.0.1"
3188 | }
3189 | },
3190 | "unique-filename": {
3191 | "version": "1.1.1",
3192 | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
3193 | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
3194 | "dev": true,
3195 | "requires": {
3196 | "unique-slug": "^2.0.0"
3197 | }
3198 | },
3199 | "unique-slug": {
3200 | "version": "2.0.2",
3201 | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
3202 | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
3203 | "dev": true,
3204 | "requires": {
3205 | "imurmurhash": "^0.1.4"
3206 | }
3207 | },
3208 | "unset-value": {
3209 | "version": "1.0.0",
3210 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
3211 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
3212 | "dev": true,
3213 | "requires": {
3214 | "has-value": "^0.3.1",
3215 | "isobject": "^3.0.0"
3216 | },
3217 | "dependencies": {
3218 | "has-value": {
3219 | "version": "0.3.1",
3220 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
3221 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
3222 | "dev": true,
3223 | "requires": {
3224 | "get-value": "^2.0.3",
3225 | "has-values": "^0.1.4",
3226 | "isobject": "^2.0.0"
3227 | },
3228 | "dependencies": {
3229 | "isobject": {
3230 | "version": "2.1.0",
3231 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
3232 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
3233 | "dev": true,
3234 | "requires": {
3235 | "isarray": "1.0.0"
3236 | }
3237 | }
3238 | }
3239 | },
3240 | "has-values": {
3241 | "version": "0.1.4",
3242 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
3243 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
3244 | "dev": true
3245 | }
3246 | }
3247 | },
3248 | "upath": {
3249 | "version": "1.2.0",
3250 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
3251 | "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
3252 | "dev": true,
3253 | "optional": true
3254 | },
3255 | "uri-js": {
3256 | "version": "4.2.2",
3257 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
3258 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
3259 | "dev": true,
3260 | "requires": {
3261 | "punycode": "^2.1.0"
3262 | }
3263 | },
3264 | "urix": {
3265 | "version": "0.1.0",
3266 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
3267 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
3268 | "dev": true
3269 | },
3270 | "url": {
3271 | "version": "0.11.0",
3272 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
3273 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
3274 | "dev": true,
3275 | "requires": {
3276 | "punycode": "1.3.2",
3277 | "querystring": "0.2.0"
3278 | },
3279 | "dependencies": {
3280 | "punycode": {
3281 | "version": "1.3.2",
3282 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
3283 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
3284 | "dev": true
3285 | }
3286 | }
3287 | },
3288 | "use": {
3289 | "version": "3.1.1",
3290 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
3291 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
3292 | "dev": true
3293 | },
3294 | "util": {
3295 | "version": "0.11.1",
3296 | "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
3297 | "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
3298 | "dev": true,
3299 | "requires": {
3300 | "inherits": "2.0.3"
3301 | },
3302 | "dependencies": {
3303 | "inherits": {
3304 | "version": "2.0.3",
3305 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
3306 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
3307 | "dev": true
3308 | }
3309 | }
3310 | },
3311 | "util-deprecate": {
3312 | "version": "1.0.2",
3313 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3314 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
3315 | "dev": true
3316 | },
3317 | "v8-compile-cache": {
3318 | "version": "2.1.1",
3319 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
3320 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
3321 | "dev": true
3322 | },
3323 | "vm-browserify": {
3324 | "version": "1.1.2",
3325 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
3326 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
3327 | "dev": true
3328 | },
3329 | "watchpack": {
3330 | "version": "1.7.2",
3331 | "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
3332 | "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
3333 | "dev": true,
3334 | "requires": {
3335 | "chokidar": "^3.4.0",
3336 | "graceful-fs": "^4.1.2",
3337 | "neo-async": "^2.5.0",
3338 | "watchpack-chokidar2": "^2.0.0"
3339 | }
3340 | },
3341 | "watchpack-chokidar2": {
3342 | "version": "2.0.0",
3343 | "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
3344 | "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
3345 | "dev": true,
3346 | "optional": true,
3347 | "requires": {
3348 | "chokidar": "^2.1.8"
3349 | },
3350 | "dependencies": {
3351 | "anymatch": {
3352 | "version": "2.0.0",
3353 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
3354 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
3355 | "dev": true,
3356 | "optional": true,
3357 | "requires": {
3358 | "micromatch": "^3.1.4",
3359 | "normalize-path": "^2.1.1"
3360 | },
3361 | "dependencies": {
3362 | "normalize-path": {
3363 | "version": "2.1.1",
3364 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
3365 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
3366 | "dev": true,
3367 | "optional": true,
3368 | "requires": {
3369 | "remove-trailing-separator": "^1.0.1"
3370 | }
3371 | }
3372 | }
3373 | },
3374 | "binary-extensions": {
3375 | "version": "1.13.1",
3376 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
3377 | "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
3378 | "dev": true,
3379 | "optional": true
3380 | },
3381 | "chokidar": {
3382 | "version": "2.1.8",
3383 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
3384 | "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
3385 | "dev": true,
3386 | "optional": true,
3387 | "requires": {
3388 | "anymatch": "^2.0.0",
3389 | "async-each": "^1.0.1",
3390 | "braces": "^2.3.2",
3391 | "fsevents": "^1.2.7",
3392 | "glob-parent": "^3.1.0",
3393 | "inherits": "^2.0.3",
3394 | "is-binary-path": "^1.0.0",
3395 | "is-glob": "^4.0.0",
3396 | "normalize-path": "^3.0.0",
3397 | "path-is-absolute": "^1.0.0",
3398 | "readdirp": "^2.2.1",
3399 | "upath": "^1.1.1"
3400 | }
3401 | },
3402 | "fsevents": {
3403 | "version": "1.2.13",
3404 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
3405 | "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
3406 | "dev": true,
3407 | "optional": true
3408 | },
3409 | "glob-parent": {
3410 | "version": "3.1.0",
3411 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
3412 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
3413 | "dev": true,
3414 | "optional": true,
3415 | "requires": {
3416 | "is-glob": "^3.1.0",
3417 | "path-dirname": "^1.0.0"
3418 | },
3419 | "dependencies": {
3420 | "is-glob": {
3421 | "version": "3.1.0",
3422 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
3423 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
3424 | "dev": true,
3425 | "optional": true,
3426 | "requires": {
3427 | "is-extglob": "^2.1.0"
3428 | }
3429 | }
3430 | }
3431 | },
3432 | "is-binary-path": {
3433 | "version": "1.0.1",
3434 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
3435 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
3436 | "dev": true,
3437 | "optional": true,
3438 | "requires": {
3439 | "binary-extensions": "^1.0.0"
3440 | }
3441 | },
3442 | "readdirp": {
3443 | "version": "2.2.1",
3444 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
3445 | "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
3446 | "dev": true,
3447 | "optional": true,
3448 | "requires": {
3449 | "graceful-fs": "^4.1.11",
3450 | "micromatch": "^3.1.10",
3451 | "readable-stream": "^2.0.2"
3452 | }
3453 | }
3454 | }
3455 | },
3456 | "webpack": {
3457 | "version": "4.43.0",
3458 | "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
3459 | "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
3460 | "dev": true,
3461 | "requires": {
3462 | "@webassemblyjs/ast": "1.9.0",
3463 | "@webassemblyjs/helper-module-context": "1.9.0",
3464 | "@webassemblyjs/wasm-edit": "1.9.0",
3465 | "@webassemblyjs/wasm-parser": "1.9.0",
3466 | "acorn": "^6.4.1",
3467 | "ajv": "^6.10.2",
3468 | "ajv-keywords": "^3.4.1",
3469 | "chrome-trace-event": "^1.0.2",
3470 | "enhanced-resolve": "^4.1.0",
3471 | "eslint-scope": "^4.0.3",
3472 | "json-parse-better-errors": "^1.0.2",
3473 | "loader-runner": "^2.4.0",
3474 | "loader-utils": "^1.2.3",
3475 | "memory-fs": "^0.4.1",
3476 | "micromatch": "^3.1.10",
3477 | "mkdirp": "^0.5.3",
3478 | "neo-async": "^2.6.1",
3479 | "node-libs-browser": "^2.2.1",
3480 | "schema-utils": "^1.0.0",
3481 | "tapable": "^1.1.3",
3482 | "terser-webpack-plugin": "^1.4.3",
3483 | "watchpack": "^1.6.1",
3484 | "webpack-sources": "^1.4.1"
3485 | }
3486 | },
3487 | "webpack-cli": {
3488 | "version": "3.3.12",
3489 | "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
3490 | "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
3491 | "dev": true,
3492 | "requires": {
3493 | "chalk": "^2.4.2",
3494 | "cross-spawn": "^6.0.5",
3495 | "enhanced-resolve": "^4.1.1",
3496 | "findup-sync": "^3.0.0",
3497 | "global-modules": "^2.0.0",
3498 | "import-local": "^2.0.0",
3499 | "interpret": "^1.4.0",
3500 | "loader-utils": "^1.4.0",
3501 | "supports-color": "^6.1.0",
3502 | "v8-compile-cache": "^2.1.1",
3503 | "yargs": "^13.3.2"
3504 | }
3505 | },
3506 | "webpack-sources": {
3507 | "version": "1.4.3",
3508 | "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
3509 | "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
3510 | "dev": true,
3511 | "requires": {
3512 | "source-list-map": "^2.0.0",
3513 | "source-map": "~0.6.1"
3514 | },
3515 | "dependencies": {
3516 | "source-map": {
3517 | "version": "0.6.1",
3518 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3519 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3520 | "dev": true
3521 | }
3522 | }
3523 | },
3524 | "which": {
3525 | "version": "1.3.1",
3526 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
3527 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
3528 | "dev": true,
3529 | "requires": {
3530 | "isexe": "^2.0.0"
3531 | }
3532 | },
3533 | "which-module": {
3534 | "version": "2.0.0",
3535 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
3536 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
3537 | "dev": true
3538 | },
3539 | "worker-farm": {
3540 | "version": "1.7.0",
3541 | "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
3542 | "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
3543 | "dev": true,
3544 | "requires": {
3545 | "errno": "~0.1.7"
3546 | }
3547 | },
3548 | "wrap-ansi": {
3549 | "version": "5.1.0",
3550 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
3551 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
3552 | "dev": true,
3553 | "requires": {
3554 | "ansi-styles": "^3.2.0",
3555 | "string-width": "^3.0.0",
3556 | "strip-ansi": "^5.0.0"
3557 | }
3558 | },
3559 | "wrappy": {
3560 | "version": "1.0.2",
3561 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3562 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
3563 | "dev": true
3564 | },
3565 | "xtend": {
3566 | "version": "4.0.2",
3567 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
3568 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
3569 | "dev": true
3570 | },
3571 | "y18n": {
3572 | "version": "4.0.0",
3573 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
3574 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
3575 | "dev": true
3576 | },
3577 | "yallist": {
3578 | "version": "3.1.1",
3579 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
3580 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
3581 | "dev": true
3582 | },
3583 | "yargs": {
3584 | "version": "13.3.2",
3585 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
3586 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
3587 | "dev": true,
3588 | "requires": {
3589 | "cliui": "^5.0.0",
3590 | "find-up": "^3.0.0",
3591 | "get-caller-file": "^2.0.1",
3592 | "require-directory": "^2.1.1",
3593 | "require-main-filename": "^2.0.0",
3594 | "set-blocking": "^2.0.0",
3595 | "string-width": "^3.0.0",
3596 | "which-module": "^2.0.0",
3597 | "y18n": "^4.0.0",
3598 | "yargs-parser": "^13.1.2"
3599 | }
3600 | },
3601 | "yargs-parser": {
3602 | "version": "13.1.2",
3603 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
3604 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
3605 | "dev": true,
3606 | "requires": {
3607 | "camelcase": "^5.0.0",
3608 | "decamelize": "^1.2.0"
3609 | }
3610 | }
3611 | }
3612 | }
3613 |
--------------------------------------------------------------------------------
/package/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "_from": "reactmonitorfiber",
3 | "_id": "reactmonitorfiber@1.0.11",
4 | "_inBundle": false,
5 | "_integrity": "sha512-17ru2xLe/osiMB5Dfk2kBCX/1XMPjJ/YBb8B7eBzKlGhe7pevJ82CQgJwHgl/HsKWFJcbuLtiEibQdKTY4pGTQ==",
6 | "_location": "/reactmonitorfiber",
7 | "_phantomChildren": {},
8 | "_requested": {
9 | "type": "tag",
10 | "registry": true,
11 | "raw": "reactmonitorfiber",
12 | "name": "reactmonitorfiber",
13 | "escapedName": "reactmonitorfiber",
14 | "rawSpec": "",
15 | "saveSpec": null,
16 | "fetchSpec": "latest"
17 | },
18 | "_requiredBy": [
19 | "#DEV:/",
20 | "#USER"
21 | ],
22 | "_resolved": "https://registry.npmjs.org/reactmonitorfiber/-/reactmonitorfiber-1.0.11.tgz",
23 | "_shasum": "ef17b17b90312e8ae1a006307905317118d88f9f",
24 | "_spec": "reactmonitorfiber",
25 | "_where": "/Users/usr1/edp/codesmith/react_p2",
26 | "author": "",
27 | "bugs": {
28 | "url": "https://github.com/oslabs-beta/ReactMonitor/issues"
29 | },
30 | "bundleDependencies": false,
31 | "deprecated": false,
32 | "description": "Visualize React's component tree performance and optimization suggestions",
33 | "homepage": "https://github.com/oslabs-beta/ReactMonitor#readme",
34 | "license": "ISC",
35 | "main": "createTree.js",
36 | "name": "reactmonitorfiber",
37 | "repository": {
38 | "type": "git",
39 | "url": "git+https://github.com/oslabs-beta/ReactMonitor.git"
40 | },
41 | "version": "1.0.11"
42 | }
43 |
--------------------------------------------------------------------------------
/package/sendContentScript.js:
--------------------------------------------------------------------------------
1 | module.exports = function(treeCreator, prevTree, currentTree)
2 | {
3 | const treeGraph = treeCreator(currentTree);
4 | window.postMessage({ action: 'npmToContent', payload: treeGraph });
5 | /*
6 | // do this on first load
7 | if (currentTree === undefined){
8 | const treeGraph = treeCreator(prevTree);
9 | window.postMessage({ action: 'npmToContent', payload: treeGraph });
10 | // if any changes between current DOM and Virtual DOM
11 | }else if (prevTree !== currentTree) {
12 | const treeGraph = treeCreator(currentTree);
13 | window.postMessage({ action: 'npmToContent', payload: treeGraph });
14 | }
15 | */
16 | }
17 |
--------------------------------------------------------------------------------
/package/treeGraphFactory.js:
--------------------------------------------------------------------------------
1 | const { Node } = require('./newNode');
2 |
3 | let i = 1;
4 | // helper function - that accepts the node - Host Root
5 | module.exports = function (fiber){
6 |
7 | const helper = (fiber, treeGraph) => {
8 | // 2 different types of leaves observed in different
9 | // react builds:
10 | // 1 - a leaf react elements is also a leaf in fibertree
11 | // 2 - given a leaf react element, the fiber tree has
12 | // has 1 additional child bellow it
13 | // and it's type is null.
14 | // given that obervation, null_node() detects both cases:
15 | function null_node(node)
16 | {
17 | return ( (node == null) || (
18 | (node.child == null) &&
19 | (node.type == null)
20 | ) );
21 | }
22 | // check if fiber.child !== null - traverse
23 | /* if child: create node and enter into child */
24 | if (fiber.child) {
25 | // push the new Node to the treeGraph.children array
26 | // the parent will the tree graph we are currently working with
27 | // (do the type check for elements that are functions or html elements)
28 | let newGraphNode = treeGraph;
29 | // typeof child.type == object <==> child is null
30 | // condition: fiber child && fiber.ch.ch exists && type != null
31 | // <==> fiber.ch.ch is a leaf (?)
32 | if ( !null_node(fiber.child) )
33 | {
34 | newGraphNode = new Node(
35 | fiber.child.key
36 | || (fiber.child.type ? fiber.child.type.name : fiber.child.type)
37 | || fiber.child.type,
38 | treeGraph, [], fiber.child
39 | );
40 | treeGraph.children.push(newGraphNode);
41 | // recursively invoke the helper on child
42 | helper(fiber.child, newGraphNode);
43 | }
44 | }
45 | // check if fiber.sibling !== null - traverse
46 | if (fiber.sibling)
47 | {
48 | let newGraphNode = treeGraph;
49 | if ( !null_node(fiber.sibling) ) {
50 | // create new GraphNode based on it with parent being a treeGraph.parent
51 | newGraphNode = new Node(
52 | fiber.sibling.key
53 | || (fiber.sibling.type ? fiber.sibling.type.name : fiber.sibling.type)
54 | || fiber.sibling.type,
55 | treeGraph.parent, [], fiber.sibling
56 | );
57 | // added - the if condition
58 | // push the node on to the treeGraph.parent.children array
59 | /*if (treeGraph.parent)*/ treeGraph.parent.children.push(newGraphNode);
60 | helper(fiber.sibling, newGraphNode);
61 | }
62 | }
63 | // name of the element can be found in child.type.name
64 | };
65 | // create a treeGraph
66 | const treeGraph = new Node(fiber.type.name, null, [], fiber); // Represent the top most Element (like App);
67 | // invoke the helper function
68 | helper(fiber, treeGraph); // fiber is an App Fiber
69 | console.log("treeGraphFactory =", treeGraph);
70 | return treeGraph;
71 | }
72 |
--------------------------------------------------------------------------------
/package/treeGraphFactory.test.js:
--------------------------------------------------------------------------------
1 | const fiber = require('../mockData/fiber');
2 | const treeGraphFactory = require('./treeGraphFactory');
3 |
4 |
5 | describe('test treeGraphFactory', () => {
6 |
7 |
8 | it('test treeGraph was created properly', () => {
9 |
10 | const treeGraph = treeGraphFactory(fiber);
11 | expect(treeGraph.name).toBe('h1');
12 | expect(treeGraph.value).toBe(9);
13 | expect(treeGraph.tag).toBe(5);
14 | expect(treeGraph.stats.effectTag).toBe(1);
15 | expect(treeGraph.stats.renderStart).toBe('400.00');
16 | expect(treeGraph.stats.renderTotal).toBe('9.00');
17 | expect(treeGraph.children[0].name).toBe('div');
18 | expect(treeGraph.children[0].value).toBe(8);
19 | expect(treeGraph.children[0].tag).toBe(1);
20 | expect(treeGraph.children[0].stats.effectTag).toBe(2)
21 | });
22 |
23 |
24 | });
25 |
--------------------------------------------------------------------------------
/src/app/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import { render } from 'react-dom';
3 | import MainContainer from './components/mainContainer';
4 | import './style.scss';
5 |
6 | let port;
7 |
8 | export default class App extends Component {
9 | constructor(props) {
10 | super(props);
11 | this.state = {
12 | name: '',
13 | children: [],
14 | stats: '',
15 | value: 0,
16 | oldState:[]
17 | };
18 | }
19 |
20 | componentDidMount() {
21 | if (!port) port = chrome.runtime.connect();
22 |
23 | port.onMessage.addListener((message) => {
24 | let array=this.state.oldState
25 | array.push(message.payload.payload)
26 | this.setState({
27 | value: message.payload.payload.value,
28 | name: message.payload.payload.name,
29 | children: message.payload.payload.children,
30 | stats: message.payload.payload.stats,
31 | oldstate:array
32 | });
33 | });
34 | }
35 |
36 | render() {
37 |
38 | return (
39 |
40 |
47 |
48 | );
49 | }
50 | }
51 |
52 | render( , document.getElementById('app'));
53 |
--------------------------------------------------------------------------------
/src/app/components/d3tree.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import * as d3 from 'd3';
3 | import TimeTravel from './timeTravel';
4 | import {deleteHtmlElement} from './helperFunctions'
5 | import {componenetChangedState} from './helperFunctions'
6 |
7 | let root;
8 |
9 |
10 | export default class D3Tree extends Component {
11 | constructor(props) {
12 | super(props);
13 | this.state={
14 | htmlElement:false,
15 | timeTravel:[],
16 | index:0,
17 | logofTime:[],
18 | playing:false
19 | }
20 | this.treeRef = React.createRef();
21 | this.maked3Tree = this.maked3Tree.bind(this);
22 | this.removed3Tree = this.removed3Tree.bind(this);
23 | this.removeHtml=this.removeHtml.bind(this)
24 | this.handelPlay=this.handelPlay.bind(this)
25 | this.width = 500
26 | }
27 |
28 | componentDidMount() {
29 | const { name, children, stats } = this.props;
30 | const hierarchy = { name, children, stats };
31 | root = JSON.parse(JSON.stringify(hierarchy));
32 | this.maked3Tree(root);
33 | }
34 |
35 | componentDidUpdate() {
36 | console.log('last one',this.props.oldState[this.state.index])
37 | if(this.state.playing){
38 | var { name, children, stats } = this.props.oldState[this.state.index];
39 |
40 | }
41 | if(!this.state.playing) var{ name, children, stats } = this.props.oldState[this.props.oldState.length-1];
42 |
43 | const hierarchy = { name, children, stats };
44 | root = JSON.parse(JSON.stringify(hierarchy));
45 | this.maked3Tree(root);
46 | if(this.state.timeTravel.length !==this.props.oldState.length){
47 | let tempTimeTravel =[...this.props.oldState]
48 | let tempLogofTime=[...this.state.logofTime]
49 | tempLogofTime.push([this.props.oldState[this.props.oldState.length-1].name,this.props.oldState[this.props.oldState.length-1].value])
50 | this.setState({timeTravel:tempTimeTravel,logofTime:tempLogofTime})
51 | }
52 |
53 | }
54 |
55 | componentWillUnmount() {
56 | this.removed3Tree();
57 | }
58 | removeHtml(){
59 | const state=this.state
60 | if(this.state.htmlElement) this.setState({...state,htmlElement:false})
61 | if(!this.state.htmlElement) this.setState({...state,htmlElement:true})
62 | }
63 | handelPlay(value){
64 | let temp=this.state.index
65 | if(!value){
66 | temp+=1
67 | this.setState({playing:true})
68 | this.setState({index:temp})
69 | }else if(value==='stop'){
70 | return
71 | }else{
72 | this.setState({index:0})
73 | }
74 | }
75 |
76 | removed3Tree() {
77 | const { current } = this.treeRef;
78 | document.querySelectorAll('.tooltip').forEach(el => el.remove());
79 | while (current.hasChildNodes()) {
80 | current.removeChild(current.lastChild);
81 | }
82 | }
83 |
84 | tree(data) {
85 | if(this.state.htmlElement){
86 | data = deleteHtmlElement(data)
87 | const root = d3.hierarchy(data);
88 | root.dx = 10;
89 | root.dy = this.width / (root.height + 1);
90 | return d3.tree().nodeSize([root.dx, root.dy])(root);
91 | }else{
92 | const root = d3.hierarchy(data);
93 | root.dx = 10;
94 | root.dy = this.width / (root.height + 1);
95 | return d3.tree().nodeSize([root.dx, root.dy])(root);
96 | }
97 | };
98 |
99 | maked3Tree(data) {
100 | this.removed3Tree();
101 | const root = this.tree(data);
102 |
103 | const margin = {
104 | top: 20,
105 | right: 20,
106 | bottom: 20,
107 | left: 20,
108 | }
109 |
110 | let x0 = 0;
111 | let x1 = -x0;
112 | root.each((d) => {
113 | if (d.x > x1) x1 = d.x;
114 | if (d.x < x0) x0 = d.x;
115 | });
116 |
117 | const svg = d3
118 | .select(this.treeRef.current)
119 | .append('svg')
120 | .attr('viewBox', [
121 | -margin.left,
122 | -margin.top,
123 | this.width + margin.left + margin.right,
124 | x1 - x0 + root.dx * 2 + margin.top + margin.bottom,
125 | ]);
126 |
127 | const g = svg
128 | .append('g')
129 | .attr('font-family', 'sans-serif')
130 | .attr('font-size', 10)
131 | .attr('transform', `translate(${root.dy / 3},${root.dx - x0})`);
132 |
133 | const link = g
134 | .append('g')
135 | .attr('fill', 'none')
136 | .attr('stroke', '#D4CDF4')
137 | .attr('stroke-opacity', 0.4)
138 | .attr('stroke-width', 1.5)
139 | .selectAll('path')
140 | .data(root.links())
141 | .join('path')
142 | .attr(
143 | 'd',
144 | d3
145 | .linkHorizontal()
146 | .x((d) => d.y)
147 | .y((d) => d.x)
148 | );
149 |
150 | const node = g
151 | .append('g')
152 | .attr('stroke-linejoin', 'round')
153 | .attr('stroke-width', 3)
154 | .selectAll('g')
155 | .data(root.descendants())
156 | .join('g')
157 | .attr('transform', (d) => `translate(${d.y},${d.x})`);
158 |
159 | node
160 | .append('circle')
161 | .attr('stroke', (d) => (d.children ? '#555' : '#999'))
162 | .attr('stroke-width', (d) => 1)
163 | .attr('fill', function (d) {
164 | if (d.data.nodeSvgShape) {
165 | return d.data.nodeSvgShape.shapeProps.fill
166 | }
167 | return 'gray'
168 | })
169 | .attr('r', 5)
170 |
171 | // tooltip MouseOver
172 | .on('mouseover', function (d) {
173 |
174 | d3.select(this)
175 | .transition(100)
176 | .duration(50)
177 | .attr('r', 8);
178 |
179 | tooltipDiv.transition()
180 | .duration(50)
181 | .style('opacity', 0.9);
182 |
183 | tooltipDiv.html(`${d.data.name}
184 |
185 | State : ${d.data.stats.state}
186 | Props : ${d.data.stats.props}
187 | Tag : ${d.data.tag}
188 | EffectTag : ${d.data.stats.effectTag}
189 | Render Time : ${d.data.stats.renderTotal}ms
190 | `, this)
191 | .style('left', (d3.event.pageX) + 'px')
192 | .style('top', (d3.event.pageY) + 'px');
193 | })
194 | // eslint-disable-next-line no-unused-vars
195 | .on('mouseout', function (d) {
196 | d3.select(this)
197 | .transition()
198 | .duration(300)
199 | .attr('r', 5);
200 |
201 | tooltipDiv.transition()
202 | .duration(400)
203 | .style('opacity', 0);
204 | })
205 |
206 | node
207 | .append('text')
208 | .attr('dy', '0.31em')
209 | .attr('x', (d) => (d.children ? -6 : 6))
210 | .attr('text-anchor', (d) => (d.children ? 'end' : 'start'))
211 | .text((d) => d.data.name)
212 | .clone(true)
213 | .lower()
214 | .attr('stroke', 'white');
215 |
216 | // define tooltip
217 | const tooltipDiv = d3.select('body').append('div')
218 | .attr('class', 'tooltip')
219 | .style('opacity', 0);
220 | }
221 |
222 | render() {
223 | return (
224 |
225 |
226 |
Hide HTML
227 |
Render Times Tree Graph
228 |
229 |
230 |
234 |
235 | )
236 | }
237 | }
--------------------------------------------------------------------------------
/src/app/components/flameChart.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import * as d3 from 'd3';
3 | import { flamegraph, defaultFlamegraphTooltip } from 'd3-flame-graph';
4 |
5 |
6 | export default class FlameChart extends Component {
7 | constructor(props) {
8 | super(props);
9 | this.flamegraphRef = React.createRef();
10 | this.createFlameGraph = this.createFlameGraph.bind(this);
11 | }
12 |
13 | componentDidMount() {
14 | const { name, children, value } = this.props;
15 | document.querySelectorAll('.d3-flame-graph-tip').forEach(el => el.remove());
16 | this.createFlameGraph({ name, children, value })
17 | }
18 |
19 | componentDidUpdate() {
20 | const { name, children, value } = this.props;
21 | document.querySelectorAll('.d3-flame-graph-tip').forEach(el => el.remove());
22 | this.createFlameGraph({ name, children, value })
23 | }
24 |
25 | createFlameGraph(data) {
26 | let pageWidth = document.getElementById('flame-container').clientWidth;
27 | const margin = { right: 30, left: 30 }
28 |
29 | let chart = flamegraph()
30 | .width(pageWidth - margin.right - margin.left)
31 | .cellHeight(25)
32 | .transitionDuration(400)
33 | .minFrameSize(5)
34 | .transitionEase(d3.easeCubic)
35 | .sort(true)
36 | .differential(false)
37 | .elided(false)
38 | .selfValue(false)
39 |
40 | let tip = defaultFlamegraphTooltip()
41 | .html(function (d) { return "Name: " + d.data.name + " Value: " + d.data.value + "ms"; });
42 | chart.tooltip(tip);
43 |
44 | d3.select(this.flamegraphRef.current)
45 | .datum(data)
46 | .call(chart)
47 |
48 |
49 | if (document.querySelectorAll('.partition').length > 1) {
50 | document.querySelectorAll('.partition')[1].remove();
51 | }
52 | }
53 |
54 | render() {
55 | return (
56 |
57 |
Render Times Flame Graph
58 |
59 |
60 | )
61 | }
62 | }
--------------------------------------------------------------------------------
/src/app/components/helperFunctions.js:
--------------------------------------------------------------------------------
1 | const deleteHtmlElement=(obj)=>{
2 | const helper=(object)=>{
3 | if(!object.children) return
4 | for(let i=0;i acc.concat(val), [])
15 | i=i-1
16 | }else {
17 | // delete element
18 | delete object.children[i]
19 | i=0
20 | }
21 | }
22 | }
23 | return object
24 | }
25 | if(obj[0]){
26 | return helper (obj[0])
27 | }else{
28 | return helper(obj)
29 | }
30 | }
31 |
32 | const componenetChangedState = (data) => {
33 |
34 | if(!data) return
35 |
36 | const noChanges=[]
37 | const helper = (obj) =>{
38 | // console.log('obj',obj)
39 | if(!obj.children.length) {
40 | if(obj.nodeSvgShape.shapeProps.fill==='lightgreen'){
41 | obj.state=obj.stats.state
42 | obj.props=obj.stats.props
43 | delete obj.nodeSvgShape
44 | delete obj.tag
45 | delete obj.stats
46 | }else{
47 | noChanges.push({
48 | name:obj.name,
49 | state:obj.stats.state,
50 | props:obj.stats.props,
51 | time:obj.value
52 | })
53 |
54 | }
55 | }else{
56 | if(obj.name==='ButtonPanel') console.log('target',obj)
57 | let run =true
58 | if(run){
59 | if(obj.nodeSvgShape.shapeProps.fill==='lightgreen'){
60 | obj.state=obj.stats.state
61 | obj.props=obj.stats.props
62 | obj.time=obj.stats.value
63 | delete obj.nodeSvgShape
64 | delete obj.tag
65 | delete obj.stats
66 | run =false
67 | }else{
68 | noChanges.push({
69 | name:obj.name,
70 | state:obj.stats.state,
71 | props:obj.stats.props,
72 | time:obj.stats.value,
73 | dark:true
74 | })
75 | obj.state=obj.stats.state
76 | obj.props=obj.stats.props
77 | obj.time=obj.stats.value
78 | obj.dark=true
79 | delete obj.nodeSvgShape
80 | delete obj.tag
81 | delete obj.stats
82 | run = false
83 | }
84 | }
85 | for (let i=0;i
14 |
15 |
16 |
Tree
17 | Chart
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | );
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/app/components/playButton.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 |
3 | export default class playButton extends Component {
4 | constructor(props) {
5 | super(props)
6 |
7 | this.state = {
8 | percentage: 0,
9 | play:false
10 | }
11 |
12 | this.nextStep = this.nextStep.bind(this)
13 | }
14 |
15 | nextStep() {
16 | if(this.state.percentage === 100) return
17 |
18 | let timer = setInterval(() => {
19 | if(this.state.percentage===0){
20 | this.setState(prevState => ({ percentage: prevState.percentage + (100/this.props.length) }))
21 | }
22 | if(this.state.percentage >= 100) {
23 | this.props.handelPlay('stop')
24 | clearInterval(timer)
25 | }else{
26 | this.props.handelPlay()
27 | this.setState(prevState => ({ percentage: prevState.percentage + (100/this.props.length) }))
28 | }
29 | }, 1000);
30 | }
31 |
32 | render() {
33 | return (
34 |
35 |
36 | play
37 |
38 |
52 |
53 | {
54 | console.log('reset')
55 | this.props.handelPlay('reset')
56 | this.setState({ percentage: 0 })
57 | }}>Reset
58 |
59 |
60 | )
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/app/components/record.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 |
3 | export default class record extends Component {
4 | constructor(props){
5 | super(props)
6 | }
7 | render() {
8 | if(this.props.logofTime){
9 | return (
10 |
11 | {this.props.logofTime.map((elem,i) =>{
12 | if(this.props.index===i){
13 | return Name:{elem[0]} Time:{elem[1]}
14 | }else{
15 | return Name:{elem[0]} Time:{elem[1]}
16 | }
17 | })}
18 |
19 | )
20 | }else{
21 | return (
22 | Will Nothing
23 | )
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/app/components/stateChange.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import {deleteHtmlElement} from './helperFunctions'
3 | import {componenetChangedState} from './helperFunctions'
4 |
5 | export default class stateChange extends Component {
6 | constructor(props){
7 | super(props)
8 | this.state = {
9 | selectedcomponents: {},
10 | graph:[]
11 | }
12 | }
13 | cleanTree(){
14 | const {index} = this.props
15 | let current=this.props.currentState[index]
16 | let temp= JSON.parse(JSON.stringify(current? [current]:this.props.currentState))
17 | temp = componenetChangedState(deleteHtmlElement(temp))
18 | return temp
19 | }
20 | render() {
21 | const {selectedcomponents} = this.state;
22 | let current=this.cleanTree()
23 | if(this.props.currentState[this.props.index]){
24 | return (
25 |
26 |
27 |
Tree
28 | this.setState({selectedcomponents})}
31 | selectedcomponents={selectedcomponents}
32 | isFirst={true}
33 | />
34 |
35 |
36 | )
37 | }else{
38 | return (
39 | Nothing changed
40 | )
41 | }
42 | }
43 | }
44 |
45 | const ComponentsList2 = ({ components, selectedcomponents, onChange, isFirst, debug }) => {
46 |
47 | const handleCheckboxClicked = (selectedcomponentId) => {
48 |
49 | if(selectedcomponents[selectedcomponentId]){
50 | delete selectedcomponents[selectedcomponentId];
51 | } else {
52 | selectedcomponents[selectedcomponentId] = {}
53 |
54 | }
55 |
56 | onChange(selectedcomponents)
57 | }
58 |
59 | const handleSubcomponentsListChange = (componentId, subSelections) => {
60 | selectedcomponents[componentId] = subSelections;
61 | onChange(selectedcomponents);
62 | }
63 | console.log('comp',components)
64 | let counter=0
65 | return (
66 |
67 | {components.map(component => (
68 |
69 | {handleCheckboxClicked(component.name)}}
74 | />
75 | {(component.children.length > 0 && selectedcomponents[component.name]) &&
76 | handleSubcomponentsListChange(component.name, subSelections)}
81 | />
82 | }
83 |
84 | )
85 | )}
86 |
87 | )
88 | }
89 |
90 | class Checkbox2 extends Component {
91 | constructor(props){
92 | super(props)
93 | this.state={
94 | didmount:true
95 | }
96 | }
97 | componentDidMount(){
98 | // if(this.state.didmount){
99 | this.props.onChange(!this.props.selected)
100 | // this.setState({didmount:false})
101 | // }
102 | }
103 | render(){
104 | console.log('state',this.props.state)
105 | console.log('props',this.props.state)
106 | return (
107 |
108 |
this.props.onChange(!this.props.selected)}>{this.props.label}
109 |
State:{this.props.state}
110 |
Props:{this.props.props}
111 |
112 | )
113 | }
114 | }
--------------------------------------------------------------------------------
/src/app/components/timeTravel.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react'
2 | import Playbutton from './playButton'
3 | import Record from './record'
4 | import Statechange from './stateChange'
5 | import {deleteHtmlElement} from './helperFunctions'
6 |
7 | export default class timeTravel extends Component {
8 | constructor(props) {
9 | super(props);
10 | }
11 | render() {
12 | return (
13 |
18 | )
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | React Monitor
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/app/style.scss:
--------------------------------------------------------------------------------
1 | $primary-color: #7A679B;
2 | $secondary-color: #685155;
3 | $tertiary-color: #8B85C1;
4 | $light-color: #D4CDF4;
5 | $other-color: #815E5B;
6 |
7 |
8 | body {
9 | margin: 0;
10 | background: $tertiary-color;
11 | }
12 |
13 | .navbar {
14 | padding: 15px;
15 | background: $primary-color;
16 | display: flex;
17 | justify-content: space-evenly;
18 | -webkit-box-shadow: 0px 4px 2px 0px $secondary-color;
19 | -moz-box-shadow: 0px 4px 2px 0px $secondary-color;
20 | box-shadow: 0px 4px 2px 0px $secondary-color;
21 | li {
22 | list-style: none;
23 | font-size: large;
24 | a {
25 | text-decoration: none;
26 | color: $light-color;
27 | font-weight: 900;
28 | &:hover {
29 | color: white;
30 | }
31 | }
32 | }
33 | }
34 |
35 | .tooltip {
36 | position: absolute;
37 | max-width: 250px;
38 | padding: 5px;
39 | background: $primary-color;
40 | border-radius: 5px;
41 | pointer-events: none;
42 | box-shadow: 3px 3px 3px $secondary-color;
43 | h3 {
44 | text-align: center;
45 | color: $light-color;
46 | }
47 | hr {
48 | border: none;
49 | border-top: 1px solid $light-color;
50 | }
51 | }
52 |
53 | .container {
54 | display: flex;
55 | flex-direction: column;
56 | align-items: center;
57 | margin: 20px 30px;
58 | padding: 0px 0px 20px 0;
59 | border: 1px solid $light-color;
60 | background: $secondary-color;
61 | border-radius: 10px;
62 | -webkit-box-shadow: 4px 6px 4px 0px $secondary-color;
63 | -moz-box-shadow: 4px 6px 4px 0px $secondary-color;
64 | box-shadow: 4px 6px 4px 0px $secondary-color;
65 | }
66 |
67 | .graphDiv {
68 | margin: 0 20px;
69 | padding: 0 20px;
70 | width: 100%;
71 | height: 100%;
72 | }
73 |
74 | .d3-flame-graph-tip {
75 | padding: 8px;
76 | border-radius: 5px;
77 | -webkit-box-shadow: 4px 4px 2px 0px $secondary-color;
78 | -moz-box-shadow: 4px 4px 2px 0px $secondary-color;
79 | box-shadow: 4px 4px 2px 0px $secondary-color;
80 | background-color: $primary-color;
81 | font-size: large;
82 | color: whitesmoke;
83 | }
84 |
85 | .partition {
86 | padding: 0 40px 20px 40px;
87 | }
88 |
89 |
90 | .graph-title {
91 | margin: 10px 0;
92 | text-align: center;
93 | color: $light-color;
94 | font-size: x-large;
95 | }
96 |
97 | foreignObject {
98 | box-sizing: border-box;
99 | border: solid 1px $primary-color;
100 | }
101 |
--------------------------------------------------------------------------------
/src/assets/readmeDemo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitsmith1010/ReactMonitor/c0f21d04e7d91d66c65ed16e897898f19992e35a/src/assets/readmeDemo.gif
--------------------------------------------------------------------------------
/src/assets/rm-icon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitsmith1010/ReactMonitor/c0f21d04e7d91d66c65ed16e897898f19992e35a/src/assets/rm-icon-128.png
--------------------------------------------------------------------------------
/src/assets/rm-icon-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitsmith1010/ReactMonitor/c0f21d04e7d91d66c65ed16e897898f19992e35a/src/assets/rm-icon-48.png
--------------------------------------------------------------------------------
/src/assets/rm-icon16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitsmith1010/ReactMonitor/c0f21d04e7d91d66c65ed16e897898f19992e35a/src/assets/rm-icon16.png
--------------------------------------------------------------------------------
/src/extension/backgroundScript.js:
--------------------------------------------------------------------------------
1 | // define a variable to store tree data structure from content script;
2 | let treeGraph;
3 | // connected port will be saved here
4 | let currentPort;
5 |
6 | // listen for connection from the chrome dev tool;
7 | chrome.runtime.onConnect.addListener((port) => {
8 | // save the port
9 | currentPort = port;
10 | console.log('Currentport: ', port);
11 | // send message to Chrome Dev Tool on initial connect
12 | port.postMessage({
13 | payload: treeGraph,
14 | });
15 | });
16 |
17 | // listen for message from contentScript
18 | chrome.runtime.onMessage.addListener((msg) => {
19 | // reassign the treeGraph
20 | treeGraph = msg.payload;
21 | console.log('TreeGraph within the onmessage.addListener: ', treeGraph);
22 | // once the message is accepted from content script, send it to dev tool
23 | if (currentPort) {
24 | currentPort.postMessage({
25 | payload: treeGraph,
26 | });
27 | }
28 | });
29 |
30 | chrome.runtime.onInstalled.addListener(() => {
31 | chrome.contextMenus.create({
32 | id: 'reactmonitor',
33 | title: 'Reactmonitor',
34 | contexts: ['page', 'selection', 'image', 'link'],
35 | });
36 | })
37 |
38 |
39 |
40 | chrome.contextMenus.onClicked.addListener(({ menuItemId }) => {
41 | const options = {
42 | type: 'panel',
43 | width: 960,
44 | height: window.screen.availHeight,
45 | url: chrome.runtime.getURL('index.html'),
46 | };
47 | if (menuItemId === 'reactmonitor') chrome.windows.create(options);
48 | });
49 |
--------------------------------------------------------------------------------
/src/extension/contentScript.js:
--------------------------------------------------------------------------------
1 | // listen for message from npm package
2 | window.addEventListener("message", (msg) => {
3 | // filter the incoming msg.data
4 | if (msg.data.action === "npmToContent") {
5 | // send the message to the chrome - backgroundScript
6 | chrome.runtime.sendMessage({
7 | action: "ContentToBackground",
8 | payload: msg.data,
9 | });
10 | }
11 | });
12 |
13 | function injectScript(file, node) {
14 | // test - inject javascript, access fibergraph
15 | const body0 = document.getElementsByTagName(node)[0];
16 |
17 | // iterating the file from web accessible resources
18 | for (let i = 0; i < file.length; i++) {
19 | const s0 = document.createElement("script"); //
20 |
21 | s0.setAttribute("type", "text/javascript");
22 |
23 | //built in chrome method to get the path of the file to be injected to the user's app
24 | s0.setAttribute("src", chrome.extension.getURL(file[i]));
25 | // console.log(chrome.extension.getURL(file[0]), "injectedfile");
26 | body0.appendChild(s0);
27 | }
28 | }
29 | /*
30 | ... this will inject the following HTML tags into index.html:
31 |
32 |
10 |
11 |