├── .babelrc ├── .gitignore ├── .vscode └── test.code-snippets ├── LICENSE ├── README.md ├── base-readme.md ├── demo ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json └── src │ ├── App.css │ ├── App.js │ ├── index.css │ ├── index.js │ ├── json-formatter │ ├── array │ │ ├── array.css │ │ └── index.jsx │ ├── boolean │ │ ├── boolean.css │ │ └── index.jsx │ ├── index.jsx │ ├── json-formatter.css │ ├── number │ │ ├── index.jsx │ │ └── number.css │ ├── object │ │ ├── index.jsx │ │ └── object.css │ ├── string │ │ ├── index.jsx │ │ └── string.css │ └── type │ │ └── index.jsx │ ├── json-input │ ├── index.jsx │ └── json-input.css │ ├── logo.svg │ └── serviceWorker.js ├── docs ├── README.md └── interfaces │ ├── ibegin.md │ ├── icomparator.md │ ├── icompare.md │ ├── idata.md │ ├── ifrom.md │ ├── inext.md │ ├── irenderchildren.md │ ├── irenderfunction.md │ ├── istart.md │ └── itest.md ├── package-lock.json ├── package.json ├── scripts ├── clear-lib.js ├── configure-adapter.js └── generate-readme.js ├── src ├── data-props.ts ├── do-while.tsx ├── for-in.tsx ├── for-of.tsx ├── for.tsx ├── index.tsx ├── next-props.ts ├── render-props.ts ├── start-props.ts ├── test-props.ts ├── while-props.ts └── while.tsx ├── test ├── do-while.spec.jsx ├── for-in.spec.jsx ├── for-of.spec.jsx ├── for.spec.jsx └── while.spec.jsx ├── tsconfig.json └── tslint.json /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "react"] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib -------------------------------------------------------------------------------- /.vscode/test.code-snippets: -------------------------------------------------------------------------------- 1 | { 2 | // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and 3 | // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope 4 | // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is 5 | // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: 6 | // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. 7 | // Placeholders with the same ids are connected. 8 | // Example: 9 | // "Print to console": { 10 | // "scope": "javascript,typescript", 11 | // "prefix": "log", 12 | // "body": [ 13 | // "console.log('$1');", 14 | // "$2" 15 | // ], 16 | // "description": "Log output to console" 17 | // } 18 | "test": { 19 | "scope": "javascript,typescript", 20 | "prefix": "test-imports", 21 | "body": [ 22 | "// @ts-check", 23 | "import * as React from \"react\";", 24 | "import { expect } from \"chai\";", 25 | "import { shallow, render } from \"enzyme\";", 26 | "import { $1 } from \"../lib\";", 27 | "", 28 | "$2" 29 | ], 30 | "description": "Test file basic imports" 31 | } 32 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Michal Jez 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React For 2 | 3 | A React component library to create loops in JSX. 4 | 5 | [![NPM Version](https://img.shields.io/npm/v/react-for.svg)](https://www.npmjs.com/package/react-for) 6 | [![NPM Downloads](https://img.shields.io/npm/dm/react-for.svg)](https://www.npmjs.com/package/react-for) 7 | [![GitHub stars](https://img.shields.io/github/stars/MJez29/react-for.svg?style=social&label=Star&maxAge=2592000)](https://github.com/MJez29/react-for/stargazers/) 8 | 9 | # Installation 10 | 11 | ```bash 12 | $ npm install --save react-for 13 | ``` 14 | 15 | # Usage 16 | 17 | All components require that you pass in a function to be called each loop. 18 | 19 | ## For Loop 20 | 21 | The `For` component emulates a javascript for loop. 22 | ```jsx 23 | const arr = []; 24 | for (let i = INITIAL_VALUE; TEST_EXPR; NEXT_OP) { 25 | const component = CODE_TO_CREATE_COMPONENT; 26 | arr.push(component); 27 | } 28 | ``` 29 | Is equivalent to 30 | ```jsx 31 | import { For } from 'react-for'; 32 | TEST_EXPR} next={i => NEXT_OP}>{ 33 | (i) => { 34 | CODE_TO_CREATE_COMPONENT; 35 | return component; 36 | } 37 | } 38 | ``` 39 | 40 | ## For Of 41 | 42 | The `ForOf` component emulates a for..of loop. 43 | 44 | ```jsx 45 | const data = [ 1, 2, 3 ]; 46 | const arr = []; 47 | for (const value of data) { 48 | const component = CODE_TO_CREATE_COMPONENT; 49 | arr.push(component); 50 | } 51 | ``` 52 | Is equivalent to 53 | ```jsx 54 | import { ForOf } from 'react-for'; 55 | const data = [ 1, 2, 3 ]; 56 | { 57 | (i) => { 58 | CODE_TO_CREATE_COMPONENT; 59 | return component; 60 | } 61 | } 62 | ``` 63 | 64 | ## For In 65 | 66 | The `ForIn` component emulates a for..in loop. 67 | 68 | ```jsx 69 | const data = [ 1, 2, 3 ]; 70 | const arr = []; 71 | for (const value in data) { 72 | const component = CODE_TO_CREATE_COMPONENT; 73 | arr.push(component); 74 | } 75 | ``` 76 | Is equivalent to 77 | ```jsx 78 | import { ForOf } from 'react-for'; 79 | const data = [ 1, 2, 3 ]; 80 | { 81 | (i) => { 82 | CODE_TO_CREATE_COMPONENT; 83 | return component; 84 | } 85 | } 86 | ``` 87 | 88 | ## While 89 | 90 | The `While` component emulates a while loop. 91 | 92 | ```jsx 93 | const arr = []; 94 | while (TEST_EXPR) { 95 | const component = CODE_TO_CREATE_COMPONENT; 96 | arr.push(component); 97 | } 98 | ``` 99 | Is equivalent to 100 | ```jsx 101 | import { While } from 'react-for'; 102 | const data = [ 1, 2, 3 ]; 103 | { 104 | (i) => { 105 | CODE_TO_CREATE_COMPONENT; 106 | return component; 107 | } 108 | } 109 | ``` 110 | 111 | ## Do While 112 | 113 | The `DoWhile` component emulates a do-while loop. 114 | 115 | ```jsx 116 | const arr = []; 117 | do { 118 | const component = CODE_TO_CREATE_COMPONENT; 119 | arr.push(component); 120 | } while (TEST_EXPR) 121 | ``` 122 | Is equivalent to 123 | ```jsx 124 | import { DoWhile } from 'react-for'; 125 | const data = [ 1, 2, 3 ]; 126 | { 127 | (i) => { 128 | CODE_TO_CREATE_COMPONENT; 129 | return component; 130 | } 131 | } 132 | ``` 133 | 134 | ## Keying 135 | 136 | In React, a key prop should be attached to all components being rendered from a list. The key should be a string that is unique among all components in the list. 137 | 138 | ```jsx 139 | // The following generates an ascii code table 140 | 141 | 142 | 143 | 144 | 145 | i < 256} next={i => i + 1}>{ 146 | (i) => ( 147 | 148 | 149 | 150 | 151 | ) 152 | } 153 |
Ascii CodeCharacter
{i}{String.fromCharCode(i)}
154 | ``` 155 | 156 | # Prop Aliasing 157 | 158 | Currently the following prop aliases are supported. Create an issue to suggest others. The first prop of each row is the recommended alias and is used in all code examples. 159 | 160 | | Prop Type | Aliases | 161 | | --------- | ------- | 162 | | Data | `data`, `from` | 163 | | Next | `next` | 164 | | Render | `children`, `render` | 165 | | Start | `start`, `begin` | 166 | | Test | `test`, `comparator`, `compare` | 167 | 168 | # Docs 169 | 170 | Click to see full docs here. -------------------------------------------------------------------------------- /base-readme.md: -------------------------------------------------------------------------------- 1 | # React For 2 | 3 | A React component library to create loops in JSX. 4 | 5 | [![NPM Version](https://img.shields.io/npm/v/react-for.svg)](https://www.npmjs.com/package/react-for) 6 | [![NPM Downloads](https://img.shields.io/npm/dm/react-for.svg)](https://www.npmjs.com/package/react-for) 7 | [![GitHub stars](https://img.shields.io/github/stars/MJez29/react-for.svg?style=social&label=Star&maxAge=2592000)](https://github.com/MJez29/react-for/stargazers/) 8 | 9 | # Installation 10 | 11 | ```bash 12 | $ npm install --save react-for 13 | ``` 14 | 15 | # Usage 16 | 17 | All components require that you pass in a function to be called each loop. 18 | 19 | ## For Loop 20 | 21 | The `For` component emulates a javascript for loop. 22 | ```jsx 23 | const arr = []; 24 | for (let i = INITIAL_VALUE; TEST_EXPR; NEXT_OP) { 25 | const component = CODE_TO_CREATE_COMPONENT; 26 | arr.push(component); 27 | } 28 | ``` 29 | Is equivalent to 30 | ```jsx 31 | import { For } from 'react-for'; 32 | TEST_EXPR} next={i => NEXT_OP}>{ 33 | (i) => { 34 | CODE_TO_CREATE_COMPONENT; 35 | return component; 36 | } 37 | } 38 | ``` 39 | 40 | ## For Of 41 | 42 | The `ForOf` component emulates a for..of loop. 43 | 44 | ```jsx 45 | const data = [ 1, 2, 3 ]; 46 | const arr = []; 47 | for (const value of data) { 48 | const component = CODE_TO_CREATE_COMPONENT; 49 | arr.push(component); 50 | } 51 | ``` 52 | Is equivalent to 53 | ```jsx 54 | import { ForOf } from 'react-for'; 55 | const data = [ 1, 2, 3 ]; 56 | { 57 | (i) => { 58 | CODE_TO_CREATE_COMPONENT; 59 | return component; 60 | } 61 | } 62 | ``` 63 | 64 | ## For In 65 | 66 | The `ForIn` component emulates a for..in loop. 67 | 68 | ```jsx 69 | const data = [ 1, 2, 3 ]; 70 | const arr = []; 71 | for (const value in data) { 72 | const component = CODE_TO_CREATE_COMPONENT; 73 | arr.push(component); 74 | } 75 | ``` 76 | Is equivalent to 77 | ```jsx 78 | import { ForOf } from 'react-for'; 79 | const data = [ 1, 2, 3 ]; 80 | { 81 | (i) => { 82 | CODE_TO_CREATE_COMPONENT; 83 | return component; 84 | } 85 | } 86 | ``` 87 | 88 | ## While 89 | 90 | The `While` component emulates a while loop. 91 | 92 | ```jsx 93 | const arr = []; 94 | while (TEST_EXPR) { 95 | const component = CODE_TO_CREATE_COMPONENT; 96 | arr.push(component); 97 | } 98 | ``` 99 | Is equivalent to 100 | ```jsx 101 | import { While } from 'react-for'; 102 | const data = [ 1, 2, 3 ]; 103 | { 104 | (i) => { 105 | CODE_TO_CREATE_COMPONENT; 106 | return component; 107 | } 108 | } 109 | ``` 110 | 111 | ## Do While 112 | 113 | The `DoWhile` component emulates a do-while loop. 114 | 115 | ```jsx 116 | const arr = []; 117 | do { 118 | const component = CODE_TO_CREATE_COMPONENT; 119 | arr.push(component); 120 | } while (TEST_EXPR) 121 | ``` 122 | Is equivalent to 123 | ```jsx 124 | import { DoWhile } from 'react-for'; 125 | const data = [ 1, 2, 3 ]; 126 | { 127 | (i) => { 128 | CODE_TO_CREATE_COMPONENT; 129 | return component; 130 | } 131 | } 132 | ``` 133 | 134 | ## Keying 135 | 136 | In React, a key prop should be attached to all components being rendered from a list. The key should be a string that is unique among all components in the list. 137 | 138 | ```jsx 139 | // The following generates an ascii code table 140 | 141 | 142 | 143 | 144 | 145 | i < 256} next={i => i + 1}>{ 146 | (i) => ( 147 | 148 | 149 | 150 | 151 | ) 152 | } 153 |
Ascii CodeCharacter
{i}{String.fromCharCode(i)}
154 | ``` 155 | 156 | # Prop Aliasing 157 | 158 | Currently the following prop aliases are supported. Create an issue to suggest others. The first prop of each row is the recommended alias and is used in all code examples. 159 | 160 | | Prop Type | Aliases | 161 | | --------- | ------- | 162 | | Data | `data`, `from` | 163 | | Next | `next` | 164 | | Render | `children`, `render` | 165 | | Start | `start`, `begin` | 166 | | Test | `test`, `comparator`, `compare` | 167 | 168 | # Docs 169 | 170 | -------------------------------------------------------------------------------- /demo/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /demo/README.md: -------------------------------------------------------------------------------- 1 | # React For Demo Project 2 | 3 | ## Usage 4 | 5 | ```bash 6 | $ npm install 7 | $ npm run start 8 | ``` 9 | 10 | Check out `/src/json-formatter/array/index.jsx` or `/src/json-formatter/object/index.jsx` to see `react-for` in action! 11 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "react": "^16.7.0", 7 | "react-dom": "^16.7.0", 8 | "react-for": "^1.0.0", 9 | "react-scripts": "2.1.2" 10 | }, 11 | "scripts": { 12 | "start": "react-scripts start", 13 | "build": "react-scripts build", 14 | "test": "react-scripts test", 15 | "eject": "react-scripts eject" 16 | }, 17 | "eslintConfig": { 18 | "extends": "react-app" 19 | }, 20 | "browserslist": [ 21 | ">0.2%", 22 | "not dead", 23 | "not ie <= 11", 24 | "not op_mini all" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MJez29/react-for/ba92c1363ed4e798f58cdf71894b6ecc97653474/demo/public/favicon.ico -------------------------------------------------------------------------------- /demo/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 15 | 16 | 25 | React App 26 | 27 | 28 | 29 |
30 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /demo/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /demo/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | animation: App-logo-spin infinite 20s linear; 7 | height: 40vmin; 8 | width: auto; 9 | } 10 | 11 | .App-header { 12 | background-color: #282c34; 13 | min-height: 100vh; 14 | width: 100vw; 15 | overflow: hidden; 16 | display: flex; 17 | align-items: center; 18 | justify-content: center; 19 | font-size: calc(10px + 2vmin); 20 | color: white; 21 | } 22 | 23 | .App-link { 24 | color: #61dafb; 25 | } 26 | 27 | @keyframes App-logo-spin { 28 | from { 29 | transform: rotate(0deg); 30 | } 31 | to { 32 | transform: rotate(360deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /demo/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './App.css'; 3 | import JSONFormatter from './json-formatter'; 4 | import JSONInput from './json-input'; 5 | 6 | const obj = { 7 | a: 4, 8 | b: "hey", 9 | c: [ 10 | "foo", 11 | 7, 12 | { 13 | d: 5, 14 | e: {}, 15 | f: false 16 | } 17 | ], 18 | g: true 19 | } 20 | 21 | class App extends React.Component { 22 | 23 | constructor(props) { 24 | super(props); 25 | 26 | this.state = { 27 | json: obj 28 | }; 29 | } 30 | 31 | onChange = (json) => { 32 | this.setState({ json }); 33 | } 34 | 35 | render() { 36 | return ( 37 |
38 | 39 | 40 |
41 | ); 42 | } 43 | } 44 | 45 | export default App; 46 | -------------------------------------------------------------------------------- /demo/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 5 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 6 | sans-serif; 7 | -webkit-font-smoothing: antialiased; 8 | -moz-osx-font-smoothing: grayscale; 9 | } 10 | 11 | code { 12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 13 | monospace; 14 | } 15 | -------------------------------------------------------------------------------- /demo/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import * as serviceWorker from './serviceWorker'; 6 | 7 | ReactDOM.render(, document.getElementById('root')); 8 | 9 | // If you want your app to work offline and load faster, you can change 10 | // unregister() to register() below. Note this comes with some pitfalls. 11 | // Learn more about service workers: http://bit.ly/CRA-PWA 12 | serviceWorker.unregister(); 13 | -------------------------------------------------------------------------------- /demo/src/json-formatter/array/array.css: -------------------------------------------------------------------------------- 1 | .array-entries { 2 | margin-left: 2ch; 3 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/array/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "./array.css"; 4 | import { ForOf } from "react-for"; 5 | import Type from "../type"; 6 | 7 | const ArrayComponent = ({ data }) => ( 8 | 9 | [ 10 |
11 | { 12 | (e) => ( 13 |
14 | { 15 | e === data[data.length - 1] ? "" : "," 16 | } 17 |
18 | ) 19 | }
20 |
21 | ] 22 |
23 | ); 24 | 25 | export default ArrayComponent; 26 | -------------------------------------------------------------------------------- /demo/src/json-formatter/boolean/boolean.css: -------------------------------------------------------------------------------- 1 | .boolean { 2 | color: blue; 3 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/boolean/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "./boolean.css"; 4 | 5 | const BooleanComponent = ({ data }) => ( 6 | {`${data}`} 7 | ); 8 | 9 | export default BooleanComponent; 10 | -------------------------------------------------------------------------------- /demo/src/json-formatter/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Type from "./type"; 3 | 4 | import "./json-formatter.css"; 5 | 6 | const JSONFormatter = ({ data }) => ( 7 |
8 | 9 |
10 | ); 11 | 12 | export default JSONFormatter; 13 | -------------------------------------------------------------------------------- /demo/src/json-formatter/json-formatter.css: -------------------------------------------------------------------------------- 1 | .json-formatter { 2 | font-family: 'Courier New', Courier, monospace; 3 | text-align: left; 4 | max-width: 80%; 5 | margin: 0 auto; 6 | border: 1px solid black; 7 | padding: 10px; 8 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/number/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "./number.css"; 4 | 5 | const NumberComponent = ({ data }) => ( 6 | {data} 7 | ); 8 | 9 | export default NumberComponent; 10 | -------------------------------------------------------------------------------- /demo/src/json-formatter/number/number.css: -------------------------------------------------------------------------------- 1 | .number { 2 | color: green; 3 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/object/index.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import React from "react"; 3 | import { ForIn } from "react-for"; 4 | 5 | import "./object.css"; 6 | import Type from "../type"; 7 | 8 | const ObjectComponent = ({ data }) => { 9 | const keys = Object.keys(data); 10 | 11 | return ( 12 | 13 | {"{"} 14 |
15 | { 16 | (k) => ( 17 |
18 | {k}:  19 | { 20 | k === keys[keys.length - 1] ? "" : "," 21 | } 22 |
23 | ) 24 | }
25 |
26 | {"}"} 27 |
28 | ); 29 | } 30 | 31 | export default ObjectComponent; 32 | -------------------------------------------------------------------------------- /demo/src/json-formatter/object/object.css: -------------------------------------------------------------------------------- 1 | .object-key { 2 | color: orange; 3 | } 4 | 5 | .object-entries { 6 | margin-left: 2ch; 7 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/string/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "./string.css"; 4 | 5 | const StringComponent = ({ data }) => ( 6 | "{data}" 7 | ); 8 | 9 | export default StringComponent; 10 | -------------------------------------------------------------------------------- /demo/src/json-formatter/string/string.css: -------------------------------------------------------------------------------- 1 | .string { 2 | color: red; 3 | } -------------------------------------------------------------------------------- /demo/src/json-formatter/type/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ObjectComponent from "../object"; 3 | import StringComponent from "../string"; 4 | import NumberComponent from "../number"; 5 | import ArrayComponent from "../array"; 6 | import BooleanComponent from "../boolean"; 7 | 8 | const Type = ({ data }) => { 9 | switch (typeof data) { 10 | case "object": 11 | return Array.isArray(data) ? : ; 12 | case "string": 13 | return ; 14 | case "number": 15 | return ; 16 | case "boolean": 17 | return ; 18 | default: 19 | throw new Error("Invalid type"); 20 | } 21 | }; 22 | 23 | export default Type; 24 | -------------------------------------------------------------------------------- /demo/src/json-input/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "./json-input.css"; 4 | 5 | class JSONInput extends React.Component { 6 | constructor(props) { 7 | super(props); 8 | 9 | this.state = { 10 | input: "", 11 | invalid: false 12 | }; 13 | } 14 | 15 | onChange = (event) => { 16 | const value = event.target.value; 17 | try { 18 | console.log(value); 19 | const json = JSON.parse(value); 20 | console.log(json); 21 | this.props.onChange(json); 22 | this.setState({ 23 | invalid: false 24 | }); 25 | } catch (e) { 26 | this.setState({ 27 | invalid: true 28 | }); 29 | } finally { 30 | this.setState({ 31 | input: value 32 | }); 33 | } 34 | } 35 | 36 | getClassNames = () => { 37 | return this.state.invalid && !this.state.invalid.length ? "invalid" : ""; 38 | } 39 | 40 | render() { 41 | 42 | return ( 43 |
44 |

Enter JSON

45 | 46 |
47 | ) 48 | } 49 | } 50 | 51 | export default JSONInput; 52 | -------------------------------------------------------------------------------- /demo/src/json-input/json-input.css: -------------------------------------------------------------------------------- 1 | .json-input { 2 | font-family: 'Courier New', Courier, monospace; 3 | } 4 | 5 | .json-input textarea { 6 | width: 80%; 7 | height: 250px; 8 | border: 1px solid black; 9 | outline: none; 10 | padding: 10px; 11 | } 12 | 13 | .json-input textarea.invalid { 14 | border: 1px solid red; 15 | } -------------------------------------------------------------------------------- /demo/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo/src/serviceWorker.js: -------------------------------------------------------------------------------- 1 | // This optional code is used to register a service worker. 2 | // register() is not called by default. 3 | 4 | // This lets the app load faster on subsequent visits in production, and gives 5 | // it offline capabilities. However, it also means that developers (and users) 6 | // will only see deployed updates on subsequent visits to a page, after all the 7 | // existing tabs open on the page have been closed, since previously cached 8 | // resources are updated in the background. 9 | 10 | // To learn more about the benefits of this model and instructions on how to 11 | // opt-in, read http://bit.ly/CRA-PWA 12 | 13 | const isLocalhost = Boolean( 14 | window.location.hostname === 'localhost' || 15 | // [::1] is the IPv6 localhost address. 16 | window.location.hostname === '[::1]' || 17 | // 127.0.0.1/8 is considered localhost for IPv4. 18 | window.location.hostname.match( 19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ 20 | ) 21 | ); 22 | 23 | export function register(config) { 24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { 25 | // The URL constructor is available in all browsers that support SW. 26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); 27 | if (publicUrl.origin !== window.location.origin) { 28 | // Our service worker won't work if PUBLIC_URL is on a different origin 29 | // from what our page is served on. This might happen if a CDN is used to 30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374 31 | return; 32 | } 33 | 34 | window.addEventListener('load', () => { 35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; 36 | 37 | if (isLocalhost) { 38 | // This is running on localhost. Let's check if a service worker still exists or not. 39 | checkValidServiceWorker(swUrl, config); 40 | 41 | // Add some additional logging to localhost, pointing developers to the 42 | // service worker/PWA documentation. 43 | navigator.serviceWorker.ready.then(() => { 44 | console.log( 45 | 'This web app is being served cache-first by a service ' + 46 | 'worker. To learn more, visit http://bit.ly/CRA-PWA' 47 | ); 48 | }); 49 | } else { 50 | // Is not localhost. Just register service worker 51 | registerValidSW(swUrl, config); 52 | } 53 | }); 54 | } 55 | } 56 | 57 | function registerValidSW(swUrl, config) { 58 | navigator.serviceWorker 59 | .register(swUrl) 60 | .then(registration => { 61 | registration.onupdatefound = () => { 62 | const installingWorker = registration.installing; 63 | if (installingWorker == null) { 64 | return; 65 | } 66 | installingWorker.onstatechange = () => { 67 | if (installingWorker.state === 'installed') { 68 | if (navigator.serviceWorker.controller) { 69 | // At this point, the updated precached content has been fetched, 70 | // but the previous service worker will still serve the older 71 | // content until all client tabs are closed. 72 | console.log( 73 | 'New content is available and will be used when all ' + 74 | 'tabs for this page are closed. See http://bit.ly/CRA-PWA.' 75 | ); 76 | 77 | // Execute callback 78 | if (config && config.onUpdate) { 79 | config.onUpdate(registration); 80 | } 81 | } else { 82 | // At this point, everything has been precached. 83 | // It's the perfect time to display a 84 | // "Content is cached for offline use." message. 85 | console.log('Content is cached for offline use.'); 86 | 87 | // Execute callback 88 | if (config && config.onSuccess) { 89 | config.onSuccess(registration); 90 | } 91 | } 92 | } 93 | }; 94 | }; 95 | }) 96 | .catch(error => { 97 | console.error('Error during service worker registration:', error); 98 | }); 99 | } 100 | 101 | function checkValidServiceWorker(swUrl, config) { 102 | // Check if the service worker can be found. If it can't reload the page. 103 | fetch(swUrl) 104 | .then(response => { 105 | // Ensure service worker exists, and that we really are getting a JS file. 106 | const contentType = response.headers.get('content-type'); 107 | if ( 108 | response.status === 404 || 109 | (contentType != null && contentType.indexOf('javascript') === -1) 110 | ) { 111 | // No service worker found. Probably a different app. Reload the page. 112 | navigator.serviceWorker.ready.then(registration => { 113 | registration.unregister().then(() => { 114 | window.location.reload(); 115 | }); 116 | }); 117 | } else { 118 | // Service worker found. Proceed as normal. 119 | registerValidSW(swUrl, config); 120 | } 121 | }) 122 | .catch(() => { 123 | console.log( 124 | 'No internet connection found. App is running in offline mode.' 125 | ); 126 | }); 127 | } 128 | 129 | export function unregister() { 130 | if ('serviceWorker' in navigator) { 131 | navigator.serviceWorker.ready.then(registration => { 132 | registration.unregister(); 133 | }); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | 2 | React For 3 | ========= 4 | 5 | A React component library to create loops in JSX. 6 | 7 | [![NPM Version](https://img.shields.io/npm/v/react-for.svg)](https://www.npmjs.com/package/react-for) [![NPM Downloads](https://img.shields.io/npm/dm/react-for.svg)](https://www.npmjs.com/package/react-for) [![GitHub stars](https://img.shields.io/github/stars/MJez29/react-for.svg?style=social&label=Star&maxAge=2592000)](https://github.com/MJez29/react-for/stargazers/) 8 | 9 | Installation 10 | ============ 11 | 12 | ```bash 13 | $ npm install --save react-for 14 | ``` 15 | 16 | Usage 17 | ===== 18 | 19 | All components require that you pass in a function to be called each loop. 20 | 21 | For Loop 22 | -------- 23 | 24 | The `For` component emulates a javascript for loop. 25 | 26 | ```jsx 27 | const arr = []; 28 | for (let i = INITIAL_VALUE; TEST_EXPR; NEXT_OP) { 29 | const component = CODE_TO_CREATE_COMPONENT; 30 | arr.push(component); 31 | } 32 | ``` 33 | 34 | Is equivalent to 35 | 36 | ```jsx 37 | import { For } from 'react-for'; 38 | TEST_EXPR} next={i => NEXT_OP}>{ 39 | (i) => { 40 | CODE_TO_CREATE_COMPONENT; 41 | return component; 42 | } 43 | } 44 | ``` 45 | 46 | For Of 47 | ------ 48 | 49 | The `ForOf` component emulates a for..of loop. 50 | 51 | ```jsx 52 | const data = [ 1, 2, 3 ]; 53 | const arr = []; 54 | for (const value of data) { 55 | const component = CODE_TO_CREATE_COMPONENT; 56 | arr.push(component); 57 | } 58 | ``` 59 | 60 | Is equivalent to 61 | 62 | ```jsx 63 | import { ForOf } from 'react-for'; 64 | const data = [ 1, 2, 3 ]; 65 | { 66 | (i) => { 67 | CODE_TO_CREATE_COMPONENT; 68 | return component; 69 | } 70 | } 71 | ``` 72 | 73 | For In 74 | ------ 75 | 76 | The `ForIn` component emulates a for..in loop. 77 | 78 | ```jsx 79 | const data = [ 1, 2, 3 ]; 80 | const arr = []; 81 | for (const value in data) { 82 | const component = CODE_TO_CREATE_COMPONENT; 83 | arr.push(component); 84 | } 85 | ``` 86 | 87 | Is equivalent to 88 | 89 | ```jsx 90 | import { ForOf } from 'react-for'; 91 | const data = [ 1, 2, 3 ]; 92 | { 93 | (i) => { 94 | CODE_TO_CREATE_COMPONENT; 95 | return component; 96 | } 97 | } 98 | ``` 99 | 100 | While 101 | ----- 102 | 103 | The `While` component emulates a while loop. 104 | 105 | ```jsx 106 | const arr = []; 107 | while (TEST_EXPR) { 108 | const component = CODE_TO_CREATE_COMPONENT; 109 | arr.push(component); 110 | } 111 | ``` 112 | 113 | Is equivalent to 114 | 115 | ```jsx 116 | import { While } from 'react-for'; 117 | const data = [ 1, 2, 3 ]; 118 | { 119 | (i) => { 120 | CODE_TO_CREATE_COMPONENT; 121 | return component; 122 | } 123 | } 124 | ``` 125 | 126 | Do While 127 | -------- 128 | 129 | The `DoWhile` component emulates a do-while loop. 130 | 131 | ```jsx 132 | const arr = []; 133 | do { 134 | const component = CODE_TO_CREATE_COMPONENT; 135 | arr.push(component); 136 | } while (TEST_EXPR) 137 | ``` 138 | 139 | Is equivalent to 140 | 141 | ```jsx 142 | import { DoWhile } from 'react-for'; 143 | const data = [ 1, 2, 3 ]; 144 | { 145 | (i) => { 146 | CODE_TO_CREATE_COMPONENT; 147 | return component; 148 | } 149 | } 150 | ``` 151 | 152 | Keying 153 | ------ 154 | 155 | In React, a key prop should be attached to all components being rendered from a list. The key should be a string that is unique among all components in the list. 156 | 157 | ```jsx 158 | // The following generates an ascii code table 159 | 160 | 161 | 162 | 163 | 164 | i < 256} next={i => i + 1}>{ 165 | (i) => ( 166 | 167 | 168 | 169 | 170 | ) 171 | } 172 |
Ascii CodeCharacter
{i}{String.fromCharCode(i)}
173 | ``` 174 | 175 | Prop Aliasing 176 | ============= 177 | 178 | Currently the following prop aliases are supported. Create an issue to suggest others. The first prop of each row is the recommended alias and is used in all code examples. 179 | 180 | Prop Type 181 | 182 | Aliases 183 | 184 | Data 185 | 186 | `data`, `from` 187 | 188 | Next 189 | 190 | `next` 191 | 192 | Render 193 | 194 | `children`, `render` 195 | 196 | Start 197 | 198 | `start`, `begin` 199 | 200 | Test 201 | 202 | `test`, `comparator`, `compare` 203 | 204 | Docs 205 | ==== 206 | 207 | ## Index 208 | 209 | ### Interfaces 210 | 211 | * [IBegin](interfaces/ibegin.md) 212 | * [IComparator](interfaces/icomparator.md) 213 | * [ICompare](interfaces/icompare.md) 214 | * [IData](interfaces/idata.md) 215 | * [IFrom](interfaces/ifrom.md) 216 | * [INext](interfaces/inext.md) 217 | * [IRenderChildren](interfaces/irenderchildren.md) 218 | * [IRenderFunction](interfaces/irenderfunction.md) 219 | * [IStart](interfaces/istart.md) 220 | * [ITest](interfaces/itest.md) 221 | 222 | ### Type aliases 223 | 224 | * [DataProps](#dataprops) 225 | * [ForInProps](#forinprops) 226 | * [ForOfProps](#forofprops) 227 | * [ForProps](#forprops) 228 | * [NextFunction](#nextfunction) 229 | * [NextProps](#nextprops) 230 | * [RenderFunction](#renderfunction) 231 | * [RenderProps](#renderprops) 232 | * [StartProps](#startprops) 233 | * [TestFunction](#testfunction) 234 | * [TestProps](#testprops) 235 | * [WhileProps](#whileprops) 236 | 237 | ### Functions 238 | 239 | * [DoWhile](#dowhile) 240 | * [For](#for) 241 | * [ForIn](#forin) 242 | * [ForOf](#forof) 243 | * [While](#while) 244 | 245 | --- 246 | 247 | ## Type aliases 248 | 249 | 250 | 251 | ### DataProps 252 | 253 | **Ƭ DataProps**: *[IData](interfaces/idata.md)<`T`> | [IFrom](interfaces/ifrom.md)<`T`>* 254 | 255 | *Defined in [data-props.ts:31](https://github.com/MJez29/react-for/blob/171c15c/src/data-props.ts#L31)* 256 | 257 | The union of the various data-related prop interfaces. 258 | 259 | ___ 260 | 261 | 262 | ### ForInProps 263 | 264 | **Ƭ ForInProps**: *[RenderProps](#renderprops)<`string`> & [DataProps](#dataprops)<`object`>* 265 | 266 | *Defined in [for-in.tsx:8](https://github.com/MJez29/react-for/blob/171c15c/src/for-in.tsx#L8)* 267 | 268 | The type of the props that get passed to the ForIn component. 269 | 270 | ___ 271 | 272 | 273 | ### ForOfProps 274 | 275 | **Ƭ ForOfProps**: *[RenderProps](#renderprops)<`T`> & [DataProps](#dataprops)<`object`>* 276 | 277 | *Defined in [for-of.tsx:5](https://github.com/MJez29/react-for/blob/171c15c/src/for-of.tsx#L5)* 278 | 279 | ___ 280 | 281 | 282 | ### ForProps 283 | 284 | **Ƭ ForProps**: *[RenderProps](#renderprops)<`T`> & [StartProps](#startprops)<`T`> & [TestProps](#testprops)<`T`> & [NextProps](#nextprops)<`T`>* 285 | 286 | *Defined in [for.tsx:10](https://github.com/MJez29/react-for/blob/171c15c/src/for.tsx#L10)* 287 | 288 | The type of the props passed into the `For` component. 289 | 290 | ___ 291 | 292 | 293 | ### NextFunction 294 | 295 | **Ƭ NextFunction**: *`function`* 296 | 297 | *Defined in [next-props.ts:4](https://github.com/MJez29/react-for/blob/171c15c/src/next-props.ts#L4)* 298 | 299 | The type of the function that is used to change the loop variable 300 | 301 | #### Type declaration 302 | ▸(x: *`T`*): `T` 303 | 304 | **Parameters:** 305 | 306 | | Name | Type | 307 | | ------ | ------ | 308 | | x | `T` | 309 | 310 | **Returns:** `T` 311 | 312 | ___ 313 | 314 | 315 | ### NextProps 316 | 317 | **Ƭ NextProps**: *[INext](interfaces/inext.md)<`T`>* 318 | 319 | *Defined in [next-props.ts:16](https://github.com/MJez29/react-for/blob/171c15c/src/next-props.ts#L16)* 320 | 321 | The union type of all possible next prop interfaces. 322 | 323 | ___ 324 | 325 | 326 | ### RenderFunction 327 | 328 | **Ƭ RenderFunction**: *`function`* 329 | 330 | *Defined in [render-props.ts:1](https://github.com/MJez29/react-for/blob/171c15c/src/render-props.ts#L1)* 331 | 332 | #### Type declaration 333 | ▸(x?: *`T`*): `any` 334 | 335 | **Parameters:** 336 | 337 | | Name | Type | 338 | | ------ | ------ | 339 | | `Optional` x | `T` | 340 | 341 | **Returns:** `any` 342 | 343 | ___ 344 | 345 | 346 | ### RenderProps 347 | 348 | **Ƭ RenderProps**: *[IRenderChildren](interfaces/irenderchildren.md)<`T`> | [IRenderFunction](interfaces/irenderfunction.md)<`T`>* 349 | 350 | *Defined in [render-props.ts:19](https://github.com/MJez29/react-for/blob/171c15c/src/render-props.ts#L19)* 351 | 352 | ___ 353 | 354 | 355 | ### StartProps 356 | 357 | **Ƭ StartProps**: *[IStart](interfaces/istart.md)<`T`> | [IBegin](interfaces/ibegin.md)<`T`>* 358 | 359 | *Defined in [start-props.ts:19](https://github.com/MJez29/react-for/blob/171c15c/src/start-props.ts#L19)* 360 | 361 | ___ 362 | 363 | 364 | ### TestFunction 365 | 366 | **Ƭ TestFunction**: *`function`* 367 | 368 | *Defined in [test-props.ts:5](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L5)* 369 | 370 | The type of the function that should be used to determine if a loop should stop. Returns a truthy value to continue and a falsy value to stop. 371 | 372 | #### Type declaration 373 | ▸(x?: *`T`*): `any` 374 | 375 | **Parameters:** 376 | 377 | | Name | Type | 378 | | ------ | ------ | 379 | | `Optional` x | `T` | 380 | 381 | **Returns:** `any` 382 | 383 | ___ 384 | 385 | 386 | ### TestProps 387 | 388 | **Ƭ TestProps**: *[ITest](interfaces/itest.md)<`T`> | [IComparator](interfaces/icomparator.md)<`T`> | [ICompare](interfaces/icompare.md)<`T`>* 389 | 390 | *Defined in [test-props.ts:52](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L52)* 391 | 392 | The type of all valid sets of test props. 393 | 394 | ___ 395 | 396 | 397 | ### WhileProps 398 | 399 | **Ƭ WhileProps**: *[RenderProps](#renderprops) & [TestProps](#testprops)<`undefined`>* 400 | 401 | *Defined in [while-props.ts:7](https://github.com/MJez29/react-for/blob/171c15c/src/while-props.ts#L7)* 402 | 403 | The type of the props passed to the `While` component. 404 | 405 | ___ 406 | 407 | ## Functions 408 | 409 | 410 | 411 | ### `` DoWhile 412 | 413 | ▸ **DoWhile**(props: *[WhileProps](#whileprops)*): `Element` 414 | 415 | *Defined in [do-while.tsx:8](https://github.com/MJez29/react-for/blob/171c15c/src/do-while.tsx#L8)* 416 | 417 | A do-while loop 418 | 419 | **Parameters:** 420 | 421 | | Name | Type | Description | 422 | | ------ | ------ | ------ | 423 | | props | [WhileProps](#whileprops) | The props passed into the component | 424 | 425 | **Returns:** `Element` 426 | 427 | ___ 428 | 429 | 430 | ### `` For 431 | 432 | ▸ **For**<`T`>(props: *[ForProps](#forprops)<`T`>*): `Element` 433 | 434 | *Defined in [for.tsx:36](https://github.com/MJez29/react-for/blob/171c15c/src/for.tsx#L36)* 435 | 436 | A JSX implementation of the JavaScript `for` loop. 437 | 438 | **Type parameters:** 439 | 440 | #### T : `__type` 441 | **Parameters:** 442 | 443 | | Name | Type | Description | 444 | | ------ | ------ | ------ | 445 | | props | [ForProps](#forprops)<`T`> | The props passed to the component | 446 | 447 | **Returns:** `Element` 448 | 449 | ___ 450 | 451 | 452 | ### `` ForIn 453 | 454 | ▸ **ForIn**(props: *[ForInProps](#forinprops)*): `Element` 455 | 456 | *Defined in [for-in.tsx:37](https://github.com/MJez29/react-for/blob/171c15c/src/for-in.tsx#L37)* 457 | 458 | `ForIn` implements looping through the provided elements using a `for...in` loop. It iterates over the enumerable properties of an object. See [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) for more detail. 459 | 460 | **Parameters:** 461 | 462 | | Name | Type | 463 | | ------ | ------ | 464 | | props | [ForInProps](#forinprops) | 465 | 466 | **Returns:** `Element` 467 | 468 | ___ 469 | 470 | 471 | ### `` ForOf 472 | 473 | ▸ **ForOf**<`T`>(props: *[ForOfProps](#forofprops)<`T`>*): `Element` 474 | 475 | *Defined in [for-of.tsx:35](https://github.com/MJez29/react-for/blob/171c15c/src/for-of.tsx#L35)* 476 | 477 | `ForOf` implements looping through the provided elements using a `for...of` loop. It iterates over the data that an iterable object defines to be iterable over. See [here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) for more detail. 478 | 479 | **Type parameters:** 480 | 481 | #### T : `__type` 482 | **Parameters:** 483 | 484 | | Name | Type | 485 | | ------ | ------ | 486 | | props | [ForOfProps](#forofprops)<`T`> | 487 | 488 | **Returns:** `Element` 489 | 490 | ___ 491 | 492 | 493 | ### `` While 494 | 495 | ▸ **While**(props: *[WhileProps](#whileprops)*): `Element` 496 | 497 | *Defined in [while.tsx:15](https://github.com/MJez29/react-for/blob/171c15c/src/while.tsx#L15)* 498 | 499 | A JSX implementation of a while loop. 500 | 501 | ```jsx 502 | const PrintHello = ({ i }) => ( 503 | i-- > 0}>{ 504 | () =>

Hello World!

505 | }
506 | ) 507 | ``` 508 | 509 | **Parameters:** 510 | 511 | | Name | Type | Description | 512 | | ------ | ------ | ------ | 513 | | props | [WhileProps](#whileprops) | The props passed into the component | 514 | 515 | **Returns:** `Element` 516 | 517 | ___ 518 | 519 | -------------------------------------------------------------------------------- /docs/interfaces/ibegin.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IBegin](../interfaces/ibegin.md) 2 | 3 | # Interface: IBegin 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **IBegin** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [begin](ibegin.md#begin) 16 | * [start](ibegin.md#start) 17 | 18 | --- 19 | 20 | ## Properties 21 | 22 | 23 | 24 | ### begin 25 | 26 | **● begin**: *`T`* 27 | 28 | *Defined in [start-props.ts:16](https://github.com/MJez29/react-for/blob/171c15c/src/start-props.ts#L16)* 29 | 30 | ___ 31 | 32 | 33 | ### `` start 34 | 35 | **● start**: *`undefined`* 36 | 37 | *Defined in [start-props.ts:15](https://github.com/MJez29/react-for/blob/171c15c/src/start-props.ts#L15)* 38 | 39 | ___ 40 | 41 | -------------------------------------------------------------------------------- /docs/interfaces/icomparator.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IComparator](../interfaces/icomparator.md) 2 | 3 | # Interface: IComparator 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **IComparator** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [comparator](icomparator.md#comparator) 16 | * [compare](icomparator.md#compare) 17 | * [test](icomparator.md#test) 18 | 19 | --- 20 | 21 | ## Properties 22 | 23 | 24 | 25 | ### comparator 26 | 27 | **● comparator**: *[TestFunction](../#testfunction)<`T`>* 28 | 29 | *Defined in [test-props.ts:23](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L23)* 30 | 31 | ___ 32 | 33 | 34 | ### `` compare 35 | 36 | **● compare**: *`undefined`* 37 | 38 | *Defined in [test-props.ts:24](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L24)* 39 | 40 | ___ 41 | 42 | 43 | ### `` test 44 | 45 | **● test**: *`undefined`* 46 | 47 | *Defined in [test-props.ts:22](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L22)* 48 | 49 | ___ 50 | 51 | -------------------------------------------------------------------------------- /docs/interfaces/icompare.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [ICompare](../interfaces/icompare.md) 2 | 3 | # Interface: ICompare 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **ICompare** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [comparator](icompare.md#comparator) 16 | * [compare](icompare.md#compare) 17 | * [test](icompare.md#test) 18 | 19 | --- 20 | 21 | ## Properties 22 | 23 | 24 | 25 | ### `` comparator 26 | 27 | **● comparator**: *`undefined`* 28 | 29 | *Defined in [test-props.ts:37](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L37)* 30 | 31 | ___ 32 | 33 | 34 | ### compare 35 | 36 | **● compare**: *[TestFunction](../#testfunction)<`T`>* 37 | 38 | *Defined in [test-props.ts:38](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L38)* 39 | 40 | ___ 41 | 42 | 43 | ### `` test 44 | 45 | **● test**: *`undefined`* 46 | 47 | *Defined in [test-props.ts:36](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L36)* 48 | 49 | ___ 50 | 51 | -------------------------------------------------------------------------------- /docs/interfaces/idata.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IData](../interfaces/idata.md) 2 | 3 | # Interface: IData 4 | 5 | Interface of the data-related props when the object to use in the loop is passed in the `data` prop 6 | 7 | ## Type parameters 8 | #### T 9 | ## Hierarchy 10 | 11 | **IData** 12 | 13 | ## Index 14 | 15 | ### Properties 16 | 17 | * [data](idata.md#data) 18 | * [from](idata.md#from) 19 | 20 | --- 21 | 22 | ## Properties 23 | 24 | 25 | 26 | ### data 27 | 28 | **● data**: *`T`* 29 | 30 | *Defined in [data-props.ts:6](https://github.com/MJez29/react-for/blob/171c15c/src/data-props.ts#L6)* 31 | 32 | ___ 33 | 34 | 35 | ### `` from 36 | 37 | **● from**: *`undefined`* 38 | 39 | *Defined in [data-props.ts:7](https://github.com/MJez29/react-for/blob/171c15c/src/data-props.ts#L7)* 40 | 41 | ___ 42 | 43 | -------------------------------------------------------------------------------- /docs/interfaces/ifrom.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IFrom](../interfaces/ifrom.md) 2 | 3 | # Interface: IFrom 4 | 5 | Interface of the data-related props when the object to use in the loop is passed in the `from` prop 6 | 7 | ## Type parameters 8 | #### T 9 | ## Hierarchy 10 | 11 | **IFrom** 12 | 13 | ## Index 14 | 15 | ### Properties 16 | 17 | * [data](ifrom.md#data) 18 | * [from](ifrom.md#from) 19 | 20 | --- 21 | 22 | ## Properties 23 | 24 | 25 | 26 | ### `` data 27 | 28 | **● data**: *`undefined`* 29 | 30 | *Defined in [data-props.ts:25](https://github.com/MJez29/react-for/blob/171c15c/src/data-props.ts#L25)* 31 | 32 | ___ 33 | 34 | 35 | ### from 36 | 37 | **● from**: *`T`* 38 | 39 | *Defined in [data-props.ts:24](https://github.com/MJez29/react-for/blob/171c15c/src/data-props.ts#L24)* 40 | 41 | ___ 42 | 43 | -------------------------------------------------------------------------------- /docs/interfaces/inext.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [INext](../interfaces/inext.md) 2 | 3 | # Interface: INext 4 | 5 | Interface where the next function is passed through the `next` prop. 6 | 7 | ## Type parameters 8 | #### T 9 | ## Hierarchy 10 | 11 | **INext** 12 | 13 | ## Index 14 | 15 | ### Properties 16 | 17 | * [next](inext.md#next) 18 | 19 | --- 20 | 21 | ## Properties 22 | 23 | 24 | 25 | ### next 26 | 27 | **● next**: *[NextFunction](../#nextfunction)<`T`>* 28 | 29 | *Defined in [next-props.ts:10](https://github.com/MJez29/react-for/blob/171c15c/src/next-props.ts#L10)* 30 | 31 | ___ 32 | 33 | -------------------------------------------------------------------------------- /docs/interfaces/irenderchildren.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IRenderChildren](../interfaces/irenderchildren.md) 2 | 3 | # Interface: IRenderChildren 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **IRenderChildren** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [children](irenderchildren.md#children) 16 | 17 | --- 18 | 19 | ## Properties 20 | 21 | 22 | 23 | ### children 24 | 25 | **● children**: *[RenderFunction](../#renderfunction)<`T`>* 26 | 27 | *Defined in [render-props.ts:4](https://github.com/MJez29/react-for/blob/171c15c/src/render-props.ts#L4)* 28 | 29 | ___ 30 | 31 | -------------------------------------------------------------------------------- /docs/interfaces/irenderfunction.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IRenderFunction](../interfaces/irenderfunction.md) 2 | 3 | # Interface: IRenderFunction 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **IRenderFunction** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [render](irenderfunction.md#render) 16 | 17 | --- 18 | 19 | ## Properties 20 | 21 | 22 | 23 | ### render 24 | 25 | **● render**: *[RenderFunction](../#renderfunction)<`T`>* 26 | 27 | *Defined in [render-props.ts:16](https://github.com/MJez29/react-for/blob/171c15c/src/render-props.ts#L16)* 28 | 29 | ___ 30 | 31 | -------------------------------------------------------------------------------- /docs/interfaces/istart.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [IStart](../interfaces/istart.md) 2 | 3 | # Interface: IStart 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **IStart** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [begin](istart.md#begin) 16 | * [start](istart.md#start) 17 | 18 | --- 19 | 20 | ## Properties 21 | 22 | 23 | 24 | ### `` begin 25 | 26 | **● begin**: *`undefined`* 27 | 28 | *Defined in [start-props.ts:3](https://github.com/MJez29/react-for/blob/171c15c/src/start-props.ts#L3)* 29 | 30 | ___ 31 | 32 | 33 | ### start 34 | 35 | **● start**: *`T`* 36 | 37 | *Defined in [start-props.ts:2](https://github.com/MJez29/react-for/blob/171c15c/src/start-props.ts#L2)* 38 | 39 | ___ 40 | 41 | -------------------------------------------------------------------------------- /docs/interfaces/itest.md: -------------------------------------------------------------------------------- 1 | [react-for](../README.md) > [ITest](../interfaces/itest.md) 2 | 3 | # Interface: ITest 4 | 5 | ## Type parameters 6 | #### T 7 | ## Hierarchy 8 | 9 | **ITest** 10 | 11 | ## Index 12 | 13 | ### Properties 14 | 15 | * [comparator](itest.md#comparator) 16 | * [compare](itest.md#compare) 17 | * [test](itest.md#test) 18 | 19 | --- 20 | 21 | ## Properties 22 | 23 | 24 | 25 | ### `` comparator 26 | 27 | **● comparator**: *`undefined`* 28 | 29 | *Defined in [test-props.ts:9](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L9)* 30 | 31 | ___ 32 | 33 | 34 | ### `` compare 35 | 36 | **● compare**: *`undefined`* 37 | 38 | *Defined in [test-props.ts:10](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L10)* 39 | 40 | ___ 41 | 42 | 43 | ### test 44 | 45 | **● test**: *[TestFunction](../#testfunction)<`T`>* 46 | 47 | *Defined in [test-props.ts:8](https://github.com/MJez29/react-for/blob/171c15c/src/test-props.ts#L8)* 48 | 49 | ___ 50 | 51 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-for", 3 | "version": "1.0.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@sinonjs/commons": { 8 | "version": "1.3.0", 9 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", 10 | "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", 11 | "dev": true, 12 | "requires": { 13 | "type-detect": "4.0.8" 14 | } 15 | }, 16 | "@sinonjs/formatio": { 17 | "version": "3.0.1", 18 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.1.tgz", 19 | "integrity": "sha512-IA2a2B5lN1qZZzhD5ntqxpHZgiiwK1pSt2LzuCHoZBIAJQYXyD+/E2WR2EhGPlTpuc+H9RKYnOlcfjvbEwekCA==", 20 | "dev": true, 21 | "requires": { 22 | "@sinonjs/samsam": "^2.1.3" 23 | } 24 | }, 25 | "@sinonjs/samsam": { 26 | "version": "2.1.3", 27 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.3.tgz", 28 | "integrity": "sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw==", 29 | "dev": true 30 | }, 31 | "@sinonjs/text-encoding": { 32 | "version": "0.7.1", 33 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", 34 | "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", 35 | "dev": true 36 | }, 37 | "@types/events": { 38 | "version": "3.0.0", 39 | "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", 40 | "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", 41 | "dev": true 42 | }, 43 | "@types/fs-extra": { 44 | "version": "5.0.5", 45 | "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", 46 | "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", 47 | "dev": true, 48 | "requires": { 49 | "@types/node": "*" 50 | } 51 | }, 52 | "@types/glob": { 53 | "version": "7.1.1", 54 | "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", 55 | "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", 56 | "dev": true, 57 | "requires": { 58 | "@types/events": "*", 59 | "@types/minimatch": "*", 60 | "@types/node": "*" 61 | } 62 | }, 63 | "@types/handlebars": { 64 | "version": "4.1.0", 65 | "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.1.0.tgz", 66 | "integrity": "sha512-gq9YweFKNNB1uFK71eRqsd4niVkXrxHugqWFQkeLRJvGjnxsLr16bYtcsG4tOFwmYi0Bax+wCkbf1reUfdl4kA==", 67 | "dev": true, 68 | "requires": { 69 | "handlebars": "*" 70 | } 71 | }, 72 | "@types/highlight.js": { 73 | "version": "9.12.3", 74 | "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.3.tgz", 75 | "integrity": "sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ==", 76 | "dev": true 77 | }, 78 | "@types/lodash": { 79 | "version": "4.14.123", 80 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", 81 | "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", 82 | "dev": true 83 | }, 84 | "@types/marked": { 85 | "version": "0.4.2", 86 | "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.4.2.tgz", 87 | "integrity": "sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg==", 88 | "dev": true 89 | }, 90 | "@types/minimatch": { 91 | "version": "3.0.3", 92 | "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", 93 | "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", 94 | "dev": true 95 | }, 96 | "@types/mocha": { 97 | "version": "5.2.5", 98 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", 99 | "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", 100 | "dev": true 101 | }, 102 | "@types/node": { 103 | "version": "10.12.12", 104 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz", 105 | "integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==", 106 | "dev": true 107 | }, 108 | "@types/prop-types": { 109 | "version": "15.5.6", 110 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz", 111 | "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ==", 112 | "dev": true 113 | }, 114 | "@types/react": { 115 | "version": "16.7.8", 116 | "resolved": "https://registry.npmjs.org/@types/react/-/react-16.7.8.tgz", 117 | "integrity": "sha512-7Vua2IYokMiPBk0WWXaDt4Cg3XVcwU6HpkuPhvwhBrVEy4SafpcvEfGYByoY9jxyFMiegYQPaSOT+H+AY00CPw==", 118 | "dev": true, 119 | "requires": { 120 | "@types/prop-types": "*", 121 | "csstype": "^2.2.0" 122 | } 123 | }, 124 | "@types/react-dom": { 125 | "version": "16.0.11", 126 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.11.tgz", 127 | "integrity": "sha512-x6zUx9/42B5Kl2Vl9HlopV8JF64wLpX3c+Pst9kc1HgzrsH+mkehe/zmHMQTplIrR48H2gpU7ZqurQolYu8XBA==", 128 | "dev": true, 129 | "requires": { 130 | "@types/react": "*" 131 | } 132 | }, 133 | "@types/shelljs": { 134 | "version": "0.8.5", 135 | "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.5.tgz", 136 | "integrity": "sha512-bZgjwIWu9gHCjirKJoOlLzGi5N0QgZ5t7EXEuoqyWCHTuSddURXo3FOBYDyRPNOWzZ6NbkLvZnVkn483Y/tvcQ==", 137 | "dev": true, 138 | "requires": { 139 | "@types/glob": "*", 140 | "@types/node": "*" 141 | } 142 | }, 143 | "abab": { 144 | "version": "2.0.0", 145 | "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", 146 | "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", 147 | "dev": true 148 | }, 149 | "acorn": { 150 | "version": "5.7.3", 151 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", 152 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", 153 | "dev": true 154 | }, 155 | "acorn-globals": { 156 | "version": "4.3.0", 157 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", 158 | "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", 159 | "dev": true, 160 | "requires": { 161 | "acorn": "^6.0.1", 162 | "acorn-walk": "^6.0.1" 163 | }, 164 | "dependencies": { 165 | "acorn": { 166 | "version": "6.0.4", 167 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", 168 | "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", 169 | "dev": true 170 | } 171 | } 172 | }, 173 | "acorn-walk": { 174 | "version": "6.1.1", 175 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", 176 | "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", 177 | "dev": true 178 | }, 179 | "ajv": { 180 | "version": "6.6.2", 181 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", 182 | "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", 183 | "dev": true, 184 | "requires": { 185 | "fast-deep-equal": "^2.0.1", 186 | "fast-json-stable-stringify": "^2.0.0", 187 | "json-schema-traverse": "^0.4.1", 188 | "uri-js": "^4.2.2" 189 | } 190 | }, 191 | "ansi-regex": { 192 | "version": "2.1.1", 193 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 194 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 195 | "dev": true 196 | }, 197 | "ansi-styles": { 198 | "version": "2.2.1", 199 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 200 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 201 | "dev": true 202 | }, 203 | "argparse": { 204 | "version": "1.0.10", 205 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 206 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 207 | "dev": true, 208 | "requires": { 209 | "sprintf-js": "~1.0.2" 210 | } 211 | }, 212 | "array-equal": { 213 | "version": "1.0.0", 214 | "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", 215 | "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", 216 | "dev": true 217 | }, 218 | "array-from": { 219 | "version": "2.1.1", 220 | "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", 221 | "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", 222 | "dev": true 223 | }, 224 | "array.prototype.flat": { 225 | "version": "1.2.1", 226 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", 227 | "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", 228 | "dev": true, 229 | "requires": { 230 | "define-properties": "^1.1.2", 231 | "es-abstract": "^1.10.0", 232 | "function-bind": "^1.1.1" 233 | } 234 | }, 235 | "asn1": { 236 | "version": "0.2.4", 237 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 238 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 239 | "dev": true, 240 | "requires": { 241 | "safer-buffer": "~2.1.0" 242 | } 243 | }, 244 | "assert-plus": { 245 | "version": "1.0.0", 246 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 247 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 248 | "dev": true 249 | }, 250 | "assertion-error": { 251 | "version": "1.1.0", 252 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 253 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 254 | "dev": true 255 | }, 256 | "async-limiter": { 257 | "version": "1.0.0", 258 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 259 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", 260 | "dev": true 261 | }, 262 | "asynckit": { 263 | "version": "0.4.0", 264 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 265 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 266 | "dev": true 267 | }, 268 | "aws-sign2": { 269 | "version": "0.7.0", 270 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 271 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 272 | "dev": true 273 | }, 274 | "aws4": { 275 | "version": "1.8.0", 276 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", 277 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", 278 | "dev": true 279 | }, 280 | "babel-code-frame": { 281 | "version": "6.26.0", 282 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 283 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 284 | "dev": true, 285 | "requires": { 286 | "chalk": "^1.1.3", 287 | "esutils": "^2.0.2", 288 | "js-tokens": "^3.0.2" 289 | }, 290 | "dependencies": { 291 | "js-tokens": { 292 | "version": "3.0.2", 293 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 294 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 295 | "dev": true 296 | } 297 | } 298 | }, 299 | "babel-core": { 300 | "version": "6.26.3", 301 | "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", 302 | "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", 303 | "dev": true, 304 | "requires": { 305 | "babel-code-frame": "^6.26.0", 306 | "babel-generator": "^6.26.0", 307 | "babel-helpers": "^6.24.1", 308 | "babel-messages": "^6.23.0", 309 | "babel-register": "^6.26.0", 310 | "babel-runtime": "^6.26.0", 311 | "babel-template": "^6.26.0", 312 | "babel-traverse": "^6.26.0", 313 | "babel-types": "^6.26.0", 314 | "babylon": "^6.18.0", 315 | "convert-source-map": "^1.5.1", 316 | "debug": "^2.6.9", 317 | "json5": "^0.5.1", 318 | "lodash": "^4.17.4", 319 | "minimatch": "^3.0.4", 320 | "path-is-absolute": "^1.0.1", 321 | "private": "^0.1.8", 322 | "slash": "^1.0.0", 323 | "source-map": "^0.5.7" 324 | }, 325 | "dependencies": { 326 | "debug": { 327 | "version": "2.6.9", 328 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 329 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 330 | "dev": true, 331 | "requires": { 332 | "ms": "2.0.0" 333 | } 334 | } 335 | } 336 | }, 337 | "babel-generator": { 338 | "version": "6.26.1", 339 | "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", 340 | "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", 341 | "dev": true, 342 | "requires": { 343 | "babel-messages": "^6.23.0", 344 | "babel-runtime": "^6.26.0", 345 | "babel-types": "^6.26.0", 346 | "detect-indent": "^4.0.0", 347 | "jsesc": "^1.3.0", 348 | "lodash": "^4.17.4", 349 | "source-map": "^0.5.7", 350 | "trim-right": "^1.0.1" 351 | } 352 | }, 353 | "babel-helper-builder-react-jsx": { 354 | "version": "6.26.0", 355 | "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", 356 | "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", 357 | "dev": true, 358 | "requires": { 359 | "babel-runtime": "^6.26.0", 360 | "babel-types": "^6.26.0", 361 | "esutils": "^2.0.2" 362 | } 363 | }, 364 | "babel-helper-call-delegate": { 365 | "version": "6.24.1", 366 | "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", 367 | "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", 368 | "dev": true, 369 | "requires": { 370 | "babel-helper-hoist-variables": "^6.24.1", 371 | "babel-runtime": "^6.22.0", 372 | "babel-traverse": "^6.24.1", 373 | "babel-types": "^6.24.1" 374 | } 375 | }, 376 | "babel-helper-define-map": { 377 | "version": "6.26.0", 378 | "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", 379 | "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", 380 | "dev": true, 381 | "requires": { 382 | "babel-helper-function-name": "^6.24.1", 383 | "babel-runtime": "^6.26.0", 384 | "babel-types": "^6.26.0", 385 | "lodash": "^4.17.4" 386 | } 387 | }, 388 | "babel-helper-function-name": { 389 | "version": "6.24.1", 390 | "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", 391 | "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", 392 | "dev": true, 393 | "requires": { 394 | "babel-helper-get-function-arity": "^6.24.1", 395 | "babel-runtime": "^6.22.0", 396 | "babel-template": "^6.24.1", 397 | "babel-traverse": "^6.24.1", 398 | "babel-types": "^6.24.1" 399 | } 400 | }, 401 | "babel-helper-get-function-arity": { 402 | "version": "6.24.1", 403 | "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", 404 | "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", 405 | "dev": true, 406 | "requires": { 407 | "babel-runtime": "^6.22.0", 408 | "babel-types": "^6.24.1" 409 | } 410 | }, 411 | "babel-helper-hoist-variables": { 412 | "version": "6.24.1", 413 | "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", 414 | "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", 415 | "dev": true, 416 | "requires": { 417 | "babel-runtime": "^6.22.0", 418 | "babel-types": "^6.24.1" 419 | } 420 | }, 421 | "babel-helper-optimise-call-expression": { 422 | "version": "6.24.1", 423 | "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", 424 | "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", 425 | "dev": true, 426 | "requires": { 427 | "babel-runtime": "^6.22.0", 428 | "babel-types": "^6.24.1" 429 | } 430 | }, 431 | "babel-helper-regex": { 432 | "version": "6.26.0", 433 | "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", 434 | "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", 435 | "dev": true, 436 | "requires": { 437 | "babel-runtime": "^6.26.0", 438 | "babel-types": "^6.26.0", 439 | "lodash": "^4.17.4" 440 | } 441 | }, 442 | "babel-helper-replace-supers": { 443 | "version": "6.24.1", 444 | "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", 445 | "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", 446 | "dev": true, 447 | "requires": { 448 | "babel-helper-optimise-call-expression": "^6.24.1", 449 | "babel-messages": "^6.23.0", 450 | "babel-runtime": "^6.22.0", 451 | "babel-template": "^6.24.1", 452 | "babel-traverse": "^6.24.1", 453 | "babel-types": "^6.24.1" 454 | } 455 | }, 456 | "babel-helpers": { 457 | "version": "6.24.1", 458 | "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", 459 | "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", 460 | "dev": true, 461 | "requires": { 462 | "babel-runtime": "^6.22.0", 463 | "babel-template": "^6.24.1" 464 | } 465 | }, 466 | "babel-messages": { 467 | "version": "6.23.0", 468 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 469 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 470 | "dev": true, 471 | "requires": { 472 | "babel-runtime": "^6.22.0" 473 | } 474 | }, 475 | "babel-plugin-check-es2015-constants": { 476 | "version": "6.22.0", 477 | "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", 478 | "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", 479 | "dev": true, 480 | "requires": { 481 | "babel-runtime": "^6.22.0" 482 | } 483 | }, 484 | "babel-plugin-syntax-flow": { 485 | "version": "6.18.0", 486 | "resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", 487 | "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", 488 | "dev": true 489 | }, 490 | "babel-plugin-syntax-jsx": { 491 | "version": "6.18.0", 492 | "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", 493 | "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", 494 | "dev": true 495 | }, 496 | "babel-plugin-transform-es2015-arrow-functions": { 497 | "version": "6.22.0", 498 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", 499 | "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", 500 | "dev": true, 501 | "requires": { 502 | "babel-runtime": "^6.22.0" 503 | } 504 | }, 505 | "babel-plugin-transform-es2015-block-scoped-functions": { 506 | "version": "6.22.0", 507 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", 508 | "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", 509 | "dev": true, 510 | "requires": { 511 | "babel-runtime": "^6.22.0" 512 | } 513 | }, 514 | "babel-plugin-transform-es2015-block-scoping": { 515 | "version": "6.26.0", 516 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", 517 | "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", 518 | "dev": true, 519 | "requires": { 520 | "babel-runtime": "^6.26.0", 521 | "babel-template": "^6.26.0", 522 | "babel-traverse": "^6.26.0", 523 | "babel-types": "^6.26.0", 524 | "lodash": "^4.17.4" 525 | } 526 | }, 527 | "babel-plugin-transform-es2015-classes": { 528 | "version": "6.24.1", 529 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", 530 | "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", 531 | "dev": true, 532 | "requires": { 533 | "babel-helper-define-map": "^6.24.1", 534 | "babel-helper-function-name": "^6.24.1", 535 | "babel-helper-optimise-call-expression": "^6.24.1", 536 | "babel-helper-replace-supers": "^6.24.1", 537 | "babel-messages": "^6.23.0", 538 | "babel-runtime": "^6.22.0", 539 | "babel-template": "^6.24.1", 540 | "babel-traverse": "^6.24.1", 541 | "babel-types": "^6.24.1" 542 | } 543 | }, 544 | "babel-plugin-transform-es2015-computed-properties": { 545 | "version": "6.24.1", 546 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", 547 | "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", 548 | "dev": true, 549 | "requires": { 550 | "babel-runtime": "^6.22.0", 551 | "babel-template": "^6.24.1" 552 | } 553 | }, 554 | "babel-plugin-transform-es2015-destructuring": { 555 | "version": "6.23.0", 556 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", 557 | "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", 558 | "dev": true, 559 | "requires": { 560 | "babel-runtime": "^6.22.0" 561 | } 562 | }, 563 | "babel-plugin-transform-es2015-duplicate-keys": { 564 | "version": "6.24.1", 565 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", 566 | "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", 567 | "dev": true, 568 | "requires": { 569 | "babel-runtime": "^6.22.0", 570 | "babel-types": "^6.24.1" 571 | } 572 | }, 573 | "babel-plugin-transform-es2015-for-of": { 574 | "version": "6.23.0", 575 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", 576 | "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", 577 | "dev": true, 578 | "requires": { 579 | "babel-runtime": "^6.22.0" 580 | } 581 | }, 582 | "babel-plugin-transform-es2015-function-name": { 583 | "version": "6.24.1", 584 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", 585 | "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", 586 | "dev": true, 587 | "requires": { 588 | "babel-helper-function-name": "^6.24.1", 589 | "babel-runtime": "^6.22.0", 590 | "babel-types": "^6.24.1" 591 | } 592 | }, 593 | "babel-plugin-transform-es2015-literals": { 594 | "version": "6.22.0", 595 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", 596 | "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", 597 | "dev": true, 598 | "requires": { 599 | "babel-runtime": "^6.22.0" 600 | } 601 | }, 602 | "babel-plugin-transform-es2015-modules-amd": { 603 | "version": "6.24.1", 604 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", 605 | "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", 606 | "dev": true, 607 | "requires": { 608 | "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", 609 | "babel-runtime": "^6.22.0", 610 | "babel-template": "^6.24.1" 611 | } 612 | }, 613 | "babel-plugin-transform-es2015-modules-commonjs": { 614 | "version": "6.26.2", 615 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", 616 | "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", 617 | "dev": true, 618 | "requires": { 619 | "babel-plugin-transform-strict-mode": "^6.24.1", 620 | "babel-runtime": "^6.26.0", 621 | "babel-template": "^6.26.0", 622 | "babel-types": "^6.26.0" 623 | } 624 | }, 625 | "babel-plugin-transform-es2015-modules-systemjs": { 626 | "version": "6.24.1", 627 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", 628 | "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", 629 | "dev": true, 630 | "requires": { 631 | "babel-helper-hoist-variables": "^6.24.1", 632 | "babel-runtime": "^6.22.0", 633 | "babel-template": "^6.24.1" 634 | } 635 | }, 636 | "babel-plugin-transform-es2015-modules-umd": { 637 | "version": "6.24.1", 638 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", 639 | "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", 640 | "dev": true, 641 | "requires": { 642 | "babel-plugin-transform-es2015-modules-amd": "^6.24.1", 643 | "babel-runtime": "^6.22.0", 644 | "babel-template": "^6.24.1" 645 | } 646 | }, 647 | "babel-plugin-transform-es2015-object-super": { 648 | "version": "6.24.1", 649 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", 650 | "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", 651 | "dev": true, 652 | "requires": { 653 | "babel-helper-replace-supers": "^6.24.1", 654 | "babel-runtime": "^6.22.0" 655 | } 656 | }, 657 | "babel-plugin-transform-es2015-parameters": { 658 | "version": "6.24.1", 659 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", 660 | "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", 661 | "dev": true, 662 | "requires": { 663 | "babel-helper-call-delegate": "^6.24.1", 664 | "babel-helper-get-function-arity": "^6.24.1", 665 | "babel-runtime": "^6.22.0", 666 | "babel-template": "^6.24.1", 667 | "babel-traverse": "^6.24.1", 668 | "babel-types": "^6.24.1" 669 | } 670 | }, 671 | "babel-plugin-transform-es2015-shorthand-properties": { 672 | "version": "6.24.1", 673 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", 674 | "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", 675 | "dev": true, 676 | "requires": { 677 | "babel-runtime": "^6.22.0", 678 | "babel-types": "^6.24.1" 679 | } 680 | }, 681 | "babel-plugin-transform-es2015-spread": { 682 | "version": "6.22.0", 683 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", 684 | "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", 685 | "dev": true, 686 | "requires": { 687 | "babel-runtime": "^6.22.0" 688 | } 689 | }, 690 | "babel-plugin-transform-es2015-sticky-regex": { 691 | "version": "6.24.1", 692 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", 693 | "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", 694 | "dev": true, 695 | "requires": { 696 | "babel-helper-regex": "^6.24.1", 697 | "babel-runtime": "^6.22.0", 698 | "babel-types": "^6.24.1" 699 | } 700 | }, 701 | "babel-plugin-transform-es2015-template-literals": { 702 | "version": "6.22.0", 703 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", 704 | "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", 705 | "dev": true, 706 | "requires": { 707 | "babel-runtime": "^6.22.0" 708 | } 709 | }, 710 | "babel-plugin-transform-es2015-typeof-symbol": { 711 | "version": "6.23.0", 712 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", 713 | "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", 714 | "dev": true, 715 | "requires": { 716 | "babel-runtime": "^6.22.0" 717 | } 718 | }, 719 | "babel-plugin-transform-es2015-unicode-regex": { 720 | "version": "6.24.1", 721 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", 722 | "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", 723 | "dev": true, 724 | "requires": { 725 | "babel-helper-regex": "^6.24.1", 726 | "babel-runtime": "^6.22.0", 727 | "regexpu-core": "^2.0.0" 728 | } 729 | }, 730 | "babel-plugin-transform-flow-strip-types": { 731 | "version": "6.22.0", 732 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", 733 | "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", 734 | "dev": true, 735 | "requires": { 736 | "babel-plugin-syntax-flow": "^6.18.0", 737 | "babel-runtime": "^6.22.0" 738 | } 739 | }, 740 | "babel-plugin-transform-react-display-name": { 741 | "version": "6.25.0", 742 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", 743 | "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", 744 | "dev": true, 745 | "requires": { 746 | "babel-runtime": "^6.22.0" 747 | } 748 | }, 749 | "babel-plugin-transform-react-jsx": { 750 | "version": "6.24.1", 751 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", 752 | "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", 753 | "dev": true, 754 | "requires": { 755 | "babel-helper-builder-react-jsx": "^6.24.1", 756 | "babel-plugin-syntax-jsx": "^6.8.0", 757 | "babel-runtime": "^6.22.0" 758 | } 759 | }, 760 | "babel-plugin-transform-react-jsx-self": { 761 | "version": "6.22.0", 762 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", 763 | "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", 764 | "dev": true, 765 | "requires": { 766 | "babel-plugin-syntax-jsx": "^6.8.0", 767 | "babel-runtime": "^6.22.0" 768 | } 769 | }, 770 | "babel-plugin-transform-react-jsx-source": { 771 | "version": "6.22.0", 772 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", 773 | "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", 774 | "dev": true, 775 | "requires": { 776 | "babel-plugin-syntax-jsx": "^6.8.0", 777 | "babel-runtime": "^6.22.0" 778 | } 779 | }, 780 | "babel-plugin-transform-regenerator": { 781 | "version": "6.26.0", 782 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", 783 | "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", 784 | "dev": true, 785 | "requires": { 786 | "regenerator-transform": "^0.10.0" 787 | } 788 | }, 789 | "babel-plugin-transform-strict-mode": { 790 | "version": "6.24.1", 791 | "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", 792 | "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", 793 | "dev": true, 794 | "requires": { 795 | "babel-runtime": "^6.22.0", 796 | "babel-types": "^6.24.1" 797 | } 798 | }, 799 | "babel-preset-es2015": { 800 | "version": "6.24.1", 801 | "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", 802 | "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", 803 | "dev": true, 804 | "requires": { 805 | "babel-plugin-check-es2015-constants": "^6.22.0", 806 | "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", 807 | "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", 808 | "babel-plugin-transform-es2015-block-scoping": "^6.24.1", 809 | "babel-plugin-transform-es2015-classes": "^6.24.1", 810 | "babel-plugin-transform-es2015-computed-properties": "^6.24.1", 811 | "babel-plugin-transform-es2015-destructuring": "^6.22.0", 812 | "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", 813 | "babel-plugin-transform-es2015-for-of": "^6.22.0", 814 | "babel-plugin-transform-es2015-function-name": "^6.24.1", 815 | "babel-plugin-transform-es2015-literals": "^6.22.0", 816 | "babel-plugin-transform-es2015-modules-amd": "^6.24.1", 817 | "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", 818 | "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", 819 | "babel-plugin-transform-es2015-modules-umd": "^6.24.1", 820 | "babel-plugin-transform-es2015-object-super": "^6.24.1", 821 | "babel-plugin-transform-es2015-parameters": "^6.24.1", 822 | "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", 823 | "babel-plugin-transform-es2015-spread": "^6.22.0", 824 | "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", 825 | "babel-plugin-transform-es2015-template-literals": "^6.22.0", 826 | "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", 827 | "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", 828 | "babel-plugin-transform-regenerator": "^6.24.1" 829 | } 830 | }, 831 | "babel-preset-flow": { 832 | "version": "6.23.0", 833 | "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", 834 | "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", 835 | "dev": true, 836 | "requires": { 837 | "babel-plugin-transform-flow-strip-types": "^6.22.0" 838 | } 839 | }, 840 | "babel-preset-react": { 841 | "version": "6.24.1", 842 | "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", 843 | "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", 844 | "dev": true, 845 | "requires": { 846 | "babel-plugin-syntax-jsx": "^6.3.13", 847 | "babel-plugin-transform-react-display-name": "^6.23.0", 848 | "babel-plugin-transform-react-jsx": "^6.24.1", 849 | "babel-plugin-transform-react-jsx-self": "^6.22.0", 850 | "babel-plugin-transform-react-jsx-source": "^6.22.0", 851 | "babel-preset-flow": "^6.23.0" 852 | } 853 | }, 854 | "babel-register": { 855 | "version": "6.26.0", 856 | "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", 857 | "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", 858 | "dev": true, 859 | "requires": { 860 | "babel-core": "^6.26.0", 861 | "babel-runtime": "^6.26.0", 862 | "core-js": "^2.5.0", 863 | "home-or-tmp": "^2.0.0", 864 | "lodash": "^4.17.4", 865 | "mkdirp": "^0.5.1", 866 | "source-map-support": "^0.4.15" 867 | } 868 | }, 869 | "babel-runtime": { 870 | "version": "6.26.0", 871 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 872 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 873 | "dev": true, 874 | "requires": { 875 | "core-js": "^2.4.0", 876 | "regenerator-runtime": "^0.11.0" 877 | } 878 | }, 879 | "babel-template": { 880 | "version": "6.26.0", 881 | "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", 882 | "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", 883 | "dev": true, 884 | "requires": { 885 | "babel-runtime": "^6.26.0", 886 | "babel-traverse": "^6.26.0", 887 | "babel-types": "^6.26.0", 888 | "babylon": "^6.18.0", 889 | "lodash": "^4.17.4" 890 | } 891 | }, 892 | "babel-traverse": { 893 | "version": "6.26.0", 894 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 895 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 896 | "dev": true, 897 | "requires": { 898 | "babel-code-frame": "^6.26.0", 899 | "babel-messages": "^6.23.0", 900 | "babel-runtime": "^6.26.0", 901 | "babel-types": "^6.26.0", 902 | "babylon": "^6.18.0", 903 | "debug": "^2.6.8", 904 | "globals": "^9.18.0", 905 | "invariant": "^2.2.2", 906 | "lodash": "^4.17.4" 907 | }, 908 | "dependencies": { 909 | "debug": { 910 | "version": "2.6.9", 911 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 912 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 913 | "dev": true, 914 | "requires": { 915 | "ms": "2.0.0" 916 | } 917 | } 918 | } 919 | }, 920 | "babel-types": { 921 | "version": "6.26.0", 922 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 923 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 924 | "dev": true, 925 | "requires": { 926 | "babel-runtime": "^6.26.0", 927 | "esutils": "^2.0.2", 928 | "lodash": "^4.17.4", 929 | "to-fast-properties": "^1.0.3" 930 | } 931 | }, 932 | "babylon": { 933 | "version": "6.18.0", 934 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 935 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 936 | "dev": true 937 | }, 938 | "balanced-match": { 939 | "version": "1.0.0", 940 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 941 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 942 | "dev": true 943 | }, 944 | "bcrypt-pbkdf": { 945 | "version": "1.0.2", 946 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 947 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 948 | "dev": true, 949 | "requires": { 950 | "tweetnacl": "^0.14.3" 951 | } 952 | }, 953 | "boolbase": { 954 | "version": "1.0.0", 955 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 956 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 957 | "dev": true 958 | }, 959 | "brace-expansion": { 960 | "version": "1.1.11", 961 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 962 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 963 | "dev": true, 964 | "requires": { 965 | "balanced-match": "^1.0.0", 966 | "concat-map": "0.0.1" 967 | } 968 | }, 969 | "browser-process-hrtime": { 970 | "version": "0.1.3", 971 | "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", 972 | "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", 973 | "dev": true 974 | }, 975 | "browser-stdout": { 976 | "version": "1.3.1", 977 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 978 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 979 | "dev": true 980 | }, 981 | "builtin-modules": { 982 | "version": "1.1.1", 983 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 984 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 985 | "dev": true 986 | }, 987 | "caseless": { 988 | "version": "0.12.0", 989 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 990 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 991 | "dev": true 992 | }, 993 | "chai": { 994 | "version": "4.2.0", 995 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", 996 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", 997 | "dev": true, 998 | "requires": { 999 | "assertion-error": "^1.1.0", 1000 | "check-error": "^1.0.2", 1001 | "deep-eql": "^3.0.1", 1002 | "get-func-name": "^2.0.0", 1003 | "pathval": "^1.1.0", 1004 | "type-detect": "^4.0.5" 1005 | } 1006 | }, 1007 | "chalk": { 1008 | "version": "1.1.3", 1009 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1010 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1011 | "dev": true, 1012 | "requires": { 1013 | "ansi-styles": "^2.2.1", 1014 | "escape-string-regexp": "^1.0.2", 1015 | "has-ansi": "^2.0.0", 1016 | "strip-ansi": "^3.0.0", 1017 | "supports-color": "^2.0.0" 1018 | }, 1019 | "dependencies": { 1020 | "supports-color": { 1021 | "version": "2.0.0", 1022 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1023 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1024 | "dev": true 1025 | } 1026 | } 1027 | }, 1028 | "check-error": { 1029 | "version": "1.0.2", 1030 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 1031 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 1032 | "dev": true 1033 | }, 1034 | "cheerio": { 1035 | "version": "1.0.0-rc.2", 1036 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", 1037 | "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", 1038 | "dev": true, 1039 | "requires": { 1040 | "css-select": "~1.2.0", 1041 | "dom-serializer": "~0.1.0", 1042 | "entities": "~1.1.1", 1043 | "htmlparser2": "^3.9.1", 1044 | "lodash": "^4.15.0", 1045 | "parse5": "^3.0.1" 1046 | } 1047 | }, 1048 | "color-convert": { 1049 | "version": "1.9.3", 1050 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1051 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1052 | "dev": true, 1053 | "requires": { 1054 | "color-name": "1.1.3" 1055 | } 1056 | }, 1057 | "color-name": { 1058 | "version": "1.1.3", 1059 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1060 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1061 | "dev": true 1062 | }, 1063 | "colors": { 1064 | "version": "0.5.1", 1065 | "resolved": "http://registry.npmjs.org/colors/-/colors-0.5.1.tgz", 1066 | "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", 1067 | "dev": true 1068 | }, 1069 | "combined-stream": { 1070 | "version": "1.0.7", 1071 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", 1072 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", 1073 | "dev": true, 1074 | "requires": { 1075 | "delayed-stream": "~1.0.0" 1076 | } 1077 | }, 1078 | "commander": { 1079 | "version": "2.15.1", 1080 | "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 1081 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", 1082 | "dev": true 1083 | }, 1084 | "concat-map": { 1085 | "version": "0.0.1", 1086 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1087 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1088 | "dev": true 1089 | }, 1090 | "convert-source-map": { 1091 | "version": "1.6.0", 1092 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 1093 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 1094 | "dev": true, 1095 | "requires": { 1096 | "safe-buffer": "~5.1.1" 1097 | } 1098 | }, 1099 | "core-js": { 1100 | "version": "2.6.0", 1101 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz", 1102 | "integrity": "sha512-kLRC6ncVpuEW/1kwrOXYX6KQASCVtrh1gQr/UiaVgFlf9WE5Vp+lNe5+h3LuMr5PAucWnnEXwH0nQHRH/gpGtw==", 1103 | "dev": true 1104 | }, 1105 | "core-util-is": { 1106 | "version": "1.0.2", 1107 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1108 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 1109 | "dev": true 1110 | }, 1111 | "css-select": { 1112 | "version": "1.2.0", 1113 | "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 1114 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 1115 | "dev": true, 1116 | "requires": { 1117 | "boolbase": "~1.0.0", 1118 | "css-what": "2.1", 1119 | "domutils": "1.5.1", 1120 | "nth-check": "~1.0.1" 1121 | } 1122 | }, 1123 | "css-what": { 1124 | "version": "2.1.2", 1125 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", 1126 | "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", 1127 | "dev": true 1128 | }, 1129 | "cssom": { 1130 | "version": "0.3.4", 1131 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", 1132 | "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", 1133 | "dev": true 1134 | }, 1135 | "cssstyle": { 1136 | "version": "1.1.1", 1137 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", 1138 | "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", 1139 | "dev": true, 1140 | "requires": { 1141 | "cssom": "0.3.x" 1142 | } 1143 | }, 1144 | "csstype": { 1145 | "version": "2.5.7", 1146 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz", 1147 | "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==", 1148 | "dev": true 1149 | }, 1150 | "dashdash": { 1151 | "version": "1.14.1", 1152 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1153 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1154 | "dev": true, 1155 | "requires": { 1156 | "assert-plus": "^1.0.0" 1157 | } 1158 | }, 1159 | "data-urls": { 1160 | "version": "1.1.0", 1161 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", 1162 | "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", 1163 | "dev": true, 1164 | "requires": { 1165 | "abab": "^2.0.0", 1166 | "whatwg-mimetype": "^2.2.0", 1167 | "whatwg-url": "^7.0.0" 1168 | }, 1169 | "dependencies": { 1170 | "whatwg-url": { 1171 | "version": "7.0.0", 1172 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", 1173 | "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", 1174 | "dev": true, 1175 | "requires": { 1176 | "lodash.sortby": "^4.7.0", 1177 | "tr46": "^1.0.1", 1178 | "webidl-conversions": "^4.0.2" 1179 | } 1180 | } 1181 | } 1182 | }, 1183 | "debug": { 1184 | "version": "3.1.0", 1185 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1186 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1187 | "dev": true, 1188 | "requires": { 1189 | "ms": "2.0.0" 1190 | } 1191 | }, 1192 | "deep-eql": { 1193 | "version": "3.0.1", 1194 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 1195 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 1196 | "dev": true, 1197 | "requires": { 1198 | "type-detect": "^4.0.0" 1199 | } 1200 | }, 1201 | "deep-is": { 1202 | "version": "0.1.3", 1203 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1204 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 1205 | "dev": true 1206 | }, 1207 | "define-properties": { 1208 | "version": "1.1.3", 1209 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1210 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1211 | "dev": true, 1212 | "requires": { 1213 | "object-keys": "^1.0.12" 1214 | } 1215 | }, 1216 | "delayed-stream": { 1217 | "version": "1.0.0", 1218 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1219 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 1220 | "dev": true 1221 | }, 1222 | "detect-indent": { 1223 | "version": "4.0.0", 1224 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", 1225 | "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", 1226 | "dev": true, 1227 | "requires": { 1228 | "repeating": "^2.0.0" 1229 | } 1230 | }, 1231 | "diff": { 1232 | "version": "3.5.0", 1233 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 1234 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 1235 | "dev": true 1236 | }, 1237 | "discontinuous-range": { 1238 | "version": "1.0.0", 1239 | "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", 1240 | "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", 1241 | "dev": true 1242 | }, 1243 | "doctrine": { 1244 | "version": "0.7.2", 1245 | "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", 1246 | "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", 1247 | "dev": true, 1248 | "requires": { 1249 | "esutils": "^1.1.6", 1250 | "isarray": "0.0.1" 1251 | }, 1252 | "dependencies": { 1253 | "esutils": { 1254 | "version": "1.1.6", 1255 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", 1256 | "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", 1257 | "dev": true 1258 | } 1259 | } 1260 | }, 1261 | "dom-serializer": { 1262 | "version": "0.1.0", 1263 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", 1264 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", 1265 | "dev": true, 1266 | "requires": { 1267 | "domelementtype": "~1.1.1", 1268 | "entities": "~1.1.1" 1269 | }, 1270 | "dependencies": { 1271 | "domelementtype": { 1272 | "version": "1.1.3", 1273 | "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 1274 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", 1275 | "dev": true 1276 | } 1277 | } 1278 | }, 1279 | "domelementtype": { 1280 | "version": "1.3.1", 1281 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", 1282 | "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", 1283 | "dev": true 1284 | }, 1285 | "domexception": { 1286 | "version": "1.0.1", 1287 | "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", 1288 | "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", 1289 | "dev": true, 1290 | "requires": { 1291 | "webidl-conversions": "^4.0.2" 1292 | } 1293 | }, 1294 | "domhandler": { 1295 | "version": "2.4.2", 1296 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", 1297 | "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", 1298 | "dev": true, 1299 | "requires": { 1300 | "domelementtype": "1" 1301 | } 1302 | }, 1303 | "domutils": { 1304 | "version": "1.5.1", 1305 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 1306 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 1307 | "dev": true, 1308 | "requires": { 1309 | "dom-serializer": "0", 1310 | "domelementtype": "1" 1311 | } 1312 | }, 1313 | "ecc-jsbn": { 1314 | "version": "0.1.2", 1315 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1316 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1317 | "dev": true, 1318 | "requires": { 1319 | "jsbn": "~0.1.0", 1320 | "safer-buffer": "^2.1.0" 1321 | } 1322 | }, 1323 | "entities": { 1324 | "version": "1.1.2", 1325 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", 1326 | "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", 1327 | "dev": true 1328 | }, 1329 | "enzyme": { 1330 | "version": "3.7.0", 1331 | "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.7.0.tgz", 1332 | "integrity": "sha512-QLWx+krGK6iDNyR1KlH5YPZqxZCQaVF6ike1eDJAOg0HvSkSCVImPsdWaNw6v+VrnK92Kg8jIOYhuOSS9sBpyg==", 1333 | "dev": true, 1334 | "requires": { 1335 | "array.prototype.flat": "^1.2.1", 1336 | "cheerio": "^1.0.0-rc.2", 1337 | "function.prototype.name": "^1.1.0", 1338 | "has": "^1.0.3", 1339 | "is-boolean-object": "^1.0.0", 1340 | "is-callable": "^1.1.4", 1341 | "is-number-object": "^1.0.3", 1342 | "is-string": "^1.0.4", 1343 | "is-subset": "^0.1.1", 1344 | "lodash.escape": "^4.0.1", 1345 | "lodash.isequal": "^4.5.0", 1346 | "object-inspect": "^1.6.0", 1347 | "object-is": "^1.0.1", 1348 | "object.assign": "^4.1.0", 1349 | "object.entries": "^1.0.4", 1350 | "object.values": "^1.0.4", 1351 | "raf": "^3.4.0", 1352 | "rst-selector-parser": "^2.2.3", 1353 | "string.prototype.trim": "^1.1.2" 1354 | } 1355 | }, 1356 | "enzyme-adapter-react-16": { 1357 | "version": "1.7.0", 1358 | "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.7.0.tgz", 1359 | "integrity": "sha512-rDr0xlnnFPffAPYrvG97QYJaRl9unVDslKee33wTStsBEwZTkESX1H7VHGT5eUc6ifNzPgOJGvSh2zpHT4gXjA==", 1360 | "dev": true, 1361 | "requires": { 1362 | "enzyme-adapter-utils": "^1.9.0", 1363 | "function.prototype.name": "^1.1.0", 1364 | "object.assign": "^4.1.0", 1365 | "object.values": "^1.0.4", 1366 | "prop-types": "^15.6.2", 1367 | "react-is": "^16.6.1", 1368 | "react-test-renderer": "^16.0.0-0" 1369 | } 1370 | }, 1371 | "enzyme-adapter-utils": { 1372 | "version": "1.9.0", 1373 | "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.9.0.tgz", 1374 | "integrity": "sha512-uMe4xw4l/Iloh2Fz+EO23XUYMEQXj5k/5ioLUXCNOUCI8Dml5XQMO9+QwUq962hBsY5qftfHHns+d990byWHvg==", 1375 | "dev": true, 1376 | "requires": { 1377 | "function.prototype.name": "^1.1.0", 1378 | "object.assign": "^4.1.0", 1379 | "prop-types": "^15.6.2", 1380 | "semver": "^5.6.0" 1381 | } 1382 | }, 1383 | "es-abstract": { 1384 | "version": "1.12.0", 1385 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", 1386 | "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", 1387 | "dev": true, 1388 | "requires": { 1389 | "es-to-primitive": "^1.1.1", 1390 | "function-bind": "^1.1.1", 1391 | "has": "^1.0.1", 1392 | "is-callable": "^1.1.3", 1393 | "is-regex": "^1.0.4" 1394 | } 1395 | }, 1396 | "es-to-primitive": { 1397 | "version": "1.2.0", 1398 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 1399 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 1400 | "dev": true, 1401 | "requires": { 1402 | "is-callable": "^1.1.4", 1403 | "is-date-object": "^1.0.1", 1404 | "is-symbol": "^1.0.2" 1405 | } 1406 | }, 1407 | "escape-string-regexp": { 1408 | "version": "1.0.5", 1409 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1410 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1411 | "dev": true 1412 | }, 1413 | "escodegen": { 1414 | "version": "1.11.0", 1415 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", 1416 | "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", 1417 | "dev": true, 1418 | "requires": { 1419 | "esprima": "^3.1.3", 1420 | "estraverse": "^4.2.0", 1421 | "esutils": "^2.0.2", 1422 | "optionator": "^0.8.1", 1423 | "source-map": "~0.6.1" 1424 | }, 1425 | "dependencies": { 1426 | "esprima": { 1427 | "version": "3.1.3", 1428 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 1429 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", 1430 | "dev": true 1431 | }, 1432 | "source-map": { 1433 | "version": "0.6.1", 1434 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1435 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1436 | "dev": true, 1437 | "optional": true 1438 | } 1439 | } 1440 | }, 1441 | "esprima": { 1442 | "version": "4.0.1", 1443 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1444 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1445 | "dev": true 1446 | }, 1447 | "estraverse": { 1448 | "version": "4.2.0", 1449 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1450 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1451 | "dev": true 1452 | }, 1453 | "esutils": { 1454 | "version": "2.0.2", 1455 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1456 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1457 | "dev": true 1458 | }, 1459 | "extend": { 1460 | "version": "3.0.2", 1461 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1462 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 1463 | "dev": true 1464 | }, 1465 | "extsprintf": { 1466 | "version": "1.3.0", 1467 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1468 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 1469 | "dev": true 1470 | }, 1471 | "fast-deep-equal": { 1472 | "version": "2.0.1", 1473 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 1474 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 1475 | "dev": true 1476 | }, 1477 | "fast-json-stable-stringify": { 1478 | "version": "2.0.0", 1479 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 1480 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 1481 | "dev": true 1482 | }, 1483 | "fast-levenshtein": { 1484 | "version": "2.0.6", 1485 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1486 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1487 | "dev": true 1488 | }, 1489 | "forever-agent": { 1490 | "version": "0.6.1", 1491 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1492 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1493 | "dev": true 1494 | }, 1495 | "form-data": { 1496 | "version": "2.3.3", 1497 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1498 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1499 | "dev": true, 1500 | "requires": { 1501 | "asynckit": "^0.4.0", 1502 | "combined-stream": "^1.0.6", 1503 | "mime-types": "^2.1.12" 1504 | } 1505 | }, 1506 | "fs-extra": { 1507 | "version": "7.0.1", 1508 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 1509 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 1510 | "dev": true, 1511 | "requires": { 1512 | "graceful-fs": "^4.1.2", 1513 | "jsonfile": "^4.0.0", 1514 | "universalify": "^0.1.0" 1515 | } 1516 | }, 1517 | "fs.realpath": { 1518 | "version": "1.0.0", 1519 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1520 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1521 | "dev": true 1522 | }, 1523 | "function-bind": { 1524 | "version": "1.1.1", 1525 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1526 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1527 | "dev": true 1528 | }, 1529 | "function.prototype.name": { 1530 | "version": "1.1.0", 1531 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", 1532 | "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", 1533 | "dev": true, 1534 | "requires": { 1535 | "define-properties": "^1.1.2", 1536 | "function-bind": "^1.1.1", 1537 | "is-callable": "^1.1.3" 1538 | } 1539 | }, 1540 | "get-func-name": { 1541 | "version": "2.0.0", 1542 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1543 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 1544 | "dev": true 1545 | }, 1546 | "getpass": { 1547 | "version": "0.1.7", 1548 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1549 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1550 | "dev": true, 1551 | "requires": { 1552 | "assert-plus": "^1.0.0" 1553 | } 1554 | }, 1555 | "glob": { 1556 | "version": "7.1.2", 1557 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1558 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1559 | "dev": true, 1560 | "requires": { 1561 | "fs.realpath": "^1.0.0", 1562 | "inflight": "^1.0.4", 1563 | "inherits": "2", 1564 | "minimatch": "^3.0.4", 1565 | "once": "^1.3.0", 1566 | "path-is-absolute": "^1.0.0" 1567 | } 1568 | }, 1569 | "globals": { 1570 | "version": "9.18.0", 1571 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 1572 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 1573 | "dev": true 1574 | }, 1575 | "graceful-fs": { 1576 | "version": "4.1.15", 1577 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 1578 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 1579 | "dev": true 1580 | }, 1581 | "growl": { 1582 | "version": "1.10.5", 1583 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1584 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1585 | "dev": true 1586 | }, 1587 | "handlebars": { 1588 | "version": "4.1.2", 1589 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", 1590 | "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", 1591 | "dev": true, 1592 | "requires": { 1593 | "neo-async": "^2.6.0", 1594 | "optimist": "^0.6.1", 1595 | "source-map": "^0.6.1", 1596 | "uglify-js": "^3.1.4" 1597 | }, 1598 | "dependencies": { 1599 | "source-map": { 1600 | "version": "0.6.1", 1601 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1602 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1603 | "dev": true 1604 | } 1605 | } 1606 | }, 1607 | "har-schema": { 1608 | "version": "2.0.0", 1609 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1610 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 1611 | "dev": true 1612 | }, 1613 | "har-validator": { 1614 | "version": "5.1.3", 1615 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 1616 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 1617 | "dev": true, 1618 | "requires": { 1619 | "ajv": "^6.5.5", 1620 | "har-schema": "^2.0.0" 1621 | } 1622 | }, 1623 | "has": { 1624 | "version": "1.0.3", 1625 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1626 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1627 | "dev": true, 1628 | "requires": { 1629 | "function-bind": "^1.1.1" 1630 | } 1631 | }, 1632 | "has-ansi": { 1633 | "version": "2.0.0", 1634 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1635 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1636 | "dev": true, 1637 | "requires": { 1638 | "ansi-regex": "^2.0.0" 1639 | } 1640 | }, 1641 | "has-flag": { 1642 | "version": "3.0.0", 1643 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1644 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1645 | "dev": true 1646 | }, 1647 | "has-symbols": { 1648 | "version": "1.0.0", 1649 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 1650 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 1651 | "dev": true 1652 | }, 1653 | "he": { 1654 | "version": "1.1.1", 1655 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 1656 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 1657 | "dev": true 1658 | }, 1659 | "highlight.js": { 1660 | "version": "9.15.6", 1661 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", 1662 | "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", 1663 | "dev": true 1664 | }, 1665 | "home-or-tmp": { 1666 | "version": "2.0.0", 1667 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", 1668 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", 1669 | "dev": true, 1670 | "requires": { 1671 | "os-homedir": "^1.0.0", 1672 | "os-tmpdir": "^1.0.1" 1673 | } 1674 | }, 1675 | "html-encoding-sniffer": { 1676 | "version": "1.0.2", 1677 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", 1678 | "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", 1679 | "dev": true, 1680 | "requires": { 1681 | "whatwg-encoding": "^1.0.1" 1682 | } 1683 | }, 1684 | "htmlparser2": { 1685 | "version": "3.10.0", 1686 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", 1687 | "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", 1688 | "dev": true, 1689 | "requires": { 1690 | "domelementtype": "^1.3.0", 1691 | "domhandler": "^2.3.0", 1692 | "domutils": "^1.5.1", 1693 | "entities": "^1.1.1", 1694 | "inherits": "^2.0.1", 1695 | "readable-stream": "^3.0.6" 1696 | } 1697 | }, 1698 | "http-signature": { 1699 | "version": "1.2.0", 1700 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1701 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1702 | "dev": true, 1703 | "requires": { 1704 | "assert-plus": "^1.0.0", 1705 | "jsprim": "^1.2.2", 1706 | "sshpk": "^1.7.0" 1707 | } 1708 | }, 1709 | "iconv-lite": { 1710 | "version": "0.4.24", 1711 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1712 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1713 | "dev": true, 1714 | "requires": { 1715 | "safer-buffer": ">= 2.1.2 < 3" 1716 | } 1717 | }, 1718 | "inflight": { 1719 | "version": "1.0.6", 1720 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1721 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1722 | "dev": true, 1723 | "requires": { 1724 | "once": "^1.3.0", 1725 | "wrappy": "1" 1726 | } 1727 | }, 1728 | "inherits": { 1729 | "version": "2.0.3", 1730 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1731 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1732 | "dev": true 1733 | }, 1734 | "interpret": { 1735 | "version": "1.2.0", 1736 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", 1737 | "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", 1738 | "dev": true 1739 | }, 1740 | "invariant": { 1741 | "version": "2.2.4", 1742 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 1743 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 1744 | "dev": true, 1745 | "requires": { 1746 | "loose-envify": "^1.0.0" 1747 | } 1748 | }, 1749 | "is-boolean-object": { 1750 | "version": "1.0.0", 1751 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", 1752 | "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", 1753 | "dev": true 1754 | }, 1755 | "is-callable": { 1756 | "version": "1.1.4", 1757 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 1758 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", 1759 | "dev": true 1760 | }, 1761 | "is-date-object": { 1762 | "version": "1.0.1", 1763 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 1764 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 1765 | "dev": true 1766 | }, 1767 | "is-finite": { 1768 | "version": "1.0.2", 1769 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1770 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1771 | "dev": true, 1772 | "requires": { 1773 | "number-is-nan": "^1.0.0" 1774 | } 1775 | }, 1776 | "is-number-object": { 1777 | "version": "1.0.3", 1778 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", 1779 | "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", 1780 | "dev": true 1781 | }, 1782 | "is-regex": { 1783 | "version": "1.0.4", 1784 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 1785 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 1786 | "dev": true, 1787 | "requires": { 1788 | "has": "^1.0.1" 1789 | } 1790 | }, 1791 | "is-string": { 1792 | "version": "1.0.4", 1793 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", 1794 | "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", 1795 | "dev": true 1796 | }, 1797 | "is-subset": { 1798 | "version": "0.1.1", 1799 | "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", 1800 | "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", 1801 | "dev": true 1802 | }, 1803 | "is-symbol": { 1804 | "version": "1.0.2", 1805 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 1806 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 1807 | "dev": true, 1808 | "requires": { 1809 | "has-symbols": "^1.0.0" 1810 | } 1811 | }, 1812 | "is-typedarray": { 1813 | "version": "1.0.0", 1814 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1815 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1816 | "dev": true 1817 | }, 1818 | "isarray": { 1819 | "version": "0.0.1", 1820 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1821 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1822 | "dev": true 1823 | }, 1824 | "isstream": { 1825 | "version": "0.1.2", 1826 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1827 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1828 | "dev": true 1829 | }, 1830 | "js-tokens": { 1831 | "version": "4.0.0", 1832 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1833 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1834 | "dev": true 1835 | }, 1836 | "js-yaml": { 1837 | "version": "3.13.1", 1838 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1839 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1840 | "dev": true, 1841 | "requires": { 1842 | "argparse": "^1.0.7", 1843 | "esprima": "^4.0.0" 1844 | } 1845 | }, 1846 | "jsbn": { 1847 | "version": "0.1.1", 1848 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1849 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1850 | "dev": true 1851 | }, 1852 | "jsdom": { 1853 | "version": "11.12.0", 1854 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", 1855 | "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", 1856 | "dev": true, 1857 | "requires": { 1858 | "abab": "^2.0.0", 1859 | "acorn": "^5.5.3", 1860 | "acorn-globals": "^4.1.0", 1861 | "array-equal": "^1.0.0", 1862 | "cssom": ">= 0.3.2 < 0.4.0", 1863 | "cssstyle": "^1.0.0", 1864 | "data-urls": "^1.0.0", 1865 | "domexception": "^1.0.1", 1866 | "escodegen": "^1.9.1", 1867 | "html-encoding-sniffer": "^1.0.2", 1868 | "left-pad": "^1.3.0", 1869 | "nwsapi": "^2.0.7", 1870 | "parse5": "4.0.0", 1871 | "pn": "^1.1.0", 1872 | "request": "^2.87.0", 1873 | "request-promise-native": "^1.0.5", 1874 | "sax": "^1.2.4", 1875 | "symbol-tree": "^3.2.2", 1876 | "tough-cookie": "^2.3.4", 1877 | "w3c-hr-time": "^1.0.1", 1878 | "webidl-conversions": "^4.0.2", 1879 | "whatwg-encoding": "^1.0.3", 1880 | "whatwg-mimetype": "^2.1.0", 1881 | "whatwg-url": "^6.4.1", 1882 | "ws": "^5.2.0", 1883 | "xml-name-validator": "^3.0.0" 1884 | }, 1885 | "dependencies": { 1886 | "parse5": { 1887 | "version": "4.0.0", 1888 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", 1889 | "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", 1890 | "dev": true 1891 | } 1892 | } 1893 | }, 1894 | "jsesc": { 1895 | "version": "1.3.0", 1896 | "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", 1897 | "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", 1898 | "dev": true 1899 | }, 1900 | "json-schema": { 1901 | "version": "0.2.3", 1902 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1903 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1904 | "dev": true 1905 | }, 1906 | "json-schema-traverse": { 1907 | "version": "0.4.1", 1908 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1909 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1910 | "dev": true 1911 | }, 1912 | "json-stringify-safe": { 1913 | "version": "5.0.1", 1914 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1915 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1916 | "dev": true 1917 | }, 1918 | "json5": { 1919 | "version": "0.5.1", 1920 | "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", 1921 | "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", 1922 | "dev": true 1923 | }, 1924 | "jsonfile": { 1925 | "version": "4.0.0", 1926 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1927 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 1928 | "dev": true, 1929 | "requires": { 1930 | "graceful-fs": "^4.1.6" 1931 | } 1932 | }, 1933 | "jsprim": { 1934 | "version": "1.4.1", 1935 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1936 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1937 | "dev": true, 1938 | "requires": { 1939 | "assert-plus": "1.0.0", 1940 | "extsprintf": "1.3.0", 1941 | "json-schema": "0.2.3", 1942 | "verror": "1.10.0" 1943 | } 1944 | }, 1945 | "left-pad": { 1946 | "version": "1.3.0", 1947 | "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", 1948 | "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", 1949 | "dev": true 1950 | }, 1951 | "levn": { 1952 | "version": "0.3.0", 1953 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1954 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1955 | "dev": true, 1956 | "requires": { 1957 | "prelude-ls": "~1.1.2", 1958 | "type-check": "~0.3.2" 1959 | } 1960 | }, 1961 | "lodash": { 1962 | "version": "4.17.11", 1963 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 1964 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 1965 | "dev": true 1966 | }, 1967 | "lodash.escape": { 1968 | "version": "4.0.1", 1969 | "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", 1970 | "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", 1971 | "dev": true 1972 | }, 1973 | "lodash.flattendeep": { 1974 | "version": "4.4.0", 1975 | "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", 1976 | "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", 1977 | "dev": true 1978 | }, 1979 | "lodash.get": { 1980 | "version": "4.4.2", 1981 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 1982 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", 1983 | "dev": true 1984 | }, 1985 | "lodash.isequal": { 1986 | "version": "4.5.0", 1987 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 1988 | "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", 1989 | "dev": true 1990 | }, 1991 | "lodash.sortby": { 1992 | "version": "4.7.0", 1993 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 1994 | "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", 1995 | "dev": true 1996 | }, 1997 | "lolex": { 1998 | "version": "3.0.0", 1999 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", 2000 | "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", 2001 | "dev": true 2002 | }, 2003 | "loose-envify": { 2004 | "version": "1.4.0", 2005 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2006 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2007 | "dev": true, 2008 | "requires": { 2009 | "js-tokens": "^3.0.0 || ^4.0.0" 2010 | } 2011 | }, 2012 | "marked": { 2013 | "version": "0.4.0", 2014 | "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", 2015 | "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", 2016 | "dev": true 2017 | }, 2018 | "mime-db": { 2019 | "version": "1.37.0", 2020 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", 2021 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", 2022 | "dev": true 2023 | }, 2024 | "mime-types": { 2025 | "version": "2.1.21", 2026 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", 2027 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", 2028 | "dev": true, 2029 | "requires": { 2030 | "mime-db": "~1.37.0" 2031 | } 2032 | }, 2033 | "minimatch": { 2034 | "version": "3.0.4", 2035 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2036 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2037 | "dev": true, 2038 | "requires": { 2039 | "brace-expansion": "^1.1.7" 2040 | } 2041 | }, 2042 | "minimist": { 2043 | "version": "0.0.8", 2044 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2045 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2046 | "dev": true 2047 | }, 2048 | "mkdirp": { 2049 | "version": "0.5.1", 2050 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2051 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2052 | "dev": true, 2053 | "requires": { 2054 | "minimist": "0.0.8" 2055 | } 2056 | }, 2057 | "mocha": { 2058 | "version": "5.2.0", 2059 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", 2060 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", 2061 | "dev": true, 2062 | "requires": { 2063 | "browser-stdout": "1.3.1", 2064 | "commander": "2.15.1", 2065 | "debug": "3.1.0", 2066 | "diff": "3.5.0", 2067 | "escape-string-regexp": "1.0.5", 2068 | "glob": "7.1.2", 2069 | "growl": "1.10.5", 2070 | "he": "1.1.1", 2071 | "minimatch": "3.0.4", 2072 | "mkdirp": "0.5.1", 2073 | "supports-color": "5.4.0" 2074 | } 2075 | }, 2076 | "moo": { 2077 | "version": "0.4.3", 2078 | "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", 2079 | "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", 2080 | "dev": true 2081 | }, 2082 | "ms": { 2083 | "version": "2.0.0", 2084 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2085 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2086 | "dev": true 2087 | }, 2088 | "nearley": { 2089 | "version": "2.15.1", 2090 | "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", 2091 | "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", 2092 | "dev": true, 2093 | "requires": { 2094 | "moo": "^0.4.3", 2095 | "nomnom": "~1.6.2", 2096 | "railroad-diagrams": "^1.0.0", 2097 | "randexp": "0.4.6", 2098 | "semver": "^5.4.1" 2099 | } 2100 | }, 2101 | "neo-async": { 2102 | "version": "2.6.0", 2103 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", 2104 | "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", 2105 | "dev": true 2106 | }, 2107 | "nise": { 2108 | "version": "1.4.10", 2109 | "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", 2110 | "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", 2111 | "dev": true, 2112 | "requires": { 2113 | "@sinonjs/formatio": "^3.1.0", 2114 | "@sinonjs/text-encoding": "^0.7.1", 2115 | "just-extend": "^4.0.2", 2116 | "lolex": "^2.3.2", 2117 | "path-to-regexp": "^1.7.0" 2118 | }, 2119 | "dependencies": { 2120 | "@sinonjs/formatio": { 2121 | "version": "3.2.1", 2122 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", 2123 | "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", 2124 | "dev": true, 2125 | "requires": { 2126 | "@sinonjs/commons": "^1", 2127 | "@sinonjs/samsam": "^3.1.0" 2128 | } 2129 | }, 2130 | "@sinonjs/samsam": { 2131 | "version": "3.3.1", 2132 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", 2133 | "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", 2134 | "dev": true, 2135 | "requires": { 2136 | "@sinonjs/commons": "^1.0.2", 2137 | "array-from": "^2.1.1", 2138 | "lodash": "^4.17.11" 2139 | } 2140 | }, 2141 | "just-extend": { 2142 | "version": "4.0.2", 2143 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", 2144 | "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", 2145 | "dev": true 2146 | }, 2147 | "lolex": { 2148 | "version": "2.7.5", 2149 | "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", 2150 | "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", 2151 | "dev": true 2152 | } 2153 | } 2154 | }, 2155 | "nomnom": { 2156 | "version": "1.6.2", 2157 | "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", 2158 | "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", 2159 | "dev": true, 2160 | "requires": { 2161 | "colors": "0.5.x", 2162 | "underscore": "~1.4.4" 2163 | } 2164 | }, 2165 | "nth-check": { 2166 | "version": "1.0.2", 2167 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", 2168 | "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", 2169 | "dev": true, 2170 | "requires": { 2171 | "boolbase": "~1.0.0" 2172 | } 2173 | }, 2174 | "number-is-nan": { 2175 | "version": "1.0.1", 2176 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2177 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2178 | "dev": true 2179 | }, 2180 | "nwsapi": { 2181 | "version": "2.0.9", 2182 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", 2183 | "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", 2184 | "dev": true 2185 | }, 2186 | "oauth-sign": { 2187 | "version": "0.9.0", 2188 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 2189 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 2190 | "dev": true 2191 | }, 2192 | "object-assign": { 2193 | "version": "4.1.1", 2194 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2195 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2196 | "dev": true 2197 | }, 2198 | "object-inspect": { 2199 | "version": "1.6.0", 2200 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", 2201 | "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", 2202 | "dev": true 2203 | }, 2204 | "object-is": { 2205 | "version": "1.0.1", 2206 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", 2207 | "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", 2208 | "dev": true 2209 | }, 2210 | "object-keys": { 2211 | "version": "1.0.12", 2212 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", 2213 | "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", 2214 | "dev": true 2215 | }, 2216 | "object.assign": { 2217 | "version": "4.1.0", 2218 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2219 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2220 | "dev": true, 2221 | "requires": { 2222 | "define-properties": "^1.1.2", 2223 | "function-bind": "^1.1.1", 2224 | "has-symbols": "^1.0.0", 2225 | "object-keys": "^1.0.11" 2226 | } 2227 | }, 2228 | "object.entries": { 2229 | "version": "1.0.4", 2230 | "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", 2231 | "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", 2232 | "dev": true, 2233 | "requires": { 2234 | "define-properties": "^1.1.2", 2235 | "es-abstract": "^1.6.1", 2236 | "function-bind": "^1.1.0", 2237 | "has": "^1.0.1" 2238 | } 2239 | }, 2240 | "object.values": { 2241 | "version": "1.0.4", 2242 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", 2243 | "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", 2244 | "dev": true, 2245 | "requires": { 2246 | "define-properties": "^1.1.2", 2247 | "es-abstract": "^1.6.1", 2248 | "function-bind": "^1.1.0", 2249 | "has": "^1.0.1" 2250 | } 2251 | }, 2252 | "once": { 2253 | "version": "1.4.0", 2254 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2255 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2256 | "dev": true, 2257 | "requires": { 2258 | "wrappy": "1" 2259 | } 2260 | }, 2261 | "optimist": { 2262 | "version": "0.6.1", 2263 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2264 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2265 | "dev": true, 2266 | "requires": { 2267 | "minimist": "~0.0.1", 2268 | "wordwrap": "~0.0.2" 2269 | } 2270 | }, 2271 | "optionator": { 2272 | "version": "0.8.2", 2273 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2274 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2275 | "dev": true, 2276 | "requires": { 2277 | "deep-is": "~0.1.3", 2278 | "fast-levenshtein": "~2.0.4", 2279 | "levn": "~0.3.0", 2280 | "prelude-ls": "~1.1.2", 2281 | "type-check": "~0.3.2", 2282 | "wordwrap": "~1.0.0" 2283 | }, 2284 | "dependencies": { 2285 | "wordwrap": { 2286 | "version": "1.0.0", 2287 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 2288 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2289 | "dev": true 2290 | } 2291 | } 2292 | }, 2293 | "os-homedir": { 2294 | "version": "1.0.2", 2295 | "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2296 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2297 | "dev": true 2298 | }, 2299 | "os-tmpdir": { 2300 | "version": "1.0.2", 2301 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2302 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2303 | "dev": true 2304 | }, 2305 | "parse5": { 2306 | "version": "3.0.3", 2307 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 2308 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 2309 | "dev": true, 2310 | "requires": { 2311 | "@types/node": "*" 2312 | } 2313 | }, 2314 | "path-is-absolute": { 2315 | "version": "1.0.1", 2316 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2317 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2318 | "dev": true 2319 | }, 2320 | "path-parse": { 2321 | "version": "1.0.6", 2322 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2323 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2324 | "dev": true 2325 | }, 2326 | "path-to-regexp": { 2327 | "version": "1.7.0", 2328 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", 2329 | "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", 2330 | "dev": true, 2331 | "requires": { 2332 | "isarray": "0.0.1" 2333 | } 2334 | }, 2335 | "pathval": { 2336 | "version": "1.1.0", 2337 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 2338 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 2339 | "dev": true 2340 | }, 2341 | "performance-now": { 2342 | "version": "2.1.0", 2343 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 2344 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 2345 | "dev": true 2346 | }, 2347 | "pn": { 2348 | "version": "1.1.0", 2349 | "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", 2350 | "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", 2351 | "dev": true 2352 | }, 2353 | "prelude-ls": { 2354 | "version": "1.1.2", 2355 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2356 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2357 | "dev": true 2358 | }, 2359 | "private": { 2360 | "version": "0.1.8", 2361 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 2362 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 2363 | "dev": true 2364 | }, 2365 | "progress": { 2366 | "version": "2.0.3", 2367 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2368 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2369 | "dev": true 2370 | }, 2371 | "prop-types": { 2372 | "version": "15.6.2", 2373 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", 2374 | "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", 2375 | "dev": true, 2376 | "requires": { 2377 | "loose-envify": "^1.3.1", 2378 | "object-assign": "^4.1.1" 2379 | } 2380 | }, 2381 | "psl": { 2382 | "version": "1.1.31", 2383 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", 2384 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", 2385 | "dev": true 2386 | }, 2387 | "punycode": { 2388 | "version": "2.1.1", 2389 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2390 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2391 | "dev": true 2392 | }, 2393 | "qs": { 2394 | "version": "6.5.2", 2395 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 2396 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 2397 | "dev": true 2398 | }, 2399 | "raf": { 2400 | "version": "3.4.1", 2401 | "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", 2402 | "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", 2403 | "dev": true, 2404 | "requires": { 2405 | "performance-now": "^2.1.0" 2406 | } 2407 | }, 2408 | "railroad-diagrams": { 2409 | "version": "1.0.0", 2410 | "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", 2411 | "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", 2412 | "dev": true 2413 | }, 2414 | "randexp": { 2415 | "version": "0.4.6", 2416 | "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", 2417 | "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", 2418 | "dev": true, 2419 | "requires": { 2420 | "discontinuous-range": "1.0.0", 2421 | "ret": "~0.1.10" 2422 | } 2423 | }, 2424 | "react": { 2425 | "version": "16.6.3", 2426 | "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz", 2427 | "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==", 2428 | "dev": true, 2429 | "requires": { 2430 | "loose-envify": "^1.1.0", 2431 | "object-assign": "^4.1.1", 2432 | "prop-types": "^15.6.2", 2433 | "scheduler": "^0.11.2" 2434 | } 2435 | }, 2436 | "react-dom": { 2437 | "version": "16.6.3", 2438 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz", 2439 | "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==", 2440 | "dev": true, 2441 | "requires": { 2442 | "loose-envify": "^1.1.0", 2443 | "object-assign": "^4.1.1", 2444 | "prop-types": "^15.6.2", 2445 | "scheduler": "^0.11.2" 2446 | } 2447 | }, 2448 | "react-is": { 2449 | "version": "16.6.3", 2450 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.6.3.tgz", 2451 | "integrity": "sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA==", 2452 | "dev": true 2453 | }, 2454 | "react-test-renderer": { 2455 | "version": "16.6.3", 2456 | "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.6.3.tgz", 2457 | "integrity": "sha512-B5bCer+qymrQz/wN03lT0LppbZUDRq6AMfzMKrovzkGzfO81a9T+PWQW6MzkWknbwODQH/qpJno/yFQLX5IWrQ==", 2458 | "dev": true, 2459 | "requires": { 2460 | "object-assign": "^4.1.1", 2461 | "prop-types": "^15.6.2", 2462 | "react-is": "^16.6.3", 2463 | "scheduler": "^0.11.2" 2464 | } 2465 | }, 2466 | "readable-stream": { 2467 | "version": "3.0.6", 2468 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", 2469 | "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", 2470 | "dev": true, 2471 | "requires": { 2472 | "inherits": "^2.0.3", 2473 | "string_decoder": "^1.1.1", 2474 | "util-deprecate": "^1.0.1" 2475 | } 2476 | }, 2477 | "rechoir": { 2478 | "version": "0.6.2", 2479 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 2480 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 2481 | "dev": true, 2482 | "requires": { 2483 | "resolve": "^1.1.6" 2484 | } 2485 | }, 2486 | "regenerate": { 2487 | "version": "1.4.0", 2488 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 2489 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 2490 | "dev": true 2491 | }, 2492 | "regenerator-runtime": { 2493 | "version": "0.11.1", 2494 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 2495 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", 2496 | "dev": true 2497 | }, 2498 | "regenerator-transform": { 2499 | "version": "0.10.1", 2500 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", 2501 | "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", 2502 | "dev": true, 2503 | "requires": { 2504 | "babel-runtime": "^6.18.0", 2505 | "babel-types": "^6.19.0", 2506 | "private": "^0.1.6" 2507 | } 2508 | }, 2509 | "regexpu-core": { 2510 | "version": "2.0.0", 2511 | "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", 2512 | "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", 2513 | "dev": true, 2514 | "requires": { 2515 | "regenerate": "^1.2.1", 2516 | "regjsgen": "^0.2.0", 2517 | "regjsparser": "^0.1.4" 2518 | } 2519 | }, 2520 | "regjsgen": { 2521 | "version": "0.2.0", 2522 | "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 2523 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", 2524 | "dev": true 2525 | }, 2526 | "regjsparser": { 2527 | "version": "0.1.5", 2528 | "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", 2529 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", 2530 | "dev": true, 2531 | "requires": { 2532 | "jsesc": "~0.5.0" 2533 | }, 2534 | "dependencies": { 2535 | "jsesc": { 2536 | "version": "0.5.0", 2537 | "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 2538 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 2539 | "dev": true 2540 | } 2541 | } 2542 | }, 2543 | "repeating": { 2544 | "version": "2.0.1", 2545 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 2546 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 2547 | "dev": true, 2548 | "requires": { 2549 | "is-finite": "^1.0.0" 2550 | } 2551 | }, 2552 | "request": { 2553 | "version": "2.88.0", 2554 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 2555 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 2556 | "dev": true, 2557 | "requires": { 2558 | "aws-sign2": "~0.7.0", 2559 | "aws4": "^1.8.0", 2560 | "caseless": "~0.12.0", 2561 | "combined-stream": "~1.0.6", 2562 | "extend": "~3.0.2", 2563 | "forever-agent": "~0.6.1", 2564 | "form-data": "~2.3.2", 2565 | "har-validator": "~5.1.0", 2566 | "http-signature": "~1.2.0", 2567 | "is-typedarray": "~1.0.0", 2568 | "isstream": "~0.1.2", 2569 | "json-stringify-safe": "~5.0.1", 2570 | "mime-types": "~2.1.19", 2571 | "oauth-sign": "~0.9.0", 2572 | "performance-now": "^2.1.0", 2573 | "qs": "~6.5.2", 2574 | "safe-buffer": "^5.1.2", 2575 | "tough-cookie": "~2.4.3", 2576 | "tunnel-agent": "^0.6.0", 2577 | "uuid": "^3.3.2" 2578 | }, 2579 | "dependencies": { 2580 | "punycode": { 2581 | "version": "1.4.1", 2582 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2583 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2584 | "dev": true 2585 | }, 2586 | "tough-cookie": { 2587 | "version": "2.4.3", 2588 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 2589 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 2590 | "dev": true, 2591 | "requires": { 2592 | "psl": "^1.1.24", 2593 | "punycode": "^1.4.1" 2594 | } 2595 | } 2596 | } 2597 | }, 2598 | "request-promise-core": { 2599 | "version": "1.1.1", 2600 | "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", 2601 | "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", 2602 | "dev": true, 2603 | "requires": { 2604 | "lodash": "^4.13.1" 2605 | } 2606 | }, 2607 | "request-promise-native": { 2608 | "version": "1.0.5", 2609 | "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", 2610 | "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", 2611 | "dev": true, 2612 | "requires": { 2613 | "request-promise-core": "1.1.1", 2614 | "stealthy-require": "^1.1.0", 2615 | "tough-cookie": ">=2.3.3" 2616 | } 2617 | }, 2618 | "resolve": { 2619 | "version": "1.8.1", 2620 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", 2621 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", 2622 | "dev": true, 2623 | "requires": { 2624 | "path-parse": "^1.0.5" 2625 | } 2626 | }, 2627 | "ret": { 2628 | "version": "0.1.15", 2629 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 2630 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 2631 | "dev": true 2632 | }, 2633 | "rst-selector-parser": { 2634 | "version": "2.2.3", 2635 | "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", 2636 | "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", 2637 | "dev": true, 2638 | "requires": { 2639 | "lodash.flattendeep": "^4.4.0", 2640 | "nearley": "^2.7.10" 2641 | } 2642 | }, 2643 | "safe-buffer": { 2644 | "version": "5.1.2", 2645 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2646 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2647 | "dev": true 2648 | }, 2649 | "safer-buffer": { 2650 | "version": "2.1.2", 2651 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2652 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2653 | "dev": true 2654 | }, 2655 | "sax": { 2656 | "version": "1.2.4", 2657 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2658 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 2659 | "dev": true 2660 | }, 2661 | "scheduler": { 2662 | "version": "0.11.2", 2663 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.2.tgz", 2664 | "integrity": "sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==", 2665 | "dev": true, 2666 | "requires": { 2667 | "loose-envify": "^1.1.0", 2668 | "object-assign": "^4.1.1" 2669 | } 2670 | }, 2671 | "semver": { 2672 | "version": "5.6.0", 2673 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 2674 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 2675 | "dev": true 2676 | }, 2677 | "shelljs": { 2678 | "version": "0.8.3", 2679 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", 2680 | "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", 2681 | "dev": true, 2682 | "requires": { 2683 | "glob": "^7.0.0", 2684 | "interpret": "^1.0.0", 2685 | "rechoir": "^0.6.2" 2686 | } 2687 | }, 2688 | "sinon": { 2689 | "version": "7.1.1", 2690 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz", 2691 | "integrity": "sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ==", 2692 | "dev": true, 2693 | "requires": { 2694 | "@sinonjs/commons": "^1.2.0", 2695 | "@sinonjs/formatio": "^3.0.0", 2696 | "@sinonjs/samsam": "^2.1.2", 2697 | "diff": "^3.5.0", 2698 | "lodash.get": "^4.4.2", 2699 | "lolex": "^3.0.0", 2700 | "nise": "^1.4.6", 2701 | "supports-color": "^5.5.0", 2702 | "type-detect": "^4.0.8" 2703 | }, 2704 | "dependencies": { 2705 | "supports-color": { 2706 | "version": "5.5.0", 2707 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2708 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2709 | "dev": true, 2710 | "requires": { 2711 | "has-flag": "^3.0.0" 2712 | } 2713 | } 2714 | } 2715 | }, 2716 | "slash": { 2717 | "version": "1.0.0", 2718 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 2719 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 2720 | "dev": true 2721 | }, 2722 | "source-map": { 2723 | "version": "0.5.7", 2724 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2725 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2726 | "dev": true 2727 | }, 2728 | "source-map-support": { 2729 | "version": "0.4.18", 2730 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 2731 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 2732 | "dev": true, 2733 | "requires": { 2734 | "source-map": "^0.5.6" 2735 | } 2736 | }, 2737 | "sprintf-js": { 2738 | "version": "1.0.3", 2739 | "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2740 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2741 | "dev": true 2742 | }, 2743 | "sshpk": { 2744 | "version": "1.16.0", 2745 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", 2746 | "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", 2747 | "dev": true, 2748 | "requires": { 2749 | "asn1": "~0.2.3", 2750 | "assert-plus": "^1.0.0", 2751 | "bcrypt-pbkdf": "^1.0.0", 2752 | "dashdash": "^1.12.0", 2753 | "ecc-jsbn": "~0.1.1", 2754 | "getpass": "^0.1.1", 2755 | "jsbn": "~0.1.0", 2756 | "safer-buffer": "^2.0.2", 2757 | "tweetnacl": "~0.14.0" 2758 | } 2759 | }, 2760 | "stealthy-require": { 2761 | "version": "1.1.1", 2762 | "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", 2763 | "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", 2764 | "dev": true 2765 | }, 2766 | "string.prototype.trim": { 2767 | "version": "1.1.2", 2768 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", 2769 | "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", 2770 | "dev": true, 2771 | "requires": { 2772 | "define-properties": "^1.1.2", 2773 | "es-abstract": "^1.5.0", 2774 | "function-bind": "^1.0.2" 2775 | } 2776 | }, 2777 | "string_decoder": { 2778 | "version": "1.2.0", 2779 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", 2780 | "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", 2781 | "dev": true, 2782 | "requires": { 2783 | "safe-buffer": "~5.1.0" 2784 | } 2785 | }, 2786 | "strip-ansi": { 2787 | "version": "3.0.1", 2788 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2789 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2790 | "dev": true, 2791 | "requires": { 2792 | "ansi-regex": "^2.0.0" 2793 | } 2794 | }, 2795 | "supports-color": { 2796 | "version": "5.4.0", 2797 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 2798 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 2799 | "dev": true, 2800 | "requires": { 2801 | "has-flag": "^3.0.0" 2802 | } 2803 | }, 2804 | "symbol-tree": { 2805 | "version": "3.2.2", 2806 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", 2807 | "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", 2808 | "dev": true 2809 | }, 2810 | "to-fast-properties": { 2811 | "version": "1.0.3", 2812 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 2813 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 2814 | "dev": true 2815 | }, 2816 | "tough-cookie": { 2817 | "version": "2.5.0", 2818 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 2819 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 2820 | "dev": true, 2821 | "requires": { 2822 | "psl": "^1.1.28", 2823 | "punycode": "^2.1.1" 2824 | } 2825 | }, 2826 | "tr46": { 2827 | "version": "1.0.1", 2828 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", 2829 | "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", 2830 | "dev": true, 2831 | "requires": { 2832 | "punycode": "^2.1.0" 2833 | } 2834 | }, 2835 | "trim-right": { 2836 | "version": "1.0.1", 2837 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 2838 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 2839 | "dev": true 2840 | }, 2841 | "tslib": { 2842 | "version": "1.9.3", 2843 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", 2844 | "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", 2845 | "dev": true 2846 | }, 2847 | "tslint": { 2848 | "version": "5.11.0", 2849 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", 2850 | "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", 2851 | "dev": true, 2852 | "requires": { 2853 | "babel-code-frame": "^6.22.0", 2854 | "builtin-modules": "^1.1.1", 2855 | "chalk": "^2.3.0", 2856 | "commander": "^2.12.1", 2857 | "diff": "^3.2.0", 2858 | "glob": "^7.1.1", 2859 | "js-yaml": "^3.7.0", 2860 | "minimatch": "^3.0.4", 2861 | "resolve": "^1.3.2", 2862 | "semver": "^5.3.0", 2863 | "tslib": "^1.8.0", 2864 | "tsutils": "^2.27.2" 2865 | }, 2866 | "dependencies": { 2867 | "ansi-styles": { 2868 | "version": "3.2.1", 2869 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 2870 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 2871 | "dev": true, 2872 | "requires": { 2873 | "color-convert": "^1.9.0" 2874 | } 2875 | }, 2876 | "chalk": { 2877 | "version": "2.4.1", 2878 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 2879 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 2880 | "dev": true, 2881 | "requires": { 2882 | "ansi-styles": "^3.2.1", 2883 | "escape-string-regexp": "^1.0.5", 2884 | "supports-color": "^5.3.0" 2885 | } 2886 | } 2887 | } 2888 | }, 2889 | "tslint-eslint-rules": { 2890 | "version": "5.4.0", 2891 | "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", 2892 | "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", 2893 | "dev": true, 2894 | "requires": { 2895 | "doctrine": "0.7.2", 2896 | "tslib": "1.9.0", 2897 | "tsutils": "^3.0.0" 2898 | }, 2899 | "dependencies": { 2900 | "tslib": { 2901 | "version": "1.9.0", 2902 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", 2903 | "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", 2904 | "dev": true 2905 | }, 2906 | "tsutils": { 2907 | "version": "3.5.2", 2908 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.5.2.tgz", 2909 | "integrity": "sha512-qIlklNuI/1Dzfm+G+kJV5gg3gimZIX5haYtIVQe7qGyKd7eu8T1t1DY6pz4Sc2CGXAj9s1izycctm9Zfl9sRuQ==", 2910 | "dev": true, 2911 | "requires": { 2912 | "tslib": "^1.8.1" 2913 | } 2914 | } 2915 | } 2916 | }, 2917 | "tslint-react": { 2918 | "version": "3.6.0", 2919 | "resolved": "https://registry.npmjs.org/tslint-react/-/tslint-react-3.6.0.tgz", 2920 | "integrity": "sha512-AIv1QcsSnj7e9pFir6cJ6vIncTqxfqeFF3Lzh8SuuBljueYzEAtByuB6zMaD27BL0xhMEqsZ9s5eHuCONydjBw==", 2921 | "dev": true, 2922 | "requires": { 2923 | "tsutils": "^2.13.1" 2924 | } 2925 | }, 2926 | "tsutils": { 2927 | "version": "2.29.0", 2928 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 2929 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 2930 | "dev": true, 2931 | "requires": { 2932 | "tslib": "^1.8.1" 2933 | } 2934 | }, 2935 | "tunnel-agent": { 2936 | "version": "0.6.0", 2937 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2938 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2939 | "dev": true, 2940 | "requires": { 2941 | "safe-buffer": "^5.0.1" 2942 | } 2943 | }, 2944 | "turndown": { 2945 | "version": "5.0.1", 2946 | "resolved": "https://registry.npmjs.org/turndown/-/turndown-5.0.1.tgz", 2947 | "integrity": "sha512-OuNongGmx5vo1TWuSFmVa4Rkm/HxFNPU3dyP9OpOMF2RFTtl0RU+QLIIROcDvXWauFJaLpZaZeVMAsL8vrt3Tw==", 2948 | "dev": true, 2949 | "requires": { 2950 | "jsdom": "^11.9.0" 2951 | } 2952 | }, 2953 | "tweetnacl": { 2954 | "version": "0.14.5", 2955 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2956 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2957 | "dev": true 2958 | }, 2959 | "type-check": { 2960 | "version": "0.3.2", 2961 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2962 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2963 | "dev": true, 2964 | "requires": { 2965 | "prelude-ls": "~1.1.2" 2966 | } 2967 | }, 2968 | "type-detect": { 2969 | "version": "4.0.8", 2970 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 2971 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 2972 | "dev": true 2973 | }, 2974 | "typedoc": { 2975 | "version": "0.14.2", 2976 | "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.14.2.tgz", 2977 | "integrity": "sha512-aEbgJXV8/KqaVhcedT7xG6d2r+mOvB5ep3eIz1KuB5sc4fDYXcepEEMdU7XSqLFO5hVPu0nllHi1QxX2h/QlpQ==", 2978 | "dev": true, 2979 | "requires": { 2980 | "@types/fs-extra": "^5.0.3", 2981 | "@types/handlebars": "^4.0.38", 2982 | "@types/highlight.js": "^9.12.3", 2983 | "@types/lodash": "^4.14.110", 2984 | "@types/marked": "^0.4.0", 2985 | "@types/minimatch": "3.0.3", 2986 | "@types/shelljs": "^0.8.0", 2987 | "fs-extra": "^7.0.0", 2988 | "handlebars": "^4.0.6", 2989 | "highlight.js": "^9.13.1", 2990 | "lodash": "^4.17.10", 2991 | "marked": "^0.4.0", 2992 | "minimatch": "^3.0.0", 2993 | "progress": "^2.0.0", 2994 | "shelljs": "^0.8.2", 2995 | "typedoc-default-themes": "^0.5.0", 2996 | "typescript": "3.2.x" 2997 | } 2998 | }, 2999 | "typedoc-default-themes": { 3000 | "version": "0.5.0", 3001 | "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", 3002 | "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", 3003 | "dev": true 3004 | }, 3005 | "typedoc-plugin-internal-external": { 3006 | "version": "1.0.10", 3007 | "resolved": "https://registry.npmjs.org/typedoc-plugin-internal-external/-/typedoc-plugin-internal-external-1.0.10.tgz", 3008 | "integrity": "sha512-RxNVuG53s1XjRU9AureonuWvVmkeANXtfM0rnmqrLlmrWJXUVPDJs9L3Ds87YX9fvVVDc9evT8iSQquP8/tNNQ==", 3009 | "dev": true 3010 | }, 3011 | "typedoc-plugin-markdown": { 3012 | "version": "1.1.20", 3013 | "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-1.1.20.tgz", 3014 | "integrity": "sha512-2rDLrzb0Wb0w0+iQ7LEGWccvRvluHTfPzj+wiggUaOYq3WaUfjA2KVFlAOECIuPiLoMiVgwSAp2YOLCYNp1C5A==", 3015 | "dev": true, 3016 | "requires": { 3017 | "turndown": "^5.0.1" 3018 | } 3019 | }, 3020 | "typescript": { 3021 | "version": "3.2.2", 3022 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", 3023 | "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", 3024 | "dev": true 3025 | }, 3026 | "uglify-js": { 3027 | "version": "3.5.10", 3028 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.10.tgz", 3029 | "integrity": "sha512-/GTF0nosyPLbdJBd+AwYiZ+Hu5z8KXWnO0WCGt1BQ/u9Iamhejykqmz5o1OHJ53+VAk6xVxychonnApDjuqGsw==", 3030 | "dev": true, 3031 | "optional": true, 3032 | "requires": { 3033 | "commander": "~2.20.0", 3034 | "source-map": "~0.6.1" 3035 | }, 3036 | "dependencies": { 3037 | "commander": { 3038 | "version": "2.20.0", 3039 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 3040 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 3041 | "dev": true, 3042 | "optional": true 3043 | }, 3044 | "source-map": { 3045 | "version": "0.6.1", 3046 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3047 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3048 | "dev": true, 3049 | "optional": true 3050 | } 3051 | } 3052 | }, 3053 | "underscore": { 3054 | "version": "1.4.4", 3055 | "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", 3056 | "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", 3057 | "dev": true 3058 | }, 3059 | "universalify": { 3060 | "version": "0.1.2", 3061 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 3062 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 3063 | "dev": true 3064 | }, 3065 | "uri-js": { 3066 | "version": "4.2.2", 3067 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 3068 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 3069 | "dev": true, 3070 | "requires": { 3071 | "punycode": "^2.1.0" 3072 | } 3073 | }, 3074 | "util-deprecate": { 3075 | "version": "1.0.2", 3076 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3077 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3078 | "dev": true 3079 | }, 3080 | "uuid": { 3081 | "version": "3.3.2", 3082 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", 3083 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", 3084 | "dev": true 3085 | }, 3086 | "verror": { 3087 | "version": "1.10.0", 3088 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3089 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3090 | "dev": true, 3091 | "requires": { 3092 | "assert-plus": "^1.0.0", 3093 | "core-util-is": "1.0.2", 3094 | "extsprintf": "^1.2.0" 3095 | } 3096 | }, 3097 | "w3c-hr-time": { 3098 | "version": "1.0.1", 3099 | "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", 3100 | "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", 3101 | "dev": true, 3102 | "requires": { 3103 | "browser-process-hrtime": "^0.1.2" 3104 | } 3105 | }, 3106 | "webidl-conversions": { 3107 | "version": "4.0.2", 3108 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 3109 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 3110 | "dev": true 3111 | }, 3112 | "whatwg-encoding": { 3113 | "version": "1.0.5", 3114 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", 3115 | "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", 3116 | "dev": true, 3117 | "requires": { 3118 | "iconv-lite": "0.4.24" 3119 | } 3120 | }, 3121 | "whatwg-mimetype": { 3122 | "version": "2.3.0", 3123 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", 3124 | "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", 3125 | "dev": true 3126 | }, 3127 | "whatwg-url": { 3128 | "version": "6.5.0", 3129 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", 3130 | "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", 3131 | "dev": true, 3132 | "requires": { 3133 | "lodash.sortby": "^4.7.0", 3134 | "tr46": "^1.0.1", 3135 | "webidl-conversions": "^4.0.2" 3136 | } 3137 | }, 3138 | "wordwrap": { 3139 | "version": "0.0.3", 3140 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 3141 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 3142 | "dev": true 3143 | }, 3144 | "wrappy": { 3145 | "version": "1.0.2", 3146 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3147 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3148 | "dev": true 3149 | }, 3150 | "ws": { 3151 | "version": "5.2.2", 3152 | "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", 3153 | "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", 3154 | "dev": true, 3155 | "requires": { 3156 | "async-limiter": "~1.0.0" 3157 | } 3158 | }, 3159 | "xml-name-validator": { 3160 | "version": "3.0.0", 3161 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", 3162 | "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", 3163 | "dev": true 3164 | } 3165 | } 3166 | } 3167 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-for", 3 | "version": "1.0.2", 4 | "description": "A React component library to create loops in JSX", 5 | "main": "lib/index.js", 6 | "scripts": { 7 | "prepare": "npm run tests && npm run lint && npm run docs && git add . && git commit -m \"Preparing package\"", 8 | "build": "node scripts/clear-lib.js && tsc", 9 | "test": "mocha --require babel-core/register --require ./scripts/configure-adapter.js ./test/**/*.spec.jsx", 10 | "tests": "npm run build && npm run test", 11 | "lint:src": "tslint -c tslint.json 'src/*'", 12 | "lint:test": "tslint -c tslint.json 'test/**/*.jsx'", 13 | "lint": "npm run lint:src && npm run lint:test", 14 | "docs": "./node_modules/.bin/typedoc --out docs --name react-for --external-aliases external,hidden --mode file --readme ./base-readme.md --target ES6 --module commonjs --theme markdown ./src/index.tsx && node ./scripts/generate-readme.js" 15 | }, 16 | "keywords": [ 17 | "for", 18 | "loop", 19 | "react", 20 | "dom", 21 | "jsx", 22 | "while" 23 | ], 24 | "homepage": "https://github.com/MJez29/react-for#readme", 25 | "bugs": "https://github.com/MJez29/react-for/issues", 26 | "author": "Michal Jez ", 27 | "license": "MIT", 28 | "files": [ 29 | "lib" 30 | ], 31 | "repository": { 32 | "type": "git", 33 | "url": "https://github.com/MJez29/react-for" 34 | }, 35 | "devDependencies": { 36 | "@types/mocha": "^5.2.5", 37 | "@types/react": "^16.7.8", 38 | "@types/react-dom": "^16.0.11", 39 | "babel-core": "^6.26.3", 40 | "babel-preset-es2015": "^6.24.1", 41 | "babel-preset-react": "^6.24.1", 42 | "chai": "^4.2.0", 43 | "enzyme": "^3.7.0", 44 | "enzyme-adapter-react-16": "^1.7.0", 45 | "mocha": "^5.2.0", 46 | "react": "^16.6.3", 47 | "react-dom": "^16.6.3", 48 | "sinon": "^7.1.1", 49 | "tslint": "^5.11.0", 50 | "tslint-eslint-rules": "^5.4.0", 51 | "tslint-react": "^3.6.0", 52 | "typedoc": "^0.14.2", 53 | "typedoc-plugin-internal-external": "^1.0.10", 54 | "typedoc-plugin-markdown": "^1.1.20", 55 | "typescript": "^3.2.2" 56 | }, 57 | "peerDependencies": { 58 | "react": "^16.0.0", 59 | "react-dom": "^16.0.0" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /scripts/clear-lib.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | const directory = 'lib'; 5 | 6 | fs.readdir(directory, (err, files) => { 7 | if (err) throw err; 8 | 9 | for (const file of files) { 10 | fs.unlink(path.join(directory, file), err => { 11 | if (err) throw err; 12 | }); 13 | } 14 | }); -------------------------------------------------------------------------------- /scripts/configure-adapter.js: -------------------------------------------------------------------------------- 1 | import Enzyme from 'enzyme'; 2 | import Adapter from 'enzyme-adapter-react-16'; 3 | 4 | Enzyme.configure({ adapter: new Adapter() }); -------------------------------------------------------------------------------- /scripts/generate-readme.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | const mainReadmeEnding = 'Click to see full docs here.'; 5 | 6 | console.log('Creating README.md'); 7 | 8 | fs.readFile('base-readme.md', 'utf8', (err, data) => { 9 | if (err) { 10 | console.error(err); 11 | } else { 12 | data += mainReadmeEnding; 13 | fs.writeFile('README.md', data, (err) => { 14 | if (err) { 15 | console.error(err); 16 | } else { 17 | console.log('Successfully created README.md'); 18 | } 19 | }); 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /src/data-props.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Interface of the data-related props when the object to 3 | * use in the loop is passed in the `data` prop 4 | */ 5 | interface IData { 6 | data: T; 7 | from?: undefined; 8 | } 9 | 10 | /** 11 | * Returns true if data-related prop is the `data` prop 12 | * @hidden 13 | * @param x - The data props to test 14 | */ 15 | function isData(x: DataProps): x is IData { 16 | return (x as IData).data !== undefined; 17 | } 18 | 19 | /** 20 | * Interface of the data-related props when the object to 21 | * use in the loop is passed in the `from` prop 22 | */ 23 | interface IFrom { 24 | from: T; 25 | data?: undefined; 26 | } 27 | 28 | /** 29 | * The union of the various data-related prop interfaces. 30 | */ 31 | export type DataProps = IData | IFrom; 32 | 33 | /** 34 | * The normalized schema that all the variations of `DataProps` get 35 | * mapped to. 36 | * @hidden 37 | */ 38 | export interface IParsedDataProps { 39 | data: T; 40 | } 41 | 42 | /** 43 | * Parses all variations of `DataProps` into a standard interface. 44 | * @hidden 45 | * @param props - The props to parse 46 | */ 47 | export function parseDataProps(props: DataProps): IParsedDataProps { 48 | const parsedProps: IParsedDataProps = { 49 | data: null, 50 | }; 51 | 52 | if (isData(props)) { 53 | parsedProps.data = props.data; 54 | } else { 55 | parsedProps.data = props.from; 56 | } 57 | 58 | return parsedProps; 59 | } 60 | -------------------------------------------------------------------------------- /src/do-while.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { WhileProps, parseWhileProps } from "./while-props"; 3 | 4 | /** 5 | * A do-while loop 6 | * @param props - The props passed into the component 7 | */ 8 | export const DoWhile = (props: WhileProps) => { 9 | const { test, render } = parseWhileProps(props); 10 | 11 | const results = []; 12 | do { 13 | results.push(render()); 14 | } while (test()); 15 | 16 | return <>{results}; 17 | }; 18 | -------------------------------------------------------------------------------- /src/for-in.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { RenderProps, IParsedRenderProps, parseRenderProps } from "./render-props"; 3 | import { DataProps, IParsedDataProps, parseDataProps } from "./data-props"; 4 | 5 | /** 6 | * The type of the props that get passed to the ForIn component. 7 | */ 8 | export type ForInProps = RenderProps & DataProps<{ [x: string]: any }>; 9 | 10 | /** 11 | * The type of the parsed props of all variations of `ForInProps` 12 | * @hidden 13 | */ 14 | type ParsedForInProps = IParsedRenderProps & IParsedDataProps<{ [x: string]: any }>; 15 | 16 | /** 17 | * Parses all variations of `ForInProps` into a standard interface. 18 | * @hidden 19 | */ 20 | function parseForInProps(props: ForInProps): ParsedForInProps { 21 | return { 22 | ...parseDataProps(props), 23 | ...parseRenderProps(props), 24 | }; 25 | } 26 | 27 | /** 28 | * `ForIn` implements looping through the provided elements using a `for...in` loop. 29 | * It iterates over the enumerable properties of an object. 30 | * See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in|here} 31 | * for more detail. 32 | * @example 33 | * { 34 | * (i) =>

{i}

35 | * }
36 | */ 37 | export const ForIn = (props: ForInProps) => { 38 | const { data, render } = parseForInProps(props); 39 | 40 | const results = []; 41 | for (const item in data) { 42 | if (data.hasOwnProperty(item)) { 43 | results.push(render(item)); 44 | } 45 | } 46 | 47 | return <>{results}; 48 | }; 49 | -------------------------------------------------------------------------------- /src/for-of.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { RenderProps, parseRenderProps, IParsedRenderProps } from "./render-props"; 3 | import { DataProps, parseDataProps, IParsedDataProps } from "./data-props"; 4 | 5 | export type ForOfProps = RenderProps & DataProps<{ [Symbol.iterator]: () => Iterator }>; 6 | 7 | /** 8 | * The type of the props that get passed into the `ForOf` component. 9 | * @hidden 10 | */ 11 | type ParsedForOfProps = IParsedRenderProps & IParsedDataProps<{ [Symbol.iterator]: () => Iterator }>; 12 | 13 | /** 14 | * Parses all the variations of the `ForOfProps` into a standard interface. 15 | * @hidden 16 | * @param props 17 | */ 18 | function parseForOfProps(props: ForOfProps): ParsedForOfProps { 19 | return { 20 | ...parseDataProps(props), 21 | ...parseRenderProps(props), 22 | }; 23 | } 24 | 25 | /** 26 | * `ForOf` implements looping through the provided elements using a `for...of` loop. 27 | * It iterates over the data that an iterable object defines to be iterable over. 28 | * See {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of|here} 29 | * for more detail. 30 | * @example 31 | * { 32 | * (i) =>

{i}

33 | * }
34 | */ 35 | export const ForOf = (props: ForOfProps) => { 36 | const { data, render } = parseForOfProps(props); 37 | 38 | const results = []; 39 | for (const item of data) { 40 | results.push(render(item)); 41 | } 42 | 43 | return <>{results}; 44 | }; 45 | -------------------------------------------------------------------------------- /src/for.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { RenderProps, IParsedRenderProps, parseRenderProps } from "./render-props"; 3 | import { StartProps, IParsedStartProps, parseStartProps } from "./start-props"; 4 | import { NextProps, IParsedNextProps, parseNextProps } from "./next-props"; 5 | import { TestProps, parseTestProps, IParsedTestProps } from "./test-props"; 6 | 7 | /** 8 | * The type of the props passed into the `For` component. 9 | */ 10 | export type ForProps = RenderProps & StartProps & TestProps & NextProps; 11 | 12 | /** 13 | * The type of the parsed props of all the variations of `ForProps`. 14 | * @hidden 15 | */ 16 | type ParsedForProps = IParsedRenderProps & IParsedStartProps & IParsedTestProps & IParsedNextProps; 17 | 18 | /** 19 | * Parses all the variations of `ForProps` into a standard interface. 20 | * @hidden 21 | * @param props 22 | */ 23 | function parseForProps(props: ForProps): ParsedForProps { 24 | return { 25 | ...parseRenderProps(props), 26 | ...parseStartProps(props), 27 | ...parseTestProps(props), 28 | ...parseNextProps(props), 29 | }; 30 | } 31 | 32 | /** 33 | * A JSX implementation of the JavaScript `for` loop. 34 | * @param props - The props passed to the component 35 | */ 36 | export const For = (props: ForProps) => { 37 | const { render, start, test, next } = parseForProps(props); 38 | 39 | const results = []; 40 | for (let i = start; test(i); i = next(i)) { 41 | results.push(render(i)); 42 | } 43 | 44 | return <>{results}; 45 | }; 46 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | export * from "./for"; 2 | export * from "./for-of"; 3 | export * from "./for-in"; 4 | export * from "./while"; 5 | export * from "./do-while"; 6 | -------------------------------------------------------------------------------- /src/next-props.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The type of the function that is used to change the loop variable 3 | */ 4 | export type NextFunction = (x: T) => T; 5 | 6 | /** 7 | * Interface where the next function is passed through the `next` prop. 8 | */ 9 | interface INext { 10 | next: NextFunction; 11 | } 12 | 13 | /** 14 | * The union type of all possible next prop interfaces. 15 | */ 16 | export type NextProps = INext; 17 | 18 | /** 19 | * The standard interface that all variations of `NextProps` gets parsed to. 20 | * @hidden 21 | */ 22 | export interface IParsedNextProps { 23 | next: NextFunction; 24 | } 25 | 26 | /** 27 | * Parses all variations of `NextProps` to a standard interface. 28 | * @hidden 29 | * @param props 30 | */ 31 | export function parseNextProps(props: NextProps): IParsedNextProps { 32 | const parsedProps: IParsedNextProps = { 33 | next: null, 34 | }; 35 | 36 | parsedProps.next = props.next; 37 | 38 | return parsedProps; 39 | } 40 | -------------------------------------------------------------------------------- /src/render-props.ts: -------------------------------------------------------------------------------- 1 | export type RenderFunction = (x?: T) => any; 2 | 3 | interface IRenderChildren { 4 | children: RenderFunction; 5 | } 6 | 7 | /** 8 | * @hidden 9 | * @param x 10 | */ 11 | function isRenderChildren(x: RenderProps): x is IRenderChildren { 12 | return (x as IRenderChildren).children !== undefined; 13 | } 14 | 15 | interface IRenderFunction { 16 | render: RenderFunction; 17 | } 18 | 19 | export type RenderProps = IRenderChildren | IRenderFunction; 20 | 21 | /** 22 | * @hidden 23 | */ 24 | export interface IParsedRenderProps { 25 | render: RenderFunction; 26 | } 27 | 28 | /** 29 | * @hidden 30 | * @param props 31 | */ 32 | export function parseRenderProps(props: RenderProps): IParsedRenderProps { 33 | const parsedProps: IParsedRenderProps = { 34 | render: null, 35 | }; 36 | 37 | if (isRenderChildren(props)) { 38 | parsedProps.render = props.children; 39 | } else { 40 | parsedProps.render = props.render; 41 | } 42 | 43 | return parsedProps; 44 | } 45 | -------------------------------------------------------------------------------- /src/start-props.ts: -------------------------------------------------------------------------------- 1 | interface IStart { 2 | start: T; 3 | begin?: undefined; 4 | } 5 | 6 | /** 7 | * @hidden 8 | * @param x 9 | */ 10 | function isStart(x: StartProps): x is IStart { 11 | return (x as IStart).start !== undefined; 12 | } 13 | 14 | interface IBegin { 15 | start?: undefined; 16 | begin: T; 17 | } 18 | 19 | export type StartProps = IStart | IBegin; 20 | 21 | /** 22 | * @hidden 23 | */ 24 | export interface IParsedStartProps { 25 | start: T; 26 | } 27 | 28 | /** 29 | * @hidden 30 | * @param props 31 | */ 32 | export function parseStartProps(props: StartProps): IParsedStartProps { 33 | const parsedProps: IParsedStartProps = { 34 | start: null, 35 | }; 36 | 37 | if (isStart(props)) { 38 | parsedProps.start = props.start; 39 | } else { 40 | parsedProps.start = props.begin; 41 | } 42 | 43 | return parsedProps; 44 | } 45 | -------------------------------------------------------------------------------- /src/test-props.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The type of the function that should be used to determine if a loop should stop. Returns a truthy 3 | * value to continue and a falsy value to stop. 4 | */ 5 | export type TestFunction = (x?: T) => any; 6 | 7 | interface ITest { 8 | test: TestFunction; 9 | comparator?: undefined; 10 | compare?: undefined; 11 | } 12 | 13 | /** 14 | * @hidden 15 | * @param x 16 | */ 17 | function isTest(x: TestProps): x is ITest { 18 | return (x as ITest).test !== undefined; 19 | } 20 | 21 | interface IComparator { 22 | test?: undefined; 23 | comparator: TestFunction; 24 | compare?: undefined; 25 | } 26 | 27 | /** 28 | * @hidden 29 | * @param x 30 | */ 31 | function isComparator(x: TestProps): x is IComparator { 32 | return (x as IComparator).comparator !== undefined; 33 | } 34 | 35 | interface ICompare { 36 | test?: undefined; 37 | comparator?: undefined; 38 | compare: TestFunction; 39 | } 40 | 41 | /** 42 | * @hidden 43 | * @param x 44 | */ 45 | function isCompare(x: TestProps): x is ICompare { 46 | return (x as ICompare).compare !== undefined; 47 | } 48 | 49 | /** 50 | * The type of all valid sets of test props. 51 | */ 52 | export type TestProps = ITest | IComparator | ICompare; 53 | 54 | /** 55 | * @hidden 56 | */ 57 | export interface IParsedTestProps { 58 | test: TestFunction; 59 | } 60 | 61 | /** 62 | * @hidden 63 | * @param props 64 | */ 65 | export function parseTestProps(props: TestProps): IParsedTestProps { 66 | const parsedProps: IParsedTestProps = { 67 | test: null, 68 | }; 69 | 70 | if (isTest(props)) { 71 | parsedProps.test = props.test; 72 | } else if (isComparator(props)) { 73 | parsedProps.test = props.comparator; 74 | } else { 75 | parsedProps.test = props.compare; 76 | } 77 | 78 | return parsedProps; 79 | } 80 | -------------------------------------------------------------------------------- /src/while-props.ts: -------------------------------------------------------------------------------- 1 | import { RenderProps, RenderFunction, parseRenderProps } from "./render-props"; 2 | import { TestFunction, parseTestProps, TestProps } from "./test-props"; 3 | 4 | /** 5 | * The type of the props passed to the `While` component. 6 | */ 7 | export type WhileProps = RenderProps & TestProps; 8 | 9 | /** 10 | * @hidden 11 | */ 12 | export interface IParsedWhileProps { 13 | test: TestFunction; 14 | render: RenderFunction; 15 | } 16 | 17 | /** 18 | * Parses the props for a while loop 19 | * @hidden 20 | * @param props - The props to parse 21 | */ 22 | export function parseWhileProps(props: WhileProps): IParsedWhileProps { 23 | const parsedProps: IParsedWhileProps = { 24 | ...parseRenderProps(props), 25 | ...parseTestProps(props), 26 | }; 27 | 28 | return parsedProps; 29 | } 30 | -------------------------------------------------------------------------------- /src/while.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import { WhileProps, parseWhileProps } from "./while-props"; 3 | 4 | /** 5 | * A JSX implementation of a while loop. 6 | * ```jsx 7 | * const PrintHello = ({ i }) => ( 8 | * i-- > 0}>{ 9 | * () =>

Hello World!

10 | * }
11 | * ) 12 | * ``` 13 | * @param props The props passed into the component 14 | */ 15 | export const While = (props: WhileProps) => { 16 | const { test, render } = parseWhileProps(props); 17 | 18 | const results = []; 19 | while (test()) { 20 | results.push(render()); 21 | } 22 | 23 | return <>{results}; 24 | }; 25 | -------------------------------------------------------------------------------- /test/do-while.spec.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import * as React from "react"; 3 | import { expect } from "chai"; 4 | import { shallow, render } from "enzyme"; 5 | import { DoWhile } from "../lib"; 6 | 7 | describe("", () => { 8 | it("Loops once on false", () => { 9 | const component = ( 10 | false}>{ 11 | () =>

1

12 | }
13 | ); 14 | const r = render(component); 15 | expect(r).to.have.lengthOf(1); 16 | 17 | const s = shallow(component); 18 | expect(s.html()).to.equal("

1

"); 19 | }); 20 | it("Loops until false", () => { 21 | let i; 22 | const component = ( 23 | i > 0}>{ 24 | () =>

{i--}

25 | }
26 | ); 27 | i = 3; 28 | const r = render(component); 29 | expect(r).to.have.lengthOf(3); 30 | 31 | i = 3; 32 | const s = shallow(component); 33 | expect(s.html()).to.equal("

3

2

1

"); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/for-in.spec.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // tslint:disable:max-line-length 3 | import * as React from "react"; 4 | import { expect } from "chai"; 5 | import { shallow, render } from "enzyme"; 6 | import { ForIn } from "../lib"; 7 | 8 | describe("", () => { 9 | it("Loops through an object's keys", () => { 10 | const data = { 11 | a: 1, 12 | b: 2, 13 | c: 3, 14 | }; 15 | const component = ( 16 | { 17 | (k) => ( 18 |
19 |

Key: {k}

20 |

Value: {data[k]}

21 |
22 | ) 23 | }
24 | ); 25 | 26 | const r = render(component); 27 | expect(r).to.have.lengthOf(3); 28 | 29 | const s = shallow(component); 30 | expect(s.html()).to.equal("

Key: a

Value: 1

Key: b

Value: 2

Key: c

Value: 3

"); 31 | }); 32 | 33 | it("Loops through the indices of an array", () => { 34 | const data = [ 35 | "a", "b", "c" 36 | ]; 37 | const component = ( 38 | { 39 | (i) => ( 40 |
41 |

Index: {i}

42 |

Value: {data[i]}

43 |
44 | ) 45 | }
46 | ); 47 | 48 | const r = render(component); 49 | expect(r).to.have.lengthOf(3); 50 | 51 | const s = shallow(component); 52 | expect(s.html()).to.equal("

Index: 0

Value: a

Index: 1

Value: b

Index: 2

Value: c

"); 53 | }); 54 | }); 55 | -------------------------------------------------------------------------------- /test/for-of.spec.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // tslint:disable:max-line-length 3 | import * as React from "react"; 4 | import { expect } from "chai"; 5 | import { shallow, render } from "enzyme"; 6 | import { ForOf } from "../lib"; 7 | 8 | describe("", () => { 9 | it("Loops through an array", () => { 10 | const data = [ 1, 2, 3, 4, 5 ]; 11 | const component = ( 12 | { 13 | (i) =>

{i}

14 | }
15 | ); 16 | const r = render(component); 17 | expect(r).to.have.lengthOf(5); 18 | 19 | const s = shallow(component); 20 | expect(s.html()).to.equal("

1

2

3

4

5

"); 21 | }); 22 | 23 | it("Loops through a string", () => { 24 | const data = "react-for"; 25 | const component = ( 26 | { 27 | (i) =>

{i}

28 | }
29 | ); 30 | const r = render(component); 31 | expect(r).to.have.lengthOf(9); 32 | 33 | const s = shallow(component); 34 | expect(s.html()).to.equal("

r

e

a

c

t

-

f

o

r

"); 35 | }); 36 | 37 | it("Loops through a TypedArray", () => { 38 | const data = new Uint8Array([ 0x00, 0xFF ]); 39 | const component = ( 40 | { 41 | (i) =>

{i}

42 | }
43 | ); 44 | const r = render(component); 45 | expect(r).to.have.lengthOf(2); 46 | 47 | const s = shallow(component); 48 | expect(s.html()).to.equal("

0

255

"); 49 | }); 50 | 51 | it("Loops through a Map", () => { 52 | const data = new Map([["a", 1], ["b", 2], ["c", 3]]); 53 | const component = ( 54 | { 55 | ([key, value]) =>

{key}: {value}

56 | }
57 | ); 58 | const r = render(component); 59 | expect(r).to.have.lengthOf(3); 60 | 61 | const s = shallow(component); 62 | expect(s.html()).to.equal("

a: 1

b: 2

c: 3

"); 63 | }); 64 | 65 | it("Loops through a Set", () => { 66 | const data = new Set([1, 1, 2, 3, 3, 4, 4, 5]); 67 | const component = ( 68 | { 69 | (e) =>

{e}

70 | }
71 | ); 72 | const r = render(component); 73 | expect(r).to.have.lengthOf(5); 74 | 75 | const s = shallow(component); 76 | expect(s.html()).to.equal("

1

2

3

4

5

"); 77 | }); 78 | }); 79 | -------------------------------------------------------------------------------- /test/for.spec.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import * as React from "react"; 3 | import { expect } from "chai"; 4 | import { render } from "enzyme"; 5 | import { For } from "../lib"; 6 | 7 | describe("", () => { 8 | it("Loops through a range", () => { 9 | const wrapper = render( 10 | i < 5} next={i => i + 1}>{ 11 | (i) =>

{i}

12 | }
13 | ); 14 | expect(wrapper).to.have.lengthOf(5); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/while.spec.jsx: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import * as React from "react"; 3 | import { expect } from "chai"; 4 | import { shallow, configure, render, mount } from "enzyme"; 5 | import { ForIn, While } from "../lib"; 6 | 7 | describe("", () => { 8 | it("Terminates immediately on false", () => { 9 | const component = ( 10 | false}>{ 11 | () =>

Never rendered

12 | }
13 | ); 14 | const r = render(component); 15 | expect(r).to.have.lengthOf(0); 16 | 17 | const s = shallow(component); 18 | expect(s.html()).to.equal(""); 19 | }); 20 | it("Loops until false", () => { 21 | let i; 22 | const component = ( 23 | i > 0}>{ 24 | () =>

{i--}

25 | }
26 | ); 27 | i = 3; 28 | const r = render(component); 29 | expect(r).to.have.lengthOf(3); 30 | 31 | i = 3; 32 | const s = shallow(component); 33 | expect(s.html()).to.equal("

3

2

1

"); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./lib", 4 | "target": "es6", 5 | "module": "es6", 6 | "moduleResolution": "node", 7 | "declaration": true, 8 | "jsx": "react" 9 | }, 10 | "include": [ 11 | "./src/**/*.tsx", 12 | "./src/**/*.ts" 13 | ], 14 | "exclude": [ 15 | "node_modules" 16 | ] 17 | } -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "error", 3 | "extends": [ 4 | "tslint:recommended", 5 | "tslint-eslint-rules", 6 | "tslint-react" 7 | ], 8 | "jsRules": { 9 | "ordered-imports": false, 10 | "trailing-comma": false 11 | }, 12 | "rules": { 13 | "ordered-imports": false, 14 | "trailing-comma": false 15 | }, 16 | "rulesDirectory": [] 17 | } --------------------------------------------------------------------------------