├── .gitattributes ├── templates ├── 128.png ├── entry.html ├── manifest.json ├── index.html └── entry.js ├── .gitignore ├── .prettierrc ├── api ├── .eslintrc ├── .babelrc ├── header.md ├── package.json ├── LICENSE ├── index.js ├── README.md └── yarn.lock ├── .travis.yml ├── .eslintrc ├── .babelrc ├── src ├── theme.js ├── helpers │ └── content.js ├── components │ ├── Header.js │ ├── Help.js │ ├── App.js │ ├── Tabs.js │ ├── Switch.js │ └── Content.js ├── reducers │ ├── index.js │ ├── ui.js │ └── main.js ├── actions │ └── ui.js ├── bridge │ ├── index.js │ ├── content-script.js │ └── background.js ├── dev │ ├── main.js │ └── demo.js ├── main.js ├── utils.js └── store.js ├── LICENSE ├── webpack ├── base.js ├── dev.js └── build.babel.js ├── README.md ├── package.json └── test └── api.js /.gitattributes: -------------------------------------------------------------------------------- 1 | yarn.lock -diff 2 | -------------------------------------------------------------------------------- /templates/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uber-web/Seer/HEAD/templates/128.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .nyc_output/ 3 | coverage/ 4 | 5 | dist* 6 | npm-debug.log 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | printWidth: 100 2 | semi: false 3 | singleQuote: true 4 | trailingComma: all 5 | -------------------------------------------------------------------------------- /api/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["zavatta"], 3 | "globals": { 4 | "Map": false, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /api/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0"], 3 | "env": { 4 | "test": { 5 | "plugins": ["istanbul"], 6 | }, 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /templates/entry.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 6 4 | - 7 5 | script: 6 | - npm run lint 7 | - npm run cover 8 | after_success: 9 | - npm run report 10 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | extends: ['zavatta', 'zavatta-react', 'prettier', 'prettier/react'], 3 | globals: { 4 | chrome: false, 5 | Set: false, 6 | }, 7 | rules: { 8 | 'react/no-array-index-key': 0 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react", "es2015", "stage-0"], 3 | "plugins": [ 4 | "transform-decorators-legacy", 5 | ["module-resolver", { "root": ["src"] }], 6 | ], 7 | "env": { 8 | "test": { 9 | "plugins": ["istanbul"], 10 | }, 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /src/theme.js: -------------------------------------------------------------------------------- 1 | export default { 2 | base00: '#2D2E35', 3 | base01: '#363942', 4 | 5 | primary: '#0ab2b8', 6 | black: '#1B1919', 7 | 8 | border: { 9 | light: '#3B3D44', 10 | light01: '#454750', 11 | }, 12 | 13 | color: { 14 | inactive: '#7A8087', 15 | active: '#C6CDD5', 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /src/helpers/content.js: -------------------------------------------------------------------------------- 1 | import isEqual from 'lodash/isEqual' 2 | 3 | export const has = thing => !!((Array.isArray(thing) && thing.length) || Object.keys(thing).length) 4 | 5 | export const getRoot = data => 6 | Object.keys(data) 7 | .filter(key => !data[key].parent) 8 | .reduce((out, key) => ((out[key] = data[key]), out), {}) 9 | 10 | export const checkOpen = (selection, path) => { 11 | const part = selection.slice(0, path.length) 12 | return isEqual(part, path) 13 | } 14 | -------------------------------------------------------------------------------- /templates/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Seer", 3 | "description": "A customizable dev tools", 4 | 5 | "version": "3.34", 6 | "minimum_chrome_version": "10.0", 7 | "manifest_version": 2, 8 | 9 | "devtools_page": "entry.html", 10 | "background": { 11 | "scripts": ["background.js"] 12 | }, 13 | "content_scripts": [{ 14 | "matches": [""], 15 | "js": ["content-script.js"], 16 | "run_at": "document_start", 17 | "all_frames": true 18 | }], 19 | "icons": { 20 | "128": "128.png" 21 | }, 22 | 23 | "permissions": [ 24 | "storage", 25 | "tabs" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | 22 |
23 |
Initializing..
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /api/header.md: -------------------------------------------------------------------------------- 1 | # Seer API 2 | 3 | This library provides an abstraction around the [Window.postMessage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) 4 | to interact with the Seer extension. 5 | 6 | How the communication is done exactly relies on the bridge, that you can checkout 7 | in its dedicated [directory](../src/bridge). The following schema represent the 8 | complete data flow: 9 | 10 | 11 | 12 | ## Install 13 | 14 | Simply download the package from the npm registry 15 | 16 | yarn add seer 17 | 18 | ## Notes 19 | 20 | The extension will declare a `__SEER_INITIALIZED__` boolean on the window, 21 | that you can use to check if the extension is installed and prevent any useless 22 | processing in production or for real-users. 23 | 24 | -------------------------------------------------------------------------------- /src/components/Header.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import styled from 'styled-components' 3 | 4 | import Tabs from 'components/Tabs' 5 | import Switch from 'components/Switch' 6 | 7 | const Container = styled.div` 8 | display: flex; 9 | height: 2.5rem; 10 | flex-direction: column; 11 | border-bottom: 1px solid ${p => p.theme.border.light01}; 12 | 13 | > div { 14 | display: flex; 15 | flex-grow: 1; 16 | > *:last-child { 17 | margin-left: auto; 18 | } 19 | } 20 | 21 | &:after { 22 | content: ''; 23 | border-bottom: 1px solid ${p => p.theme.black}; 24 | } 25 | ` 26 | 27 | class Header extends Component { 28 | render() { 29 | return ( 30 | 31 |
32 | 33 | 34 |
35 |
36 | ) 37 | } 38 | } 39 | 40 | export default Header 41 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "seer", 3 | "version": "0.2.5", 4 | "description": "A customizable devtool solution", 5 | "main": "dist", 6 | "files": [ 7 | "index.js", 8 | "dist" 9 | ], 10 | "scripts": { 11 | "build": "rm -rf dist && mkdir dist && babel index.js -o dist/index.js", 12 | "docs": "cat header.md > README.md && jsdoc2md index.js >> README.md && sed -i '' '30,1000s/##/###/g' README.md" 13 | }, 14 | "author": "Balthazar Gronon ", 15 | "repository": { 16 | "type": "git", 17 | "url": "git://github.com/uber-web/seer.git" 18 | }, 19 | "bugs": { 20 | "url": "https://github.com/uber-web/seer/issues" 21 | }, 22 | "homepage": "https://github.com/uber-web/seer", 23 | "keywords": [ 24 | "uber", 25 | "devtools", 26 | "debug", 27 | "deck.gl" 28 | ], 29 | "license": "MIT", 30 | "devDependencies": { 31 | "babel-cli": "^6.24.1", 32 | "babel-plugin-module-resolver": "^2.7.0", 33 | "babel-preset-es2015": "^6.24.1", 34 | "babel-preset-stage-0": "^6.24.1", 35 | "jsdoc-to-markdown": "^3.0.0" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Uber Technologies, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /api/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Uber Technologies, Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /templates/entry.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | chrome.devtools.panels.create('Seer', null, 'index.html') 22 | -------------------------------------------------------------------------------- /src/reducers/index.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import { combineReducers } from 'redux' 22 | 23 | import ui from './ui' 24 | import main from './main' 25 | 26 | export default combineReducers({ 27 | ui, 28 | main, 29 | }) 30 | -------------------------------------------------------------------------------- /src/components/Help.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | 4 | const Container = styled.div` 5 | padding: 1rem; 6 | 7 | > div:first-child { 8 | display: flex; 9 | justify-content: center; 10 | } 11 | 12 | .code { 13 | font-family: monospace; 14 | background-color: rgba(0, 0, 0, 0.5); 15 | padding: 1rem; 16 | margin: 0.5rem 0; 17 | } 18 | 19 | > div + div { 20 | margin-top: 0.5rem; 21 | } 22 | ` 23 | 24 | export default () => ( 25 | 26 |
27 | 28 |
29 | 30 |
31 | {"No data has been yet received. To hook into Seer, you'll have follow these steps:"} 32 |
33 | 34 |
35 | {'1) Install the package as a dependency'} 36 |
{'yarn add seer'}
37 |
38 |
39 | {'2) Use one of the provided methods to send messages'} 40 |
41 |         {"import seer from 'seer'\n\n...\n\nseer.listItem('test-tab', 'yolo', {})"}
42 |       
43 |
44 |
45 | {'3) Use listenFor if you want to receive messages'} 46 |
{"seer.listenFor('test-tab', msg => console.log(msg))"}
47 |
48 |
49 | ) 50 | -------------------------------------------------------------------------------- /src/actions/ui.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import { createAction } from 'redux-actions' 22 | 23 | import { setStorage } from 'store' 24 | 25 | export const selectTab = createAction('SELECT_TAB') 26 | export const selectItem = createAction('SELECT_ITEM') 27 | export const goto = createAction('GOTO') 28 | 29 | export const toggleActive = () => (dispatch, getState) => { 30 | dispatch({ type: 'TOGGLE_ACTIVE' }) 31 | 32 | const { ui } = getState() 33 | setStorage({ ui }) 34 | } 35 | -------------------------------------------------------------------------------- /src/bridge/index.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import has from 'lodash/has' 22 | 23 | const isExtension = has(window, 'chrome.runtime.id') 24 | 25 | const bridge = isExtension && chrome.runtime.connect({ name: 'seer' }) 26 | 27 | export const sendMessage = (type, payload = {}) => 28 | isExtension 29 | ? bridge.postMessage({ 30 | type, 31 | payload, 32 | source: 'seer-core', 33 | tabId: chrome.devtools.inspectedWindow.tabId, 34 | }) 35 | : window.postMessage({ type, payload, source: 'seer-core' }, '*') 36 | 37 | export const onMessage = cb => (isExtension ? bridge.onMessage.addListener(cb) : null) 38 | -------------------------------------------------------------------------------- /webpack/base.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import webpack from 'webpack' 22 | import HtmlWebpackPlugin from 'html-webpack-plugin' 23 | import path from 'path' 24 | 25 | export default { 26 | 27 | output: { 28 | path: path.resolve(__dirname, '../dist'), 29 | filename: 'bundle.js', 30 | }, 31 | 32 | plugins: [ 33 | 34 | new HtmlWebpackPlugin({ 35 | template: 'templates/index.html', 36 | }), 37 | 38 | new webpack.DefinePlugin({ 39 | 'process.env': { 40 | NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development'), 41 | __BROWSER__: JSON.stringify(true), 42 | }, 43 | }), 44 | 45 | ], 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/dev/main.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React from 'react' 22 | import { render } from 'react-dom' 23 | import { Provider } from 'react-redux' 24 | 25 | import App from 'components/App' 26 | import Demo from 'dev/demo' 27 | import createStore from 'store' 28 | 29 | if (process.env.NODE_ENV !== 'staging') { 30 | window.__SEER_INITIALIZED__ = true 31 | } 32 | 33 | createStore(store => { 34 | const root = ( 35 | 36 |
37 | 38 | {process.env.NODE_ENV !== 'staging' && } 39 |
40 |
41 | ) 42 | 43 | const rootNode = document.getElementById('root') 44 | 45 | render(root, rootNode) 46 | }) 47 | -------------------------------------------------------------------------------- /src/bridge/content-script.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | const switchCapture = value => { 22 | const script = document.createElement('script') 23 | script.textContent = `window.__SEER_INITIALIZED__ = ${value}` 24 | document.documentElement.appendChild(script) 25 | script.parentNode.removeChild(script) 26 | } 27 | 28 | /** 29 | * window -> background 30 | */ 31 | window.addEventListener('message', event => { 32 | if (event.source !== window || event.data.source !== 'seer-agent') { 33 | return 34 | } 35 | 36 | chrome.runtime.sendMessage(event.data) 37 | }) 38 | 39 | /** 40 | * background -> window 41 | */ 42 | chrome.extension.onMessage.addListener(event => { 43 | if (event.type === 'switchCapture') { 44 | return switchCapture(event.payload.value) 45 | } 46 | 47 | window.postMessage(event, '*') 48 | }) 49 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React from 'react' 22 | import { render } from 'react-dom' 23 | import { Provider } from 'react-redux' 24 | import get from 'lodash/get' 25 | 26 | import App from 'components/App' 27 | import createStore from 'store' 28 | import { sendMessage, onMessage } from 'bridge' 29 | 30 | createStore(store => { 31 | sendMessage('init') 32 | 33 | onMessage(({ type, payload }) => { 34 | if (type === 'RESET') { 35 | const active = get(store.getState(), 'ui.active') 36 | sendMessage('switchCapture', { value: active }) 37 | } 38 | 39 | store.dispatch({ type, payload: JSON.parse(payload) }) 40 | }) 41 | 42 | const root = ( 43 | 44 | 45 | 46 | ) 47 | 48 | const rootNode = document.getElementById('root') 49 | 50 | render(root, rootNode) 51 | }) 52 | -------------------------------------------------------------------------------- /src/components/App.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React, { Component } from 'react' 22 | import styled, { ThemeProvider } from 'styled-components' 23 | 24 | import Content from 'components/Content' 25 | import Header from 'components/Header' 26 | 27 | import theme from 'theme' 28 | 29 | const Container = styled.div` 30 | background-color: ${p => p.theme.base00}; 31 | color: white; 32 | font-family: 'Helvetia Neue', sans-serif; 33 | font-size: 14px; 34 | user-select: none; 35 | 36 | flex-grow: 1; 37 | 38 | a { 39 | color: ${p => p.theme.primary}; 40 | } 41 | ` 42 | 43 | class App extends Component { 44 | render() { 45 | return ( 46 | 47 | 48 |
49 | 50 | 51 | 52 | ) 53 | } 54 | } 55 | 56 | export default App 57 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React from 'react' 22 | 23 | /** 24 | * Transform a timestamp into a readable time expressed in H:M:S 25 | */ 26 | export const humanTime = timestamp => { 27 | const d = new Date(timestamp) 28 | const h = d.getHours() 29 | const m = d.getMinutes() 30 | const s = d.getSeconds() 31 | return `${h}:${m}:${s}` 32 | } 33 | 34 | /** 35 | * Find the (potentially) nested path of an item in a specific dataset 36 | * and return said array 37 | */ 38 | export const findPath = (data, itemKey, path = []) => (data[itemKey].parent) 39 | ? findPath(data, data[itemKey].parent, [itemKey, ...path]) 40 | : [itemKey, ...path] 41 | 42 | /** 43 | * Custom renderer for the json tree, overriding array display to show a preview 44 | * for arrays of number containing less than 5 elements (eg RGBA, vertexes) 45 | */ 46 | export const getItemString = (type, data, itemType, itemString) => { 47 | if (Array.isArray(data) && data.length <= 4 && !isNaN(data[0])) { 48 | return ({`[${data.map(d => isNaN(d) ? d : d.toFixed(1)).join(', ')}]`}) 49 | } 50 | return ({itemType} {itemString}) 51 | } 52 | -------------------------------------------------------------------------------- /src/store.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import { createStore, applyMiddleware, compose } from 'redux' 22 | import serialize from 'serialize-javascript' 23 | import thunk from 'redux-thunk' 24 | import has from 'lodash/has' 25 | 26 | import reducer from 'reducers' 27 | 28 | const devTools = window.devToolsExtension ? window.devToolsExtension() : f => f 29 | 30 | const hasChromeStorage = has(window, 'chrome.storage.sync.get') 31 | 32 | export const getStorage = cb => 33 | hasChromeStorage ? chrome.storage.sync.get(cb) : cb(JSON.parse(localStorage.getItem('state'))) 34 | 35 | export const setStorage = (data, cb = f => f) => 36 | hasChromeStorage 37 | ? chrome.storage.sync.set(data, cb) 38 | : cb(localStorage.setItem('state', serialize(data))) 39 | 40 | export default cb => { 41 | const enhancers = compose(applyMiddleware(thunk), devTools) 42 | 43 | getStorage(initialState => { 44 | const store = createStore(reducer, initialState || {}, enhancers) 45 | 46 | if (module.hot) { 47 | module.hot.accept('./reducers', () => { 48 | const nextRootReducer = require('./reducers').default 49 | store.replaceReducer(nextRootReducer) 50 | }) 51 | } 52 | 53 | cb(store) 54 | }) 55 | } 56 | -------------------------------------------------------------------------------- /webpack/dev.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import webpack from 'webpack' 22 | import { resolve } from 'path' 23 | 24 | import webpackConfig from './base' 25 | 26 | const src = resolve(__dirname, '../src') 27 | 28 | export default { 29 | ...webpackConfig, 30 | 31 | entry: ['./src/dev/main'], 32 | 33 | devtool: 'inline-source-map', 34 | 35 | resolve: { 36 | alias: { 37 | 'mapbox-gl/js/geo/transform': resolve( 38 | __dirname, 39 | '../node_modules/mapbox-gl/js/geo/transform', 40 | ), 41 | 'mapbox-gl': resolve(__dirname, '../node_modules/mapbox-gl/dist/mapbox-gl.js'), 42 | react: resolve(__dirname, '../node_modules/react'), 43 | }, 44 | }, 45 | 46 | module: { 47 | rules: [ 48 | { 49 | test: /\.js$/, 50 | loader: 'babel-loader', 51 | include: src, 52 | query: { presets: ['react-hmre'] }, 53 | }, 54 | ], 55 | }, 56 | 57 | plugins: [ 58 | ...webpackConfig.plugins, 59 | new webpack.DefinePlugin({ 60 | 'process.env': { 61 | MAPBOX_TOKEN: JSON.stringify(process.env.MAPBOX_TOKEN || ''), 62 | }, 63 | }), 64 | new webpack.NoEmitOnErrorsPlugin(), 65 | ], 66 | 67 | node: { 68 | fs: 'empty', 69 | }, 70 | } 71 | -------------------------------------------------------------------------------- /src/reducers/ui.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import { handleActions } from 'redux-actions' 22 | 23 | const initialState = { 24 | active: true, 25 | selectedTab: null, 26 | selectedItem: [], 27 | } 28 | 29 | const selectFirstTab = (state, key) => 30 | state.selectedTab 31 | ? state 32 | : { 33 | ...state, 34 | selectedTab: key, 35 | } 36 | 37 | export default handleActions( 38 | { 39 | TOGGLE_ACTIVE: state => ({ ...state, active: !state.active }), 40 | 41 | LIST: (state, { payload: { key } }) => selectFirstTab(state, key), 42 | LIST_ITEM: (state, { payload: { key } }) => selectFirstTab(state, key), 43 | UPDATE_ITEM: (state, { payload: { key } }) => selectFirstTab(state, key), 44 | MULTI_UPDATE_ITEM: (state, { payload: { key } }) => selectFirstTab(state, key), 45 | 46 | SELECT_TAB: (state, { payload: key }) => ({ 47 | ...state, 48 | selectedTab: key, 49 | selectedItem: [], 50 | }), 51 | 52 | SELECT_ITEM: (state, { payload: selectedItem }) => ({ 53 | ...state, 54 | selectedItem, 55 | }), 56 | 57 | GOTO: (state, { payload }) => ({ ...state, ...payload }), 58 | 59 | RESET: state => ({ ...initialState, active: state.active }), 60 | }, 61 | initialState, 62 | ) 63 | -------------------------------------------------------------------------------- /src/components/Tabs.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React, { Component } from 'react' 22 | import { connect } from 'react-redux' 23 | import styled from 'styled-components' 24 | 25 | import { selectTab } from 'actions/ui' 26 | 27 | export const mapStateToProps = ({ main, ui: { selectedTab } }) => ({ 28 | tabs: Object.keys(main), 29 | selectedTab, 30 | }) 31 | 32 | const Container = styled.div` 33 | display: flex; 34 | ` 35 | 36 | const Tab = styled.div` 37 | display: flex; 38 | align-items: center; 39 | cursor: pointer; 40 | color: ${p => p.theme.color[p.isActive ? 'active' : 'inactive']}; 41 | background-color: ${p => (p.isActive ? p.theme.base01 : p.theme.base00)}; 42 | border-right: 1px solid ${p => p.theme.border.light}; 43 | 44 | &:after { 45 | height: 100%; 46 | content: ''; 47 | border-right: 1px solid ${p => p.theme.black}; 48 | } 49 | 50 | span { 51 | padding: 0.5rem 1.5rem; 52 | } 53 | ` 54 | 55 | @connect(mapStateToProps, { selectTab }) 56 | class Tabs extends Component { 57 | render() { 58 | const { tabs, selectedTab, selectTab } = this.props 59 | if (!tabs || !tabs.length) { 60 | return null 61 | } 62 | 63 | return ( 64 | 65 | {tabs.map(tab => ( 66 | selectTab(tab)} isActive={tab === selectedTab} key={tab}> 67 | {tab} 68 | 69 | ))} 70 | 71 | ) 72 | } 73 | } 74 | 75 | export default Tabs 76 | -------------------------------------------------------------------------------- /src/bridge/background.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | /* eslint-disable no-console */ 22 | const connections = {} 23 | 24 | /** 25 | * content-script -> devtools 26 | */ 27 | chrome.runtime.onMessage.addListener((message, sender) => { 28 | console.log('[Bridge] Message from window', message) 29 | if (!sender.tab) { return console.warn('[Bridge] Please specify a tab.') } 30 | 31 | const tab = connections[sender.tab.id] 32 | if (!tab) { return console.warn('[Bridge] Tab not connected') } 33 | 34 | tab.postMessage(message) 35 | }) 36 | 37 | /** 38 | * Upon tab reloading, reset the data 39 | */ 40 | chrome.tabs.onUpdated.addListener((tabId, info) => { 41 | if (!connections[tabId] || info.status !== 'complete') { return } 42 | connections[tabId].postMessage({ type: 'RESET', payload: '{}', source: 'seer-bridge' }) 43 | }) 44 | 45 | /** 46 | * devtools -> content-script 47 | */ 48 | chrome.runtime.onConnect.addListener(port => { 49 | 50 | if (port.name !== 'seer') { return } 51 | 52 | const toolsListener = message => { 53 | console.log('[Bridge] Message to window', message) 54 | 55 | if (message.type === 'init') { 56 | connections[message.tabId] = port 57 | port.onDisconnect.addListener(() => { 58 | delete connections[message.tabId] 59 | // port.onMessage.removeListener(toolsListener) 60 | }) 61 | } 62 | 63 | const { type, payload, source } = message 64 | 65 | chrome.tabs.sendMessage(message.tabId, { type, payload, source }) 66 | } 67 | 68 | port.onMessage.addListener(toolsListener) 69 | 70 | }) 71 | -------------------------------------------------------------------------------- /src/components/Switch.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { connect } from 'react-redux' 3 | import styled from 'styled-components' 4 | 5 | import { sendMessage } from 'bridge' 6 | import { toggleActive } from 'actions/ui' 7 | 8 | const Container = styled.div` 9 | display: flex; 10 | align-items: center; 11 | justify-content: center; 12 | 13 | padding: 0.5rem; 14 | background-color: rgba(black, 0.5); 15 | 16 | > label { 17 | font-size: 11px; 18 | cursor: pointer; 19 | margin-right: 0.5rem; 20 | } 21 | ` 22 | 23 | const Toggle = styled.div` 24 | width: 29px; 25 | position: relative; 26 | user-select: none; 27 | 28 | > input { 29 | display: none; 30 | 31 | &:checked + .label .switch { 32 | right: 0px; 33 | } 34 | } 35 | 36 | .label { 37 | display: block; 38 | overflow: hidden; 39 | cursor: pointer; 40 | border: 1px solid #56575c; 41 | } 42 | 43 | .switch { 44 | position: absolute; 45 | top: 0; 46 | bottom: 0; 47 | display: block; 48 | width: 11px; 49 | margin: 3px; 50 | 51 | transition: all 150ms ease-in; 52 | background-color: ${p => (p.isActive ? p.theme.primary : p.theme.border.light)}; 53 | } 54 | 55 | .inner { 56 | display: block; 57 | width: 200%; 58 | margin-left: -100%; 59 | 60 | &:before, 61 | &:after { 62 | display: block; 63 | float: left; 64 | width: 50%; 65 | height: 13px; 66 | padding: 0; 67 | box-sizing: border-box; 68 | } 69 | 70 | &:before, 71 | &:after { 72 | content: ''; 73 | } 74 | } 75 | ` 76 | 77 | @connect(({ ui: { active } }) => ({ active }), { 78 | toggleActive, 79 | }) 80 | class Switch extends Component { 81 | componentDidMount() { 82 | const { active } = this.props 83 | sendMessage('switchCapture', { value: active }) 84 | } 85 | 86 | componentWillUpdate(nextProps) { 87 | if (nextProps.active !== this.props.active) { 88 | sendMessage('switchCapture', { value: nextProps.active }) 89 | } 90 | } 91 | 92 | switch = () => { 93 | const { toggleActive } = this.props 94 | toggleActive() 95 | } 96 | 97 | render() { 98 | const { active } = this.props 99 | 100 | return ( 101 | 102 | 103 | 104 | 105 | 109 | 110 | 111 | ) 112 | } 113 | } 114 | 115 | export default Switch 116 | -------------------------------------------------------------------------------- /src/reducers/main.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import { handleActions } from 'redux-actions' 22 | import immutable from 'object-path-immutable' 23 | 24 | const initialState = {} 25 | 26 | export const defaultItem = { 27 | badges: [], 28 | objects: {}, 29 | lists: {}, 30 | actions: {}, 31 | images: {}, 32 | logs: [], 33 | links: [], 34 | parent: null, 35 | } 36 | 37 | const initItem = (state, key, itemKey) => !state[key] || !state[key][itemKey] 38 | ? immutable.set(state, [key, itemKey], defaultItem) 39 | : state 40 | 41 | export default handleActions({ 42 | 43 | LIST: (state, { payload: { key, data } }) => 44 | immutable.set(state, [key], data), 45 | 46 | LIST_ITEM: (state, { payload: { key, itemKey, data } }) => 47 | immutable.set(state, [key, itemKey], { 48 | ...defaultItem, 49 | ...data, 50 | }), 51 | 52 | UPDATE_ITEM: (state, { payload: { key, itemKey, path, data } }) => 53 | immutable.set(initItem(state, key, itemKey), [key, itemKey, ...path.split('.')], data), 54 | 55 | MULTI_UPDATE_ITEM: (state, { payload: { key, itemKey, array } }) => 56 | array.reduce((out, { path, data }) => 57 | immutable.set(out, [key, itemKey, ...path.split('.')], data), initItem(state, key, itemKey)), 58 | 59 | DELETE_ITEM: (state, { payload: { key, itemKey } }) => 60 | immutable.del(state, [key, itemKey]), 61 | 62 | ADD_LOG: (state, { payload: { key, itemKey, msg } }) => { 63 | const int = immutable.push(initItem(state, key, itemKey), [key, itemKey, 'logs'], { time: Date.now(), msg }) 64 | const len = int[key][itemKey].logs.length 65 | if (len < 20) { return int } 66 | return immutable.del(int, [key, itemKey, 'logs', 0]) 67 | }, 68 | 69 | RESET: () => initialState, 70 | 71 | }, initialState) 72 | -------------------------------------------------------------------------------- /webpack/build.babel.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import webpack from 'webpack' 22 | import { StatsWriterPlugin } from 'webpack-stats-plugin' 23 | import ExtractTextPlugin from 'extract-text-webpack-plugin' 24 | 25 | import webpackConfig from './base' 26 | 27 | export default { 28 | ...webpackConfig, 29 | 30 | entry: ['./src/main'], 31 | 32 | output: { 33 | ...webpackConfig.output, 34 | filename: 'bundle-[hash].js', 35 | }, 36 | 37 | module: { 38 | rules: [ 39 | { 40 | test: /\.js$/, 41 | use: 'babel-loader', 42 | exclude: /node_modules/, 43 | }, 44 | ], 45 | }, 46 | 47 | plugins: [ 48 | ...webpackConfig.plugins, 49 | 50 | new ExtractTextPlugin('styles-[hash].css'), 51 | 52 | new webpack.optimize.OccurrenceOrderPlugin(), 53 | new webpack.optimize.UglifyJsPlugin({ 54 | compress: { 55 | warnings: false, 56 | screw_ie8: true, // eslint-disable-line 57 | conditionals: true, 58 | unused: true, 59 | comparisons: true, 60 | sequences: true, 61 | dead_code: true, // eslint-disable-line 62 | evaluate: true, 63 | if_return: true, // eslint-disable-line 64 | join_vars: true, // eslint-disable-line 65 | }, 66 | output: { 67 | comments: false, 68 | }, 69 | }), 70 | 71 | new StatsWriterPlugin({ 72 | transform: data => 73 | JSON.stringify({ 74 | main: data.assetsByChunkName.main[0], 75 | styles: data.assetsByChunkName.main[1], 76 | }), 77 | }), 78 | ], 79 | 80 | stats: { 81 | colors: true, 82 | reasons: false, 83 | hash: false, 84 | version: false, 85 | timings: true, 86 | chunks: false, 87 | chunkModules: false, 88 | cached: false, 89 | cachedAssets: false, 90 | }, 91 | } 92 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |

18 | 19 |

20 | 21 |

22 | 23 |

A customizable devtool solution

24 | 25 | 26 | 27 | ### Introduction 28 | 29 | After the introduction of the completely new debugging/logging experience brought by Redux and its 30 | extension, we thought it would be a good idea to provide this to a greater audience of the Javascript 31 | ecosystem. The Seer API give library creators simple methods they need to implement so that developers 32 | using both these libraries and the extension will be able to easily debug state and even things 33 | like editing capabilities, as showcased above. 34 | 35 | Although pretty basic for now and only working with uber framemorks [deck.gl](https://github.com/uber/deck.gl) 36 | and [luma.gl](https://github.com/uber/luma.gl), we intend to extend it to allow for more possibilities and create more 37 | interactions in the future. 38 | 39 | ### API 40 | 41 | Checkout the [api directory](./api) to see the api usage allowing you to interact with the extension. 42 | 43 | ### Install 44 | 45 | The extension can be easily downloaded from the Chrome webstore. If you desire to build it manually, 46 | you simply need to `npm run build` after having installed the dependencies. 47 | 48 | ### Contributing 49 | 50 | If you desire to contribute to the development efforts of this project, the following processes 51 | will help you to debug and see your changes. 52 | 53 | npm start 54 | 55 | This command will spawn a webpack server that will serve the extension along with the test website. 56 | 57 | npm run standalone 58 | 59 | After a build and the uninstall of the unpacked extension, runs the demo without the app, so you can 60 | test direct interaction from the devtool panel. 61 | 62 | Note that for the mapbox tiles to load, you'll need to have a valid `MAPBOX_TOKEN` environment variable. 63 | 64 | 65 | Inspired by the awesome redux-devtools. 66 | Based on minus & Bridge. 67 | 68 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Seer", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "start": "node -r babel-register ./node_modules/.bin/webpack-dev-server --port 3000 --hot --config webpack/dev.js", 6 | "standalone": "NODE_ENV=staging npm start", 7 | "lint": "eslint src api/index.js webpack templates", 8 | "test": "rm -rf api/dist && NODE_ENV=test ava", 9 | "cover": "nyc --reporter html --reporter text npm test", 10 | "report": "nyc report --reporter text-lcov | coveralls", 11 | "api": "(cd api && npm run build && npm run docs)", 12 | "copy": "cp templates/{entry,manifest,128}.* dist && cp src/bridge/{background,content-script}.js dist && zip -r dist.zip dist", 13 | "build": "rm -rf dist* && NODE_ENV=production webpack --progress --hide-modules --config webpack/build.babel.js && npm run copy" 14 | }, 15 | "dependencies": { 16 | "classnames": "^2.2.5", 17 | "global": "^4.3.2", 18 | "hint.css": "^2.5.0", 19 | "lodash": "^4.17.4", 20 | "object-path-immutable": "^0.5.1", 21 | "prettier": "^1.7.4", 22 | "prop-types": "^15.5.10", 23 | "react": "^15.6.1", 24 | "react-dom": "^15.6.1", 25 | "react-icons": "^2.2.5", 26 | "react-json-tree-zavatta": "^0.1.4", 27 | "react-redux": "^5.0.5", 28 | "redux": "^3.7.1", 29 | "redux-actions": "^2.0.3", 30 | "redux-thunk": "^2.2.0", 31 | "serialize-javascript": "^1.3.0", 32 | "styled-components": "^2.2.4" 33 | }, 34 | "devDependencies": { 35 | "autoprefixer-loader": "^3.2.0", 36 | "ava": "^0.20.0", 37 | "babel-core": "^6.25.0", 38 | "babel-eslint": "^7.2.3", 39 | "babel-loader": "^7.1.1", 40 | "babel-plugin-istanbul": "^4.1.4", 41 | "babel-plugin-module-resolver": "^2.7.1", 42 | "babel-plugin-transform-decorators-legacy": "^1.3.4", 43 | "babel-preset-es2015": "^6.24.1", 44 | "babel-preset-react": "^6.24.1", 45 | "babel-preset-react-hmre": "^1.1.1", 46 | "babel-preset-stage-0": "^6.24.1", 47 | "babel-register": "^6.24.1", 48 | "coveralls": "^2.13.1", 49 | "deck.gl": "^4.1.0-alpha.7", 50 | "enzyme": "^2.9.1", 51 | "eslint": "^4.1.1", 52 | "eslint-config-prettier": "^2.6.0", 53 | "eslint-config-zavatta": "^6.0.0", 54 | "eslint-config-zavatta-react": "^2.2.1", 55 | "eslint-plugin-react": "^7.1.0", 56 | "extract-text-webpack-plugin": "^2.1.2", 57 | "html-webpack-plugin": "^2.29.0", 58 | "jsdom": "^11.0.0", 59 | "jsdom-global": "^3.0.2", 60 | "luma.gl": "^4.0.0-alpha.5", 61 | "node-sass": "^4.5.3", 62 | "nyc": "^11.0.3", 63 | "react-addons-test-utils": "^15.6.0", 64 | "react-map-gl": "beta", 65 | "sinon": "^2.3.6", 66 | "webpack": "^3.0.0", 67 | "webpack-dev-server": "^2.5.0", 68 | "webpack-stats-plugin": "^0.1.5" 69 | }, 70 | "ava": { 71 | "require": [ 72 | "babel-register", 73 | "jsdom-global/register" 74 | ], 75 | "babel": "inherit" 76 | }, 77 | "nyc": { 78 | "sourceMap": false, 79 | "instrument": false 80 | }, 81 | "author": "Balthazar Gronon ", 82 | "license": "MIT", 83 | "private": true 84 | } 85 | -------------------------------------------------------------------------------- /src/dev/demo.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import React, { Component } from 'react' 22 | import { connect } from 'react-redux' 23 | import MapGL from 'react-map-gl' 24 | import DeckGL, { LineLayer, ArcLayer, ScatterplotLayer } from 'deck.gl' 25 | import { sendMessage } from 'bridge' 26 | 27 | @connect() 28 | class Demo extends Component { 29 | state = { 30 | viewport: { 31 | latitude: 37.78, 32 | longitude: -122.41, 33 | zoom: 13.5, 34 | bearing: 180, 35 | pitch: 60, 36 | startDragLngLat: null, 37 | }, 38 | } 39 | 40 | componentDidMount() { 41 | sendMessage('init') 42 | 43 | window.addEventListener('message', msg => { 44 | if (msg.data.source === 'seer-core' && msg.data.type === 'switchCapture') { 45 | window.__SEER_INITIALIZED__ = msg.data.payload.value 46 | } 47 | if (msg.data.source !== 'seer-agent') { 48 | return 49 | } 50 | const { type, payload } = msg.data 51 | this.props.dispatch({ type, payload: JSON.parse(payload) }) 52 | }) 53 | } 54 | 55 | render() { 56 | const { viewport } = this.state 57 | 58 | const layers = [ 59 | new ArcLayer({ 60 | id: 'arc-layer', 61 | strokeWidth: 10, 62 | data: [ 63 | { 64 | sourcePosition: [-122.4, 37.7843], 65 | targetPosition: [-122.416, 37.781], 66 | color: [255, 0, 255], 67 | }, 68 | ], 69 | }), 70 | new ScatterplotLayer({ 71 | id: 'scatterplot-layer', 72 | data: [{ position: [-122.4, 37.78], radius: 5, color: [0, 255, 0] }], 73 | radiusScale: 100, 74 | }), 75 | new LineLayer({ 76 | id: 'line-layer', 77 | strokeWidth: 10, 78 | data: [ 79 | { 80 | sourcePosition: [-122.43, 37.79], 81 | targetPosition: [-122.416, 37.781], 82 | color: [255, 0, 0], 83 | }, 84 | ], 85 | }), 86 | ] 87 | 88 | return ( 89 |
90 | this.setState({ viewport: v })} 94 | dragRotate 95 | width={500} 96 | height={window.innerHeight} 97 | {...viewport} 98 | > 99 | 100 | 101 |
102 | ) 103 | } 104 | } 105 | 106 | export default Demo 107 | -------------------------------------------------------------------------------- /test/api.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | import test from 'ava' 22 | import camelCase from 'lodash/camelCase' 23 | import { spy } from 'sinon' 24 | 25 | import api from '../api' 26 | 27 | test('[API] check exports', t => { 28 | t.truthy(api, 'The global object is defined') 29 | t.truthy(Object.keys(api).length, 'Some methods are exported') 30 | t.truthy(api.send, 'The send method is defined') 31 | }) 32 | 33 | test('[API] send', t => { 34 | 35 | const postMessage = spy() 36 | window.postMessage = postMessage 37 | 38 | api.send('BEFORE_INIT') 39 | t.is(postMessage.callCount, 0, 'postMessage should not have been called before init') 40 | 41 | window.__SEER_INITIALIZED__ = true 42 | 43 | api.send('AFTER_INIT') 44 | t.is(postMessage.callCount, 1, 'postMessage should now been called after init') 45 | t.is(postMessage.args[0][0].type, 'AFTER_INIT', 'The action type should match') 46 | 47 | }) 48 | 49 | test('[API] listeners', t => { 50 | 51 | const addEventListener = spy() 52 | window.addEventListener = addEventListener 53 | 54 | api.init() 55 | api.init() 56 | 57 | t.truthy(window.__SEER_LISTENER__, 'The listener should have been defined') 58 | t.truthy(addEventListener.calledOnce, 'It should have added the listener') 59 | t.is(addEventListener.args[0][0], 'message', 'The listener should be on message events') 60 | 61 | t.is(api.listeners.size, 0, 'There should be no listeners') 62 | 63 | t.throws(api.listenFor) 64 | 65 | const deck = spy() 66 | api.listenFor('deck.gl', deck) 67 | 68 | t.is(api.listeners.size, 1, 'There should be a new listener added') 69 | t.truthy(api.listeners.has('deck.gl'), 'It should be indexed with the type') 70 | t.is(api.listeners.get('deck.gl').length, 1, 'It should be an array of callbacks') 71 | 72 | const listener = addEventListener.args[0][1] 73 | listener() 74 | listener({}) 75 | listener({ data: { source: 'redux' } }) 76 | listener({ data: { type: 'undefined.gl', payload: 42, source: 'seer-core' } }) 77 | listener({ data: { type: 'deck.gl', payload: 42, source: 'seer-core' } }) 78 | 79 | t.truthy(deck.calledOnce, 'The deck listener should have been called') 80 | t.is(deck.args[0][0], 42, 'With the answer') 81 | 82 | const removeEventListener = spy() 83 | window.removeEventListener = removeEventListener 84 | 85 | api.clean() 86 | api.clean() 87 | t.falsy(window.__SEER_LISTENER__) 88 | t.truthy(removeEventListener.calledOnce, 'The listener should have been removed') 89 | 90 | api.listenFor('deck.gl', f => f) 91 | 92 | }) 93 | 94 | test('[API] methods', t => { 95 | 96 | const postMessage = spy() 97 | window.postMessage = postMessage 98 | window.__SEER_INITIALIZED__ = true 99 | 100 | ;['LIST', 'LIST_ITEM'].forEach((type, i) => { 101 | 102 | api[camelCase(type)]({ key: 'deck.gl' }) 103 | t.is(postMessage.callCount, i + 1, 'The call count should increment each time') 104 | t.is(postMessage.args[i][0].source, 'seer-agent', 'The source should be correct') 105 | t.is(postMessage.args[i][0].type, type, 'The type should match') 106 | 107 | }) 108 | 109 | }) 110 | -------------------------------------------------------------------------------- /api/index.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017 Uber Technologies, Inc. 2 | // 3 | // Permission is hereby granted, free of charge, to any person obtaining a copy 4 | // of this software and associated documentation files (the "Software"), to deal 5 | // in the Software without restriction, including without limitation the rights 6 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | // copies of the Software, and to permit persons to whom the Software is 8 | // furnished to do so, subject to the following conditions: 9 | // 10 | // The above copyright notice and this permission notice shall be included in 11 | // all copies or substantial portions of the Software. 12 | // 13 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | // THE SOFTWARE. 20 | 21 | const isBrowser = typeof window !== 'undefined' && window.addEventListener 22 | 23 | const timers = new Map() 24 | 25 | /** 26 | * Ready check for Seer initialization 27 | * 28 | * @returns {Boolean} 29 | */ 30 | const isReady = () => isBrowser && window.__SEER_INITIALIZED__ 31 | 32 | /** 33 | * Utility method allowing to throttle a user action based on a key and a minimun delay. 34 | * 35 | * @param key {String} A unique key 36 | * @param delay {Number} The minimal delay to throttle 37 | * @returns {Boolean} 38 | */ 39 | const throttle = (key, delay) => { 40 | const time = timers.get(key) 41 | const now = Date.now() 42 | if (time && now - time < delay) { return true } 43 | timers.set(key, now) 44 | return false 45 | } 46 | 47 | const replacer = seen => (key, value) => { 48 | if (value && typeof value === 'object' && seen.has(value)) { return } 49 | seen.add(value) 50 | const isArray = Object.prototype.toString.call(value).slice(8, -1).includes('Array') 51 | if (isArray) { return Array.prototype.slice.call(value, 0, 20) } 52 | return value 53 | } 54 | 55 | /** 56 | * Low-level api leveraging window.postMessage 57 | * 58 | * @param type {String} The action type 59 | * @param payload {Any} The action payload 60 | */ 61 | const send = (type, data = {}) => { 62 | if (!isBrowser || !isReady()) { return } 63 | 64 | const seen = new Set() 65 | const payload = JSON.stringify(data, replacer(seen)) 66 | 67 | try { 68 | window.postMessage({ type, payload, source: 'seer-agent' }, '*') 69 | } catch (e) { 70 | if (throttle('seer-log', 2E3)) { return } 71 | console.log(e) // eslint-disable-line 72 | } 73 | } 74 | 75 | const listeners = new Map() 76 | 77 | const listener = message => { 78 | if (!message || !message.data || message.data.source !== 'seer-core') { return } 79 | const { type, payload } = message.data 80 | 81 | const typeListeners = listeners.get(type) 82 | if (typeListeners) { 83 | typeListeners.forEach(cb => cb(payload)) 84 | } 85 | } 86 | 87 | /** 88 | * Initilize window listener. There will be only one for the whole process 89 | * to prevent too many registrations. 90 | * 91 | * This method will be called automatically if you use the `listenFor` method. 92 | */ 93 | const init = () => { 94 | if (!isBrowser || window.__SEER_LISTENER__) { return } 95 | window.addEventListener('message', listener) 96 | window.__SEER_LISTENER__ = true 97 | } 98 | 99 | /** 100 | * Clean listener. Can be useful in case you want to unregister upcoming events 101 | * or liberate memory. 102 | */ 103 | const clean = () => { 104 | if (!isBrowser || !window.__SEER_LISTENER__) { return } 105 | window.removeEventListener('message', listener) 106 | delete window.__SEER_LISTENER__ 107 | } 108 | 109 | /** 110 | * Create a listener that will be called upon events of the given key. 111 | * 112 | * @param key {String} The unique tab key 113 | * @param cb {Function} A callback that will receive the message payload 114 | */ 115 | const listenFor = (type, cb) => { 116 | if (!isBrowser) { return } 117 | if (!type || !cb) { throw new Error('Please provide a type and callback') } 118 | if (!listeners.has(type)) { listeners.set(type, []) } 119 | if (!window.__SEER_LISTENER__) { init() } 120 | listeners.get(type).push(cb) 121 | } 122 | 123 | /** 124 | * Remove an identity listener 125 | * 126 | * @param cb {Function} The callback to remove 127 | */ 128 | const removeListener = cb => { 129 | listeners.forEach((typeListeners, key) => { 130 | listeners.set(key, typeListeners.filter(l => l !== cb)) 131 | }) 132 | } 133 | 134 | /** 135 | * Creates a new indexed list. 136 | * It works by index to get O(1) accessing and performance. 137 | * 138 | * @param key {String} The key of the tab 139 | * @param data {Object} The indexed object 140 | */ 141 | const list = (key, data) => send('LIST', { key, data }) 142 | 143 | /** 144 | * Creates an element in the indexed list, based on the itemKey. 145 | * 146 | * @param key {String} The key of the tab 147 | * @param itemKey {String} The key of the item 148 | * @param data {Any} The value of the item 149 | */ 150 | const listItem = (key, itemKey, data = {}) => send('LIST_ITEM', { key, itemKey, data }) 151 | 152 | /** 153 | * Update an item property, can be deeply nested. 154 | * 155 | * @param key {String} The key of the tab 156 | * @param itemKey {String} The key of the item 157 | * @param path {String} The path of the variable you want to update 158 | * @param data {Object} The new value 159 | */ 160 | const updateItem = (key, itemKey, path, data) => send('UPDATE_ITEM', { key, itemKey, path, data }) 161 | 162 | /** 163 | * Similar to updateItem, but allows to pass an array with {path,data} pairs for 164 | * multiple update of the same item without having to send multiple messages. 165 | * 166 | * @param key {String} The key of the tab 167 | * @param itemKey {String} The key of the item 168 | * @param array {Array} The array of updates 169 | * @param array.path {String} The path for this update 170 | * @param array.data {Object} The value of this update 171 | */ 172 | const multiUpdate = (key, itemKey, array) => send('MULTI_UPDATE_ITEM', { key, itemKey, array }) 173 | 174 | /** 175 | * Remove a specific item in a specific tab. 176 | * 177 | * @param key {String} They key of the tab 178 | * @param itemKey {String} The key of the item 179 | */ 180 | const deleteItem = (key, itemKey) => send('DELETE_ITEM', { key, itemKey }) 181 | 182 | /** 183 | * Will create a log message to an item, that will be displayde with the current time. 184 | * 185 | * @param key {String} The key of the tab 186 | * @param itemKey {String} The key of the item 187 | * @param msg {String} The message to display 188 | */ 189 | const addLog = (key, itemKey, msg) => send('ADD_LOG', { key, itemKey, msg }) 190 | 191 | export default { 192 | 193 | send, 194 | throttle, 195 | isReady, 196 | 197 | list, 198 | listItem, 199 | updateItem, 200 | multiUpdate, 201 | deleteItem, 202 | addLog, 203 | 204 | listeners, 205 | listenFor, 206 | removeListener, 207 | init, 208 | clean, 209 | 210 | } 211 | -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # Seer API 2 | 3 | This library provides an abstraction around the [Window.postMessage API](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) 4 | to interact with the Seer extension. 5 | You could use this module if you have a framework or application that wants to display debugging 6 | information in the Seer Chrome extension. 7 | 8 | ## Install 9 | 10 | Simply download the package from the npm registry 11 | 12 | yarn add seer 13 | 14 | ## Notes 15 | 16 | The extension will declare a `__SEER_INITIALIZED__` boolean on the window, 17 | that you can use to check if the extension is installed and prevent any useless 18 | processing in production or for real-users. 19 | 20 | ## Internal 21 | 22 | How the communication is done exactly relies on the bridge, that you can checkout 23 | in its dedicated [directory](../src/bridge). The following schema represent the 24 | complete data flow: 25 | 26 | 27 | 28 | ## Functions 29 | 30 |
31 |
isReady()Boolean
32 |

Ready check for Seer initialization

33 |
34 |
throttle(key, delay)Boolean
35 |

Utility method allowing to throttle a user action based on a key and a minimun delay.

36 |
37 |
send(type, payload)
38 |

Low-level api leveraging window.postMessage

39 |
40 |
init()
41 |

Initilize window listener. There will be only one for the whole process 42 | to prevent too many registrations.

43 |

This method will be called automatically if you use the listenFor method.

44 |
45 |
clean()
46 |

Clean listener. Can be useful in case you want to unregister upcoming events 47 | or liberate memory.

48 |
49 |
listenFor(key, cb)
50 |

Create a listener that will be called upon events of the given key.

51 |
52 |
removeListener(cb)
53 |

Remove an identity listener

54 |
55 |
list(key, data)
56 |

Creates a new indexed list. 57 | It works by index to get O(1) accessing and performance.

58 |
59 |
listItem(key, itemKey, data)
60 |

Creates an element in the indexed list, based on the itemKey.

61 |
62 |
updateItem(key, itemKey, path, data)
63 |

Update an item property, can be deeply nested.

64 |
65 |
multiUpdate(key, itemKey, array)
66 |

Similar to updateItem, but allows to pass an array with {path,data} pairs for 67 | multiple update of the same item without having to send multiple messages.

68 |
69 |
deleteItem(key, itemKey)
70 |

Remove a specific item in a specific tab.

71 |
72 |
addLog(key, itemKey, msg)
73 |

Will create a log message to an item, that will be displayde with the current time.

74 |
75 |
76 | 77 | 78 | 79 | ### isReady() ⇒ Boolean 80 | Ready check for Seer initialization 81 | 82 | **Kind**: global function 83 | 84 | 85 | ### throttle(key, delay) ⇒ Boolean 86 | Utility method allowing to throttle a user action based on a key and a minimun delay. 87 | 88 | **Kind**: global function 89 | 90 | | Param | Type | Description | 91 | | --- | --- | --- | 92 | | key | String | A unique key | 93 | | delay | Number | The minimal delay to throttle | 94 | 95 | 96 | 97 | ### send(type, payload) 98 | Low-level api leveraging window.postMessage 99 | 100 | **Kind**: global function 101 | 102 | | Param | Type | Description | 103 | | --- | --- | --- | 104 | | type | String | The action type | 105 | | payload | Any | The action payload | 106 | 107 | 108 | 109 | ### init() 110 | Initilize window listener. There will be only one for the whole process 111 | to prevent too many registrations. 112 | 113 | This method will be called automatically if you use the `listenFor` method. 114 | 115 | **Kind**: global function 116 | 117 | 118 | ### clean() 119 | Clean listener. Can be useful in case you want to unregister upcoming events 120 | or liberate memory. 121 | 122 | **Kind**: global function 123 | 124 | 125 | ### listenFor(key, cb) 126 | Create a listener that will be called upon events of the given key. 127 | 128 | **Kind**: global function 129 | 130 | | Param | Type | Description | 131 | | --- | --- | --- | 132 | | key | String | The unique tab key | 133 | | cb | function | A callback that will receive the message payload | 134 | 135 | 136 | 137 | ### removeListener(cb) 138 | Remove an identity listener 139 | 140 | **Kind**: global function 141 | 142 | | Param | Type | Description | 143 | | --- | --- | --- | 144 | | cb | function | The callback to remove | 145 | 146 | 147 | 148 | ### list(key, data) 149 | Creates a new indexed list. 150 | It works by index to get O(1) accessing and performance. 151 | 152 | **Kind**: global function 153 | 154 | | Param | Type | Description | 155 | | --- | --- | --- | 156 | | key | String | The key of the tab | 157 | | data | Object | The indexed object | 158 | 159 | 160 | 161 | ### listItem(key, itemKey, data) 162 | Creates an element in the indexed list, based on the itemKey. 163 | 164 | **Kind**: global function 165 | 166 | | Param | Type | Description | 167 | | --- | --- | --- | 168 | | key | String | The key of the tab | 169 | | itemKey | String | The key of the item | 170 | | data | Any | The value of the item | 171 | 172 | 173 | 174 | ### updateItem(key, itemKey, path, data) 175 | Update an item property, can be deeply nested. 176 | 177 | **Kind**: global function 178 | 179 | | Param | Type | Description | 180 | | --- | --- | --- | 181 | | key | String | The key of the tab | 182 | | itemKey | String | The key of the item | 183 | | path | String | The path of the variable you want to update | 184 | | data | Object | The new value | 185 | 186 | 187 | 188 | ### multiUpdate(key, itemKey, array) 189 | Similar to updateItem, but allows to pass an array with {path,data} pairs for 190 | multiple update of the same item without having to send multiple messages. 191 | 192 | **Kind**: global function 193 | 194 | | Param | Type | Description | 195 | | --- | --- | --- | 196 | | key | String | The key of the tab | 197 | | itemKey | String | The key of the item | 198 | | array | Array | The array of updates | 199 | | array.path | String | The path for this update | 200 | | array.data | Object | The value of this update | 201 | 202 | 203 | 204 | ### deleteItem(key, itemKey) 205 | Remove a specific item in a specific tab. 206 | 207 | **Kind**: global function 208 | 209 | | Param | Type | Description | 210 | | --- | --- | --- | 211 | | key | String | They key of the tab | 212 | | itemKey | String | The key of the item | 213 | 214 | 215 | 216 | ### addLog(key, itemKey, msg) 217 | Will create a log message to an item, that will be displayde with the current time. 218 | 219 | **Kind**: global function 220 | 221 | | Param | Type | Description | 222 | | --- | --- | --- | 223 | | key | String | The key of the tab | 224 | | itemKey | String | The key of the item | 225 | | msg | String | The message to display | 226 | 227 | -------------------------------------------------------------------------------- /src/components/Content.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import PropTypes from 'prop-types' 3 | import { connect } from 'react-redux' 4 | import styled from 'styled-components' 5 | import JSONTree from 'react-json-tree-zavatta' 6 | import LinkIcon from 'react-icons/lib/md/link' 7 | import RightIcon from 'react-icons/lib/fa/angle-right' 8 | import DownIcon from 'react-icons/lib/fa/angle-down' 9 | 10 | import { sendMessage } from 'bridge' 11 | import { humanTime, findPath, getItemString } from 'utils' 12 | import { goto, selectItem } from 'actions/ui' 13 | import { has, getRoot, checkOpen } from 'helpers/content' 14 | import Help from 'components/Help' 15 | 16 | const Container = styled.div` 17 | flex-grow: 1; 18 | 19 | > * + * { 20 | border-top: 3px solid ${p => p.theme.base00}; 21 | &:before { 22 | content: ''; 23 | border-top: 1px solid ${p => p.theme.border.light01}; 24 | } 25 | } 26 | ` 27 | 28 | const Item = styled.div` 29 | padding: 1rem; 30 | 31 | > div { 32 | padding-left: 1rem; 33 | } 34 | 35 | > * + * { 36 | margin-top 1.5rem; 37 | padding-top: 1rem; 38 | border-top: 1px solid rgba(white, 0.1); 39 | } 40 | ` 41 | 42 | const Badge = styled.span` 43 | line-height: 15px; 44 | font-size: 12px; 45 | font-weight: bold; 46 | color: ${p => p.theme.color.inactive}; 47 | background-color: ${p => p.theme.base00}; 48 | 49 | padding: 0.3rem 0.5rem; 50 | display: flex; 51 | justify-content: center; 52 | ` 53 | 54 | const ListItem = styled.div` 55 | background-color: ${p => p.theme.base01}; 56 | display: flex; 57 | flex-direction: column; 58 | ` 59 | 60 | const ItemMeta = styled.div` 61 | display: flex; 62 | align-items: center; 63 | cursor: pointer; 64 | padding: 1rem; 65 | height: 3.5rem; 66 | 67 | h3 { 68 | display: flex; 69 | align-items: center; 70 | margin-right: auto; 71 | } 72 | 73 | > span + span { 74 | margin-left: 0.5rem; 75 | } 76 | ` 77 | 78 | export const mapStateToProps = ({ ui, main }) => { 79 | const { selectedTab, selectedItem } = ui 80 | const data = main[selectedTab] 81 | return { data, selectedTab, selectedItem } 82 | } 83 | 84 | @connect(mapStateToProps, { 85 | selectItem, 86 | goto, 87 | }) 88 | class Content extends Component { 89 | static contextTypes = { store: PropTypes.object } 90 | 91 | updateValue = (itemKey, mainKey, { keyPath, value }) => { 92 | const { selectedTab } = this.props 93 | 94 | sendMessage(selectedTab, { 95 | type: 'edit', 96 | valuePath: [mainKey, ...keyPath.map((p, i, array) => array[array.length - i - 1])], 97 | itemKey, 98 | value, 99 | }) 100 | } 101 | 102 | goto = link => { 103 | const { goto } = this.props 104 | const { main } = this.context.store.getState() 105 | const [tab, itemKey] = link.split(':') 106 | const data = main[tab] 107 | // TODO maybe error toast? 108 | if (!data) { 109 | return 110 | } 111 | const path = findPath(data, itemKey) 112 | goto({ selectedItem: path, selectedTab: tab }) 113 | } 114 | 115 | renderItem = (itemKey, item, path) => { 116 | const { objects, actions, images, logs, links } = item 117 | 118 | return ( 119 | 120 | {has(actions) && ( 121 |
122 | {Object.keys(actions).map(key => { 123 | const { type, ...actionProps } = actions[key] 124 | return type === 'button' ? ( 125 | 128 | ) : ( 129 |
130 | {key} 131 | 132 |
133 | ) 134 | })} 135 |
136 | )} 137 | 138 | {has(objects) && ( 139 |
140 | {Object.keys(objects).map(key => ( 141 |
142 |
{key}
143 |
144 | this.updateValue(itemKey, key, v)} 147 | data={objects[key]} 148 | hideRoot 149 | /> 150 |
151 |
152 | ))} 153 |
154 | )} 155 | 156 | {has(images) && ( 157 |
158 | {Object.keys(images).map(key => ( 159 |
160 |
{key}
161 | 162 |
163 | ))} 164 |
165 | )} 166 | 167 | {has(logs) && ( 168 |
169 | {logs.map(({ time, msg }, i) => ( 170 |
171 | 172 | {humanTime(time)} 173 | {': '} 174 | 175 | {msg} 176 |
177 | ))} 178 |
179 | )} 180 | 181 | {has(links) && ( 182 | 190 | )} 191 | 192 | {this.renderChildren(itemKey, path)} 193 |
194 | ) 195 | } 196 | 197 | renderChildren = (parentKey, path) => { 198 | const { data } = this.props 199 | const children = Object.keys(data).reduce((out, key) => { 200 | const el = data[key] 201 | if (el.parent === parentKey) { 202 | out[key] = el 203 | } 204 | return out 205 | }, {}) 206 | 207 | if (!Object.keys(children).length) { 208 | return null 209 | } 210 | 211 | return
{this.renderList(children, path)}
212 | } 213 | 214 | renderList = (list, dadPath = []) => { 215 | const { selectedItem, selectItem } = this.props 216 | 217 | return Object.keys(list) 218 | .sort((keyA, keyB) => keyA.localeCompare(keyB)) 219 | .map(key => { 220 | const path = [...dadPath, key] 221 | const isOpen = checkOpen(selectedItem, path) 222 | const item = list[key] 223 | 224 | return ( 225 | 226 | (isOpen ? selectItem(dadPath) : selectItem(path))}> 227 |

228 | 229 | {isOpen ? : } 230 | 231 | {key} 232 |

233 | 234 | {item.badges.map((badge, i) => ( 235 | 240 | {badge.text || badge} 241 | 242 | ))} 243 |
244 | 245 | {isOpen && this.renderItem(key, item, path)} 246 |
247 | ) 248 | }) 249 | } 250 | 251 | render() { 252 | const { selectedTab, data } = this.props 253 | 254 | return ( 255 | 256 | {!selectedTab && } 257 | {data && this.renderList(getRoot(data))} 258 | 259 | ) 260 | } 261 | } 262 | 263 | export default Content 264 | -------------------------------------------------------------------------------- /api/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.0" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" 8 | integrity sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8= 9 | 10 | acorn-jsx@^3.0.0: 11 | version "3.0.1" 12 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 13 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= 14 | dependencies: 15 | acorn "^3.0.4" 16 | 17 | acorn@^3.0.4, acorn@^3.3.0: 18 | version "3.3.0" 19 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 20 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= 21 | 22 | ajv@^4.9.1: 23 | version "4.11.7" 24 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" 25 | integrity sha1-hlWl2G0IJJhcxHGh2RP7Zymg7Eg= 26 | dependencies: 27 | co "^4.6.0" 28 | json-stable-stringify "^1.0.1" 29 | 30 | amdefine@>=0.0.4: 31 | version "1.0.1" 32 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 33 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 34 | 35 | ansi-escape-sequences@^3.0.0: 36 | version "3.0.0" 37 | resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz#1c18394b6af9b76ff9a63509fa497669fd2ce53e" 38 | integrity sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4= 39 | dependencies: 40 | array-back "^1.0.3" 41 | 42 | ansi-regex@^2.0.0: 43 | version "2.1.1" 44 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 45 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 46 | 47 | ansi-styles@^2.2.1: 48 | version "2.2.1" 49 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 50 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 51 | 52 | anymatch@^1.3.0: 53 | version "1.3.0" 54 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 55 | integrity sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc= 56 | dependencies: 57 | arrify "^1.0.0" 58 | micromatch "^2.1.5" 59 | 60 | app-usage-stats@^0.5.0: 61 | version "0.5.1" 62 | resolved "https://registry.yarnpkg.com/app-usage-stats/-/app-usage-stats-0.5.1.tgz#6547c5db9bab0aa5f5b2c560eacc8af20d0ab13b" 63 | integrity sha1-ZUfF25urCqX1ssVg6syK8g0KsTs= 64 | dependencies: 65 | array-back "^1.0.4" 66 | home-path "^1.0.3" 67 | test-value "^2.1.0" 68 | usage-stats "^0.9.0" 69 | 70 | aproba@^1.0.3: 71 | version "1.1.1" 72 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" 73 | integrity sha1-ldNgDwdxCqDpKYxyatXs8urLq6s= 74 | 75 | are-we-there-yet@~1.1.2: 76 | version "1.1.4" 77 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 78 | integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= 79 | dependencies: 80 | delegates "^1.0.0" 81 | readable-stream "^2.0.6" 82 | 83 | arr-diff@^2.0.0: 84 | version "2.0.0" 85 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 86 | integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= 87 | dependencies: 88 | arr-flatten "^1.0.1" 89 | 90 | arr-flatten@^1.0.1: 91 | version "1.0.3" 92 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 93 | integrity sha1-onTthawIhJtr14R8RYB0XcUa37E= 94 | 95 | array-back@^1.0.2, array-back@^1.0.3, array-back@^1.0.4: 96 | version "1.0.4" 97 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" 98 | integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= 99 | dependencies: 100 | typical "^2.6.0" 101 | 102 | array-unique@^0.2.1: 103 | version "0.2.1" 104 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 105 | integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= 106 | 107 | arrify@^1.0.0: 108 | version "1.0.1" 109 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 110 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 111 | 112 | asn1@~0.2.3: 113 | version "0.2.3" 114 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 115 | integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= 116 | 117 | assert-plus@1.0.0, assert-plus@^1.0.0: 118 | version "1.0.0" 119 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 120 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 121 | 122 | assert-plus@^0.2.0: 123 | version "0.2.0" 124 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 125 | integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= 126 | 127 | async-each@^1.0.0: 128 | version "1.0.1" 129 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 130 | integrity sha1-GdOGodntxufByF04iu28xW0zYC0= 131 | 132 | async@~0.2.6: 133 | version "0.2.10" 134 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 135 | integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= 136 | 137 | asynckit@^0.4.0: 138 | version "0.4.0" 139 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 140 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 141 | 142 | aws-sign2@~0.6.0: 143 | version "0.6.0" 144 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 145 | integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= 146 | 147 | aws4@^1.2.1: 148 | version "1.6.0" 149 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 150 | integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= 151 | 152 | babel-cli@^6.24.1: 153 | version "6.24.1" 154 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" 155 | integrity sha1-IHzXBbumFImy6kG1MSNBz2rKIoM= 156 | dependencies: 157 | babel-core "^6.24.1" 158 | babel-polyfill "^6.23.0" 159 | babel-register "^6.24.1" 160 | babel-runtime "^6.22.0" 161 | commander "^2.8.1" 162 | convert-source-map "^1.1.0" 163 | fs-readdir-recursive "^1.0.0" 164 | glob "^7.0.0" 165 | lodash "^4.2.0" 166 | output-file-sync "^1.1.0" 167 | path-is-absolute "^1.0.0" 168 | slash "^1.0.0" 169 | source-map "^0.5.0" 170 | v8flags "^2.0.10" 171 | optionalDependencies: 172 | chokidar "^1.6.1" 173 | 174 | babel-code-frame@^6.22.0: 175 | version "6.22.0" 176 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 177 | integrity sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ= 178 | dependencies: 179 | chalk "^1.1.0" 180 | esutils "^2.0.2" 181 | js-tokens "^3.0.0" 182 | 183 | babel-core@^6.24.1: 184 | version "6.24.1" 185 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" 186 | integrity sha1-jEKFZNzh4fQfszfsNPTDsCK1rYM= 187 | dependencies: 188 | babel-code-frame "^6.22.0" 189 | babel-generator "^6.24.1" 190 | babel-helpers "^6.24.1" 191 | babel-messages "^6.23.0" 192 | babel-register "^6.24.1" 193 | babel-runtime "^6.22.0" 194 | babel-template "^6.24.1" 195 | babel-traverse "^6.24.1" 196 | babel-types "^6.24.1" 197 | babylon "^6.11.0" 198 | convert-source-map "^1.1.0" 199 | debug "^2.1.1" 200 | json5 "^0.5.0" 201 | lodash "^4.2.0" 202 | minimatch "^3.0.2" 203 | path-is-absolute "^1.0.0" 204 | private "^0.1.6" 205 | slash "^1.0.0" 206 | source-map "^0.5.0" 207 | 208 | babel-generator@^6.24.1: 209 | version "6.24.1" 210 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" 211 | integrity sha1-5xX0hsWN7SVknYiJRNUqoHxdlJc= 212 | dependencies: 213 | babel-messages "^6.23.0" 214 | babel-runtime "^6.22.0" 215 | babel-types "^6.24.1" 216 | detect-indent "^4.0.0" 217 | jsesc "^1.3.0" 218 | lodash "^4.2.0" 219 | source-map "^0.5.0" 220 | trim-right "^1.0.1" 221 | 222 | babel-helper-bindify-decorators@^6.24.1: 223 | version "6.24.1" 224 | resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" 225 | integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= 226 | dependencies: 227 | babel-runtime "^6.22.0" 228 | babel-traverse "^6.24.1" 229 | babel-types "^6.24.1" 230 | 231 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 232 | version "6.24.1" 233 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 234 | integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= 235 | dependencies: 236 | babel-helper-explode-assignable-expression "^6.24.1" 237 | babel-runtime "^6.22.0" 238 | babel-types "^6.24.1" 239 | 240 | babel-helper-call-delegate@^6.24.1: 241 | version "6.24.1" 242 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 243 | integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= 244 | dependencies: 245 | babel-helper-hoist-variables "^6.24.1" 246 | babel-runtime "^6.22.0" 247 | babel-traverse "^6.24.1" 248 | babel-types "^6.24.1" 249 | 250 | babel-helper-define-map@^6.24.1: 251 | version "6.24.1" 252 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" 253 | integrity sha1-epdH8ljYlH0y1RX2qhx70CIEoIA= 254 | dependencies: 255 | babel-helper-function-name "^6.24.1" 256 | babel-runtime "^6.22.0" 257 | babel-types "^6.24.1" 258 | lodash "^4.2.0" 259 | 260 | babel-helper-explode-assignable-expression@^6.24.1: 261 | version "6.24.1" 262 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 263 | integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= 264 | dependencies: 265 | babel-runtime "^6.22.0" 266 | babel-traverse "^6.24.1" 267 | babel-types "^6.24.1" 268 | 269 | babel-helper-explode-class@^6.24.1: 270 | version "6.24.1" 271 | resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" 272 | integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= 273 | dependencies: 274 | babel-helper-bindify-decorators "^6.24.1" 275 | babel-runtime "^6.22.0" 276 | babel-traverse "^6.24.1" 277 | babel-types "^6.24.1" 278 | 279 | babel-helper-function-name@^6.24.1: 280 | version "6.24.1" 281 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 282 | integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= 283 | dependencies: 284 | babel-helper-get-function-arity "^6.24.1" 285 | babel-runtime "^6.22.0" 286 | babel-template "^6.24.1" 287 | babel-traverse "^6.24.1" 288 | babel-types "^6.24.1" 289 | 290 | babel-helper-get-function-arity@^6.24.1: 291 | version "6.24.1" 292 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 293 | integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= 294 | dependencies: 295 | babel-runtime "^6.22.0" 296 | babel-types "^6.24.1" 297 | 298 | babel-helper-hoist-variables@^6.24.1: 299 | version "6.24.1" 300 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 301 | integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= 302 | dependencies: 303 | babel-runtime "^6.22.0" 304 | babel-types "^6.24.1" 305 | 306 | babel-helper-optimise-call-expression@^6.24.1: 307 | version "6.24.1" 308 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 309 | integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= 310 | dependencies: 311 | babel-runtime "^6.22.0" 312 | babel-types "^6.24.1" 313 | 314 | babel-helper-regex@^6.24.1: 315 | version "6.24.1" 316 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" 317 | integrity sha1-024i+rEAjXnYhkjjIRaGgShFbOg= 318 | dependencies: 319 | babel-runtime "^6.22.0" 320 | babel-types "^6.24.1" 321 | lodash "^4.2.0" 322 | 323 | babel-helper-remap-async-to-generator@^6.24.1: 324 | version "6.24.1" 325 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 326 | integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= 327 | dependencies: 328 | babel-helper-function-name "^6.24.1" 329 | babel-runtime "^6.22.0" 330 | babel-template "^6.24.1" 331 | babel-traverse "^6.24.1" 332 | babel-types "^6.24.1" 333 | 334 | babel-helper-replace-supers@^6.24.1: 335 | version "6.24.1" 336 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 337 | integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= 338 | dependencies: 339 | babel-helper-optimise-call-expression "^6.24.1" 340 | babel-messages "^6.23.0" 341 | babel-runtime "^6.22.0" 342 | babel-template "^6.24.1" 343 | babel-traverse "^6.24.1" 344 | babel-types "^6.24.1" 345 | 346 | babel-helpers@^6.24.1: 347 | version "6.24.1" 348 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 349 | integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= 350 | dependencies: 351 | babel-runtime "^6.22.0" 352 | babel-template "^6.24.1" 353 | 354 | babel-messages@^6.23.0: 355 | version "6.23.0" 356 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 357 | integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= 358 | dependencies: 359 | babel-runtime "^6.22.0" 360 | 361 | babel-plugin-check-es2015-constants@^6.22.0: 362 | version "6.22.0" 363 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 364 | integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= 365 | dependencies: 366 | babel-runtime "^6.22.0" 367 | 368 | babel-plugin-module-resolver@^2.7.0: 369 | version "2.7.0" 370 | resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-2.7.0.tgz#9c1cb2fcf2a1bdb45e91c6c985b96311123797f9" 371 | integrity sha1-nByy/PKhvbRekcbJhbljERI3l/k= 372 | dependencies: 373 | find-babel-config "^1.0.1" 374 | glob "^7.1.1" 375 | resolve "^1.2.0" 376 | 377 | babel-plugin-syntax-async-functions@^6.8.0: 378 | version "6.13.0" 379 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 380 | integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= 381 | 382 | babel-plugin-syntax-async-generators@^6.5.0: 383 | version "6.13.0" 384 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" 385 | integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= 386 | 387 | babel-plugin-syntax-class-constructor-call@^6.18.0: 388 | version "6.18.0" 389 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" 390 | integrity sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY= 391 | 392 | babel-plugin-syntax-class-properties@^6.8.0: 393 | version "6.13.0" 394 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" 395 | integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= 396 | 397 | babel-plugin-syntax-decorators@^6.13.0: 398 | version "6.13.0" 399 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" 400 | integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= 401 | 402 | babel-plugin-syntax-do-expressions@^6.8.0: 403 | version "6.13.0" 404 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" 405 | integrity sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0= 406 | 407 | babel-plugin-syntax-dynamic-import@^6.18.0: 408 | version "6.18.0" 409 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" 410 | integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= 411 | 412 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 413 | version "6.13.0" 414 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 415 | integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= 416 | 417 | babel-plugin-syntax-export-extensions@^6.8.0: 418 | version "6.13.0" 419 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" 420 | integrity sha1-cKFITw+QiaToStRLrDU8lbmxJyE= 421 | 422 | babel-plugin-syntax-function-bind@^6.8.0: 423 | version "6.13.0" 424 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" 425 | integrity sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y= 426 | 427 | babel-plugin-syntax-object-rest-spread@^6.8.0: 428 | version "6.13.0" 429 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" 430 | integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= 431 | 432 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 433 | version "6.22.0" 434 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 435 | integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= 436 | 437 | babel-plugin-transform-async-generator-functions@^6.24.1: 438 | version "6.24.1" 439 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" 440 | integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= 441 | dependencies: 442 | babel-helper-remap-async-to-generator "^6.24.1" 443 | babel-plugin-syntax-async-generators "^6.5.0" 444 | babel-runtime "^6.22.0" 445 | 446 | babel-plugin-transform-async-to-generator@^6.24.1: 447 | version "6.24.1" 448 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 449 | integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= 450 | dependencies: 451 | babel-helper-remap-async-to-generator "^6.24.1" 452 | babel-plugin-syntax-async-functions "^6.8.0" 453 | babel-runtime "^6.22.0" 454 | 455 | babel-plugin-transform-class-constructor-call@^6.24.1: 456 | version "6.24.1" 457 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" 458 | integrity sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk= 459 | dependencies: 460 | babel-plugin-syntax-class-constructor-call "^6.18.0" 461 | babel-runtime "^6.22.0" 462 | babel-template "^6.24.1" 463 | 464 | babel-plugin-transform-class-properties@^6.24.1: 465 | version "6.24.1" 466 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" 467 | integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= 468 | dependencies: 469 | babel-helper-function-name "^6.24.1" 470 | babel-plugin-syntax-class-properties "^6.8.0" 471 | babel-runtime "^6.22.0" 472 | babel-template "^6.24.1" 473 | 474 | babel-plugin-transform-decorators@^6.24.1: 475 | version "6.24.1" 476 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" 477 | integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= 478 | dependencies: 479 | babel-helper-explode-class "^6.24.1" 480 | babel-plugin-syntax-decorators "^6.13.0" 481 | babel-runtime "^6.22.0" 482 | babel-template "^6.24.1" 483 | babel-types "^6.24.1" 484 | 485 | babel-plugin-transform-do-expressions@^6.22.0: 486 | version "6.22.0" 487 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" 488 | integrity sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs= 489 | dependencies: 490 | babel-plugin-syntax-do-expressions "^6.8.0" 491 | babel-runtime "^6.22.0" 492 | 493 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 494 | version "6.22.0" 495 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 496 | integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= 497 | dependencies: 498 | babel-runtime "^6.22.0" 499 | 500 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 501 | version "6.22.0" 502 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 503 | integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= 504 | dependencies: 505 | babel-runtime "^6.22.0" 506 | 507 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 508 | version "6.24.1" 509 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" 510 | integrity sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY= 511 | dependencies: 512 | babel-runtime "^6.22.0" 513 | babel-template "^6.24.1" 514 | babel-traverse "^6.24.1" 515 | babel-types "^6.24.1" 516 | lodash "^4.2.0" 517 | 518 | babel-plugin-transform-es2015-classes@^6.24.1: 519 | version "6.24.1" 520 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 521 | integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= 522 | dependencies: 523 | babel-helper-define-map "^6.24.1" 524 | babel-helper-function-name "^6.24.1" 525 | babel-helper-optimise-call-expression "^6.24.1" 526 | babel-helper-replace-supers "^6.24.1" 527 | babel-messages "^6.23.0" 528 | babel-runtime "^6.22.0" 529 | babel-template "^6.24.1" 530 | babel-traverse "^6.24.1" 531 | babel-types "^6.24.1" 532 | 533 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 534 | version "6.24.1" 535 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 536 | integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= 537 | dependencies: 538 | babel-runtime "^6.22.0" 539 | babel-template "^6.24.1" 540 | 541 | babel-plugin-transform-es2015-destructuring@^6.22.0: 542 | version "6.23.0" 543 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 544 | integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= 545 | dependencies: 546 | babel-runtime "^6.22.0" 547 | 548 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 549 | version "6.24.1" 550 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 551 | integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= 552 | dependencies: 553 | babel-runtime "^6.22.0" 554 | babel-types "^6.24.1" 555 | 556 | babel-plugin-transform-es2015-for-of@^6.22.0: 557 | version "6.23.0" 558 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 559 | integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= 560 | dependencies: 561 | babel-runtime "^6.22.0" 562 | 563 | babel-plugin-transform-es2015-function-name@^6.24.1: 564 | version "6.24.1" 565 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 566 | integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= 567 | dependencies: 568 | babel-helper-function-name "^6.24.1" 569 | babel-runtime "^6.22.0" 570 | babel-types "^6.24.1" 571 | 572 | babel-plugin-transform-es2015-literals@^6.22.0: 573 | version "6.22.0" 574 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 575 | integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= 576 | dependencies: 577 | babel-runtime "^6.22.0" 578 | 579 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 580 | version "6.24.1" 581 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 582 | integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= 583 | dependencies: 584 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 585 | babel-runtime "^6.22.0" 586 | babel-template "^6.24.1" 587 | 588 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 589 | version "6.24.1" 590 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" 591 | integrity sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4= 592 | dependencies: 593 | babel-plugin-transform-strict-mode "^6.24.1" 594 | babel-runtime "^6.22.0" 595 | babel-template "^6.24.1" 596 | babel-types "^6.24.1" 597 | 598 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 599 | version "6.24.1" 600 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 601 | integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= 602 | dependencies: 603 | babel-helper-hoist-variables "^6.24.1" 604 | babel-runtime "^6.22.0" 605 | babel-template "^6.24.1" 606 | 607 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 608 | version "6.24.1" 609 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 610 | integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= 611 | dependencies: 612 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 613 | babel-runtime "^6.22.0" 614 | babel-template "^6.24.1" 615 | 616 | babel-plugin-transform-es2015-object-super@^6.24.1: 617 | version "6.24.1" 618 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 619 | integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= 620 | dependencies: 621 | babel-helper-replace-supers "^6.24.1" 622 | babel-runtime "^6.22.0" 623 | 624 | babel-plugin-transform-es2015-parameters@^6.24.1: 625 | version "6.24.1" 626 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 627 | integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= 628 | dependencies: 629 | babel-helper-call-delegate "^6.24.1" 630 | babel-helper-get-function-arity "^6.24.1" 631 | babel-runtime "^6.22.0" 632 | babel-template "^6.24.1" 633 | babel-traverse "^6.24.1" 634 | babel-types "^6.24.1" 635 | 636 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 637 | version "6.24.1" 638 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 639 | integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= 640 | dependencies: 641 | babel-runtime "^6.22.0" 642 | babel-types "^6.24.1" 643 | 644 | babel-plugin-transform-es2015-spread@^6.22.0: 645 | version "6.22.0" 646 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 647 | integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= 648 | dependencies: 649 | babel-runtime "^6.22.0" 650 | 651 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 652 | version "6.24.1" 653 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 654 | integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= 655 | dependencies: 656 | babel-helper-regex "^6.24.1" 657 | babel-runtime "^6.22.0" 658 | babel-types "^6.24.1" 659 | 660 | babel-plugin-transform-es2015-template-literals@^6.22.0: 661 | version "6.22.0" 662 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 663 | integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= 664 | dependencies: 665 | babel-runtime "^6.22.0" 666 | 667 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 668 | version "6.23.0" 669 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 670 | integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= 671 | dependencies: 672 | babel-runtime "^6.22.0" 673 | 674 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 675 | version "6.24.1" 676 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 677 | integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= 678 | dependencies: 679 | babel-helper-regex "^6.24.1" 680 | babel-runtime "^6.22.0" 681 | regexpu-core "^2.0.0" 682 | 683 | babel-plugin-transform-exponentiation-operator@^6.24.1: 684 | version "6.24.1" 685 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 686 | integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= 687 | dependencies: 688 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 689 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 690 | babel-runtime "^6.22.0" 691 | 692 | babel-plugin-transform-export-extensions@^6.22.0: 693 | version "6.22.0" 694 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" 695 | integrity sha1-U3OLR+deghhYnuqUbLvTkQm75lM= 696 | dependencies: 697 | babel-plugin-syntax-export-extensions "^6.8.0" 698 | babel-runtime "^6.22.0" 699 | 700 | babel-plugin-transform-function-bind@^6.22.0: 701 | version "6.22.0" 702 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" 703 | integrity sha1-xvuOlqwpajELjPjqQBRiQH3fapc= 704 | dependencies: 705 | babel-plugin-syntax-function-bind "^6.8.0" 706 | babel-runtime "^6.22.0" 707 | 708 | babel-plugin-transform-object-rest-spread@^6.22.0: 709 | version "6.23.0" 710 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" 711 | integrity sha1-h11ryb52HFiirj/u5dxIldjH+SE= 712 | dependencies: 713 | babel-plugin-syntax-object-rest-spread "^6.8.0" 714 | babel-runtime "^6.22.0" 715 | 716 | babel-plugin-transform-regenerator@^6.24.1: 717 | version "6.24.1" 718 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" 719 | integrity sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg= 720 | dependencies: 721 | regenerator-transform "0.9.11" 722 | 723 | babel-plugin-transform-strict-mode@^6.24.1: 724 | version "6.24.1" 725 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 726 | integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= 727 | dependencies: 728 | babel-runtime "^6.22.0" 729 | babel-types "^6.24.1" 730 | 731 | babel-polyfill@^6.23.0: 732 | version "6.23.0" 733 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" 734 | integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0= 735 | dependencies: 736 | babel-runtime "^6.22.0" 737 | core-js "^2.4.0" 738 | regenerator-runtime "^0.10.0" 739 | 740 | babel-preset-es2015@^6.24.1: 741 | version "6.24.1" 742 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 743 | integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= 744 | dependencies: 745 | babel-plugin-check-es2015-constants "^6.22.0" 746 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 747 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 748 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 749 | babel-plugin-transform-es2015-classes "^6.24.1" 750 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 751 | babel-plugin-transform-es2015-destructuring "^6.22.0" 752 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 753 | babel-plugin-transform-es2015-for-of "^6.22.0" 754 | babel-plugin-transform-es2015-function-name "^6.24.1" 755 | babel-plugin-transform-es2015-literals "^6.22.0" 756 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 757 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 758 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 759 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 760 | babel-plugin-transform-es2015-object-super "^6.24.1" 761 | babel-plugin-transform-es2015-parameters "^6.24.1" 762 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 763 | babel-plugin-transform-es2015-spread "^6.22.0" 764 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 765 | babel-plugin-transform-es2015-template-literals "^6.22.0" 766 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 767 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 768 | babel-plugin-transform-regenerator "^6.24.1" 769 | 770 | babel-preset-stage-0@^6.24.1: 771 | version "6.24.1" 772 | resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" 773 | integrity sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo= 774 | dependencies: 775 | babel-plugin-transform-do-expressions "^6.22.0" 776 | babel-plugin-transform-function-bind "^6.22.0" 777 | babel-preset-stage-1 "^6.24.1" 778 | 779 | babel-preset-stage-1@^6.24.1: 780 | version "6.24.1" 781 | resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" 782 | integrity sha1-dpLNfc1oSZB+auSgqFWJz7niv7A= 783 | dependencies: 784 | babel-plugin-transform-class-constructor-call "^6.24.1" 785 | babel-plugin-transform-export-extensions "^6.22.0" 786 | babel-preset-stage-2 "^6.24.1" 787 | 788 | babel-preset-stage-2@^6.24.1: 789 | version "6.24.1" 790 | resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" 791 | integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= 792 | dependencies: 793 | babel-plugin-syntax-dynamic-import "^6.18.0" 794 | babel-plugin-transform-class-properties "^6.24.1" 795 | babel-plugin-transform-decorators "^6.24.1" 796 | babel-preset-stage-3 "^6.24.1" 797 | 798 | babel-preset-stage-3@^6.24.1: 799 | version "6.24.1" 800 | resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" 801 | integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= 802 | dependencies: 803 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 804 | babel-plugin-transform-async-generator-functions "^6.24.1" 805 | babel-plugin-transform-async-to-generator "^6.24.1" 806 | babel-plugin-transform-exponentiation-operator "^6.24.1" 807 | babel-plugin-transform-object-rest-spread "^6.22.0" 808 | 809 | babel-register@^6.24.1: 810 | version "6.24.1" 811 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" 812 | integrity sha1-fhDhOi9xBlvfrVoXh7pFvKbe118= 813 | dependencies: 814 | babel-core "^6.24.1" 815 | babel-runtime "^6.22.0" 816 | core-js "^2.4.0" 817 | home-or-tmp "^2.0.0" 818 | lodash "^4.2.0" 819 | mkdirp "^0.5.1" 820 | source-map-support "^0.4.2" 821 | 822 | babel-runtime@^6.18.0, babel-runtime@^6.22.0: 823 | version "6.23.0" 824 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 825 | integrity sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs= 826 | dependencies: 827 | core-js "^2.4.0" 828 | regenerator-runtime "^0.10.0" 829 | 830 | babel-template@^6.24.1: 831 | version "6.24.1" 832 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 833 | integrity sha1-BK5RTx+Ts6JTfyoPYKWkX7gwgzM= 834 | dependencies: 835 | babel-runtime "^6.22.0" 836 | babel-traverse "^6.24.1" 837 | babel-types "^6.24.1" 838 | babylon "^6.11.0" 839 | lodash "^4.2.0" 840 | 841 | babel-traverse@^6.24.1: 842 | version "6.24.1" 843 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 844 | integrity sha1-qzZnP9NW+aCUhlnnszjV/q2zFpU= 845 | dependencies: 846 | babel-code-frame "^6.22.0" 847 | babel-messages "^6.23.0" 848 | babel-runtime "^6.22.0" 849 | babel-types "^6.24.1" 850 | babylon "^6.15.0" 851 | debug "^2.2.0" 852 | globals "^9.0.0" 853 | invariant "^2.2.0" 854 | lodash "^4.2.0" 855 | 856 | babel-types@^6.19.0, babel-types@^6.24.1: 857 | version "6.24.1" 858 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 859 | integrity sha1-oTaHncFbNga9oNkMH8dDBML/CXU= 860 | dependencies: 861 | babel-runtime "^6.22.0" 862 | esutils "^2.0.2" 863 | lodash "^4.2.0" 864 | to-fast-properties "^1.0.1" 865 | 866 | babylon@^6.11.0, babylon@^6.15.0: 867 | version "6.17.0" 868 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" 869 | integrity sha1-N9qUiHhIi5xOPEA4iT+jMUs/yTI= 870 | 871 | balanced-match@^0.4.1: 872 | version "0.4.2" 873 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 874 | integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= 875 | 876 | bcrypt-pbkdf@^1.0.0: 877 | version "1.0.1" 878 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 879 | integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= 880 | dependencies: 881 | tweetnacl "^0.14.3" 882 | 883 | binary-extensions@^1.0.0: 884 | version "1.8.0" 885 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 886 | integrity sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q= 887 | 888 | block-stream@*: 889 | version "0.0.9" 890 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 891 | integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= 892 | dependencies: 893 | inherits "~2.0.0" 894 | 895 | bluebird@~3.4.6: 896 | version "3.4.7" 897 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" 898 | integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= 899 | 900 | boom@2.x.x: 901 | version "2.10.1" 902 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 903 | integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= 904 | dependencies: 905 | hoek "2.x.x" 906 | 907 | brace-expansion@^1.0.0: 908 | version "1.1.7" 909 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 910 | integrity sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k= 911 | dependencies: 912 | balanced-match "^0.4.1" 913 | concat-map "0.0.1" 914 | 915 | braces@^1.8.2: 916 | version "1.8.5" 917 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 918 | integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= 919 | dependencies: 920 | expand-range "^1.8.1" 921 | preserve "^0.2.0" 922 | repeat-element "^1.1.2" 923 | 924 | buffer-shims@~1.0.0: 925 | version "1.0.0" 926 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 927 | integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= 928 | 929 | cache-point@^0.4.0, cache-point@~0.4.0: 930 | version "0.4.0" 931 | resolved "https://registry.yarnpkg.com/cache-point/-/cache-point-0.4.0.tgz#2797f68055970757c87e89b464978e74e11047b0" 932 | integrity sha1-J5f2gFWXB1fIfom0ZJeOdOEQR7A= 933 | dependencies: 934 | array-back "^1.0.4" 935 | fs-then-native "^2.0.0" 936 | mkdirp "~0.5.1" 937 | 938 | caseless@~0.12.0: 939 | version "0.12.0" 940 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 941 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 942 | 943 | catharsis@~0.8.8: 944 | version "0.8.8" 945 | resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.8.tgz#693479f43aac549d806bd73e924cd0d944951a06" 946 | integrity sha1-aTR59DqsVJ2Aa9c+kkzQ2USVGgY= 947 | dependencies: 948 | underscore-contrib "~0.3.0" 949 | 950 | chalk@^1.1.0: 951 | version "1.1.3" 952 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 953 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 954 | dependencies: 955 | ansi-styles "^2.2.1" 956 | escape-string-regexp "^1.0.2" 957 | has-ansi "^2.0.0" 958 | strip-ansi "^3.0.0" 959 | supports-color "^2.0.0" 960 | 961 | chokidar@^1.6.1: 962 | version "1.6.1" 963 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" 964 | integrity sha1-L0RHq16W5Q+z14n9kNTHLg5McMI= 965 | dependencies: 966 | anymatch "^1.3.0" 967 | async-each "^1.0.0" 968 | glob-parent "^2.0.0" 969 | inherits "^2.0.1" 970 | is-binary-path "^1.0.0" 971 | is-glob "^2.0.0" 972 | path-is-absolute "^1.0.0" 973 | readdirp "^2.0.0" 974 | optionalDependencies: 975 | fsevents "^1.0.0" 976 | 977 | co@^4.6.0: 978 | version "4.6.0" 979 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 980 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 981 | 982 | code-point-at@^1.0.0: 983 | version "1.1.0" 984 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 985 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 986 | 987 | collect-all@^1.0.2: 988 | version "1.0.2" 989 | resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-1.0.2.tgz#39450f1e7aa6086570a006bce93ccf1218a77ea1" 990 | integrity sha1-OUUPHnqmCGVwoAa86TzPEhinfqE= 991 | dependencies: 992 | stream-connect "^1.0.2" 993 | stream-via "^1.0.3" 994 | 995 | combined-stream@^1.0.5, combined-stream@~1.0.5: 996 | version "1.0.5" 997 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 998 | integrity sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk= 999 | dependencies: 1000 | delayed-stream "~1.0.0" 1001 | 1002 | command-line-args@^4.0.1: 1003 | version "4.0.3" 1004 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.3.tgz#aefb061f107f0fd8d72b3c5e0ba042b319891bae" 1005 | integrity sha1-rvsGHxB/D9jXKzxeC6BCsxmJG64= 1006 | dependencies: 1007 | array-back "^1.0.4" 1008 | find-replace "^1.0.3" 1009 | typical "^2.6.0" 1010 | 1011 | command-line-tool@^0.7.0: 1012 | version "0.7.0" 1013 | resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.7.0.tgz#ca80792ae2069cf7caa562c0cbc2cd11811122a0" 1014 | integrity sha1-yoB5KuIGnPfKpWLAy8LNEYERIqA= 1015 | dependencies: 1016 | ansi-escape-sequences "^3.0.0" 1017 | array-back "^1.0.4" 1018 | command-line-args "^4.0.1" 1019 | command-line-usage "^4.0.0" 1020 | typical "^2.6.0" 1021 | 1022 | command-line-usage@^4.0.0: 1023 | version "4.0.0" 1024 | resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-4.0.0.tgz#816b32788b58f9feba44d1e6dac60fcaeb29b5ea" 1025 | integrity sha1-gWsyeItY+f66RNHm2sYPyuspteo= 1026 | dependencies: 1027 | ansi-escape-sequences "^3.0.0" 1028 | array-back "^1.0.4" 1029 | table-layout "^0.4.0" 1030 | typical "^2.6.0" 1031 | 1032 | commander@^2.8.1: 1033 | version "2.9.0" 1034 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 1035 | integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= 1036 | dependencies: 1037 | graceful-readlink ">= 1.0.0" 1038 | 1039 | common-sequence@^1.0.2: 1040 | version "1.0.2" 1041 | resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-1.0.2.tgz#30e07f3f8f6f7f9b3dee854f20b2d39eee086de8" 1042 | integrity sha1-MOB/P49vf5s97oVPILLTnu4Ibeg= 1043 | 1044 | concat-map@0.0.1: 1045 | version "0.0.1" 1046 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1047 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1048 | 1049 | config-master@^3.0.0: 1050 | version "3.1.0" 1051 | resolved "https://registry.yarnpkg.com/config-master/-/config-master-3.1.0.tgz#667663590505a283bf26a484d68489d74c5485da" 1052 | integrity sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo= 1053 | dependencies: 1054 | walk-back "^2.0.1" 1055 | 1056 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 1057 | version "1.1.0" 1058 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 1059 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 1060 | 1061 | convert-source-map@^1.1.0: 1062 | version "1.5.0" 1063 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 1064 | integrity sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU= 1065 | 1066 | core-js@^2.4.0: 1067 | version "2.4.1" 1068 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 1069 | integrity sha1-TekR5mew6ukSTjQlS1OupvxhjT4= 1070 | 1071 | core-util-is@~1.0.0: 1072 | version "1.0.2" 1073 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1074 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 1075 | 1076 | cryptiles@2.x.x: 1077 | version "2.0.5" 1078 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 1079 | integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= 1080 | dependencies: 1081 | boom "2.x.x" 1082 | 1083 | dashdash@^1.12.0: 1084 | version "1.14.1" 1085 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 1086 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 1087 | dependencies: 1088 | assert-plus "^1.0.0" 1089 | 1090 | debug@^2.1.1, debug@^2.2.0: 1091 | version "2.6.4" 1092 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" 1093 | integrity sha1-dYaps8OXQcAoKuM0RcTorHRzT+A= 1094 | dependencies: 1095 | ms "0.7.3" 1096 | 1097 | deep-extend@~0.4.0, deep-extend@~0.4.1: 1098 | version "0.4.1" 1099 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 1100 | integrity sha1-7+QRPQgIX05vlod1mBD4B0aeIlM= 1101 | 1102 | defer-promise@^1.0.0: 1103 | version "1.0.1" 1104 | resolved "https://registry.yarnpkg.com/defer-promise/-/defer-promise-1.0.1.tgz#1ca6ffeddbcef1715dd7aae25c7616f9ae22932f" 1105 | integrity sha1-HKb/7dvO8XFd16riXHYW+a4iky8= 1106 | 1107 | delayed-stream@~1.0.0: 1108 | version "1.0.0" 1109 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1110 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 1111 | 1112 | delegates@^1.0.0: 1113 | version "1.0.0" 1114 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1115 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 1116 | 1117 | detect-indent@^4.0.0: 1118 | version "4.0.0" 1119 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 1120 | integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= 1121 | dependencies: 1122 | repeating "^2.0.0" 1123 | 1124 | dmd@^3.0.0: 1125 | version "3.0.4" 1126 | resolved "https://registry.yarnpkg.com/dmd/-/dmd-3.0.4.tgz#8a641518a7e2641f95777e046b5c4f085a9ec9b5" 1127 | integrity sha1-imQVGKfiZB+Vd34Ea1xPCFqeybU= 1128 | dependencies: 1129 | array-back "^1.0.4" 1130 | cache-point "^0.4.0" 1131 | common-sequence "^1.0.2" 1132 | file-set "^1.1.1" 1133 | handlebars "3.0.3" 1134 | marked "^0.3.6" 1135 | object-get "^2.1.0" 1136 | reduce-flatten "^1.0.1" 1137 | reduce-unique "^1.0.0" 1138 | reduce-without "^1.0.1" 1139 | test-value "^2.1.0" 1140 | walk-back "^3.0.0" 1141 | 1142 | ecc-jsbn@~0.1.1: 1143 | version "0.1.1" 1144 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 1145 | integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= 1146 | dependencies: 1147 | jsbn "~0.1.0" 1148 | 1149 | escape-string-regexp@^1.0.2, escape-string-regexp@~1.0.5: 1150 | version "1.0.5" 1151 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1152 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1153 | 1154 | espree@~3.1.7: 1155 | version "3.1.7" 1156 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.7.tgz#fd5deec76a97a5120a9cd3a7cb1177a0923b11d2" 1157 | integrity sha1-/V3ux2qXpRIKnNOnyxF3oJI7EdI= 1158 | dependencies: 1159 | acorn "^3.3.0" 1160 | acorn-jsx "^3.0.0" 1161 | 1162 | esutils@^2.0.2: 1163 | version "2.0.2" 1164 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1165 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 1166 | 1167 | expand-brackets@^0.1.4: 1168 | version "0.1.5" 1169 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 1170 | integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= 1171 | dependencies: 1172 | is-posix-bracket "^0.1.0" 1173 | 1174 | expand-range@^1.8.1: 1175 | version "1.8.2" 1176 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 1177 | integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= 1178 | dependencies: 1179 | fill-range "^2.1.0" 1180 | 1181 | extend@~3.0.0: 1182 | version "3.0.0" 1183 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 1184 | integrity sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ= 1185 | 1186 | extglob@^0.3.1: 1187 | version "0.3.2" 1188 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 1189 | integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= 1190 | dependencies: 1191 | is-extglob "^1.0.0" 1192 | 1193 | extsprintf@1.0.2: 1194 | version "1.0.2" 1195 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 1196 | integrity sha1-4QgOBljjALBilJkMxw4VAiNf1VA= 1197 | 1198 | feature-detect-es6@^1.3.1: 1199 | version "1.3.1" 1200 | resolved "https://registry.yarnpkg.com/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz#f888736af9cb0c91f55663bfa4762eb96ee7047f" 1201 | integrity sha1-+IhzavnLDJH1VmO/pHYuuW7nBH8= 1202 | dependencies: 1203 | array-back "^1.0.3" 1204 | 1205 | file-set@^1.1.1: 1206 | version "1.1.1" 1207 | resolved "https://registry.yarnpkg.com/file-set/-/file-set-1.1.1.tgz#d3ec70c080ec8f18f204ba1de106780c9056926b" 1208 | integrity sha1-0+xwwIDsjxjyBLod4QZ4DJBWkms= 1209 | dependencies: 1210 | array-back "^1.0.3" 1211 | glob "^7.1.0" 1212 | 1213 | filename-regex@^2.0.0: 1214 | version "2.0.0" 1215 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" 1216 | integrity sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U= 1217 | 1218 | fill-range@^2.1.0: 1219 | version "2.2.3" 1220 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 1221 | integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM= 1222 | dependencies: 1223 | is-number "^2.1.0" 1224 | isobject "^2.0.0" 1225 | randomatic "^1.1.3" 1226 | repeat-element "^1.1.2" 1227 | repeat-string "^1.5.2" 1228 | 1229 | find-babel-config@^1.0.1: 1230 | version "1.0.1" 1231 | resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.0.1.tgz#179fa7b36bf3e94b487410855df448b6f853b9ec" 1232 | integrity sha1-F5+ns2vz6UtIdBCFXfRItvhTuew= 1233 | dependencies: 1234 | json5 "^0.5.0" 1235 | path-exists "^3.0.0" 1236 | 1237 | find-replace@^1.0.3: 1238 | version "1.0.3" 1239 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" 1240 | integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= 1241 | dependencies: 1242 | array-back "^1.0.4" 1243 | test-value "^2.1.0" 1244 | 1245 | for-in@^1.0.1: 1246 | version "1.0.2" 1247 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1248 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 1249 | 1250 | for-own@^0.1.4: 1251 | version "0.1.5" 1252 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1253 | integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= 1254 | dependencies: 1255 | for-in "^1.0.1" 1256 | 1257 | forever-agent@~0.6.1: 1258 | version "0.6.1" 1259 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1260 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 1261 | 1262 | form-data@~2.1.1: 1263 | version "2.1.4" 1264 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 1265 | integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= 1266 | dependencies: 1267 | asynckit "^0.4.0" 1268 | combined-stream "^1.0.5" 1269 | mime-types "^2.1.12" 1270 | 1271 | fs-readdir-recursive@^1.0.0: 1272 | version "1.0.0" 1273 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" 1274 | integrity sha1-jNF0XItPiinIyuw5JHaSG6GV9WA= 1275 | 1276 | fs-then-native@^2.0.0: 1277 | version "2.0.0" 1278 | resolved "https://registry.yarnpkg.com/fs-then-native/-/fs-then-native-2.0.0.tgz#19a124d94d90c22c8e045f2e8dd6ebea36d48c67" 1279 | integrity sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc= 1280 | 1281 | fs.realpath@^1.0.0: 1282 | version "1.0.0" 1283 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1284 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1285 | 1286 | fsevents@^1.0.0: 1287 | version "1.1.1" 1288 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" 1289 | integrity sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8= 1290 | dependencies: 1291 | nan "^2.3.0" 1292 | node-pre-gyp "^0.6.29" 1293 | 1294 | fstream-ignore@^1.0.5: 1295 | version "1.0.5" 1296 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1297 | integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= 1298 | dependencies: 1299 | fstream "^1.0.0" 1300 | inherits "2" 1301 | minimatch "^3.0.0" 1302 | 1303 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 1304 | version "1.0.11" 1305 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 1306 | integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= 1307 | dependencies: 1308 | graceful-fs "^4.1.2" 1309 | inherits "~2.0.0" 1310 | mkdirp ">=0.5 0" 1311 | rimraf "2" 1312 | 1313 | gauge@~2.7.1: 1314 | version "2.7.4" 1315 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1316 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 1317 | dependencies: 1318 | aproba "^1.0.3" 1319 | console-control-strings "^1.0.0" 1320 | has-unicode "^2.0.0" 1321 | object-assign "^4.1.0" 1322 | signal-exit "^3.0.0" 1323 | string-width "^1.0.1" 1324 | strip-ansi "^3.0.1" 1325 | wide-align "^1.1.0" 1326 | 1327 | getpass@^0.1.1: 1328 | version "0.1.7" 1329 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1330 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 1331 | dependencies: 1332 | assert-plus "^1.0.0" 1333 | 1334 | glob-base@^0.3.0: 1335 | version "0.3.0" 1336 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1337 | integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= 1338 | dependencies: 1339 | glob-parent "^2.0.0" 1340 | is-glob "^2.0.0" 1341 | 1342 | glob-parent@^2.0.0: 1343 | version "2.0.0" 1344 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1345 | integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= 1346 | dependencies: 1347 | is-glob "^2.0.0" 1348 | 1349 | glob@^7.0.0, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1: 1350 | version "7.1.1" 1351 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 1352 | integrity sha1-gFIR3wT6rxxjo2ADBs31reULLsg= 1353 | dependencies: 1354 | fs.realpath "^1.0.0" 1355 | inflight "^1.0.4" 1356 | inherits "2" 1357 | minimatch "^3.0.2" 1358 | once "^1.3.0" 1359 | path-is-absolute "^1.0.0" 1360 | 1361 | globals@^9.0.0: 1362 | version "9.17.0" 1363 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 1364 | integrity sha1-DAymltm5u2lNLlRwvTd3fKrVAoY= 1365 | 1366 | graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.9: 1367 | version "4.1.11" 1368 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1369 | integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= 1370 | 1371 | "graceful-readlink@>= 1.0.0": 1372 | version "1.0.1" 1373 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1374 | integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= 1375 | 1376 | handlebars@3.0.3: 1377 | version "3.0.3" 1378 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-3.0.3.tgz#0e09651a2f0fb3c949160583710d551f92e6d2ad" 1379 | integrity sha1-DgllGi8Ps8lJFgWDcQ1VH5Lm0q0= 1380 | dependencies: 1381 | optimist "^0.6.1" 1382 | source-map "^0.1.40" 1383 | optionalDependencies: 1384 | uglify-js "~2.3" 1385 | 1386 | har-schema@^1.0.5: 1387 | version "1.0.5" 1388 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 1389 | integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= 1390 | 1391 | har-validator@~4.2.1: 1392 | version "4.2.1" 1393 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 1394 | integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= 1395 | dependencies: 1396 | ajv "^4.9.1" 1397 | har-schema "^1.0.5" 1398 | 1399 | has-ansi@^2.0.0: 1400 | version "2.0.0" 1401 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1402 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 1403 | dependencies: 1404 | ansi-regex "^2.0.0" 1405 | 1406 | has-unicode@^2.0.0: 1407 | version "2.0.1" 1408 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1409 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1410 | 1411 | hawk@~3.1.3: 1412 | version "3.1.3" 1413 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1414 | integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= 1415 | dependencies: 1416 | boom "2.x.x" 1417 | cryptiles "2.x.x" 1418 | hoek "2.x.x" 1419 | sntp "1.x.x" 1420 | 1421 | hoek@2.x.x: 1422 | version "2.16.3" 1423 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1424 | integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= 1425 | 1426 | home-or-tmp@^2.0.0: 1427 | version "2.0.0" 1428 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1429 | integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= 1430 | dependencies: 1431 | os-homedir "^1.0.0" 1432 | os-tmpdir "^1.0.1" 1433 | 1434 | home-path@^1.0.3: 1435 | version "1.0.5" 1436 | resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" 1437 | integrity sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8= 1438 | 1439 | http-signature@~1.1.0: 1440 | version "1.1.1" 1441 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1442 | integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= 1443 | dependencies: 1444 | assert-plus "^0.2.0" 1445 | jsprim "^1.2.2" 1446 | sshpk "^1.7.0" 1447 | 1448 | inflight@^1.0.4: 1449 | version "1.0.6" 1450 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1451 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1452 | dependencies: 1453 | once "^1.3.0" 1454 | wrappy "1" 1455 | 1456 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 1457 | version "2.0.3" 1458 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1459 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1460 | 1461 | ini@~1.3.0: 1462 | version "1.3.4" 1463 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1464 | integrity sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4= 1465 | 1466 | invariant@^2.2.0: 1467 | version "2.2.2" 1468 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1469 | integrity sha1-nh9WrArNtr8wMwbzOL47IErmA2A= 1470 | dependencies: 1471 | loose-envify "^1.0.0" 1472 | 1473 | is-binary-path@^1.0.0: 1474 | version "1.0.1" 1475 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1476 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= 1477 | dependencies: 1478 | binary-extensions "^1.0.0" 1479 | 1480 | is-buffer@^1.1.5: 1481 | version "1.1.5" 1482 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1483 | integrity sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw= 1484 | 1485 | is-dotfile@^1.0.0: 1486 | version "1.0.2" 1487 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 1488 | integrity sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0= 1489 | 1490 | is-equal-shallow@^0.1.3: 1491 | version "0.1.3" 1492 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1493 | integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= 1494 | dependencies: 1495 | is-primitive "^2.0.0" 1496 | 1497 | is-extendable@^0.1.1: 1498 | version "0.1.1" 1499 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1500 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1501 | 1502 | is-extglob@^1.0.0: 1503 | version "1.0.0" 1504 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1505 | integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= 1506 | 1507 | is-finite@^1.0.0: 1508 | version "1.0.2" 1509 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1510 | integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 1511 | dependencies: 1512 | number-is-nan "^1.0.0" 1513 | 1514 | is-fullwidth-code-point@^1.0.0: 1515 | version "1.0.0" 1516 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1517 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1518 | dependencies: 1519 | number-is-nan "^1.0.0" 1520 | 1521 | is-glob@^2.0.0, is-glob@^2.0.1: 1522 | version "2.0.1" 1523 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1524 | integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= 1525 | dependencies: 1526 | is-extglob "^1.0.0" 1527 | 1528 | is-number@^2.0.2, is-number@^2.1.0: 1529 | version "2.1.0" 1530 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1531 | integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= 1532 | dependencies: 1533 | kind-of "^3.0.2" 1534 | 1535 | is-posix-bracket@^0.1.0: 1536 | version "0.1.1" 1537 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1538 | integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= 1539 | 1540 | is-primitive@^2.0.0: 1541 | version "2.0.0" 1542 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1543 | integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= 1544 | 1545 | is-typedarray@~1.0.0: 1546 | version "1.0.0" 1547 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1548 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1549 | 1550 | isarray@1.0.0, isarray@~1.0.0: 1551 | version "1.0.0" 1552 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1553 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1554 | 1555 | isobject@^2.0.0: 1556 | version "2.1.0" 1557 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1558 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1559 | dependencies: 1560 | isarray "1.0.0" 1561 | 1562 | isstream@~0.1.2: 1563 | version "0.1.2" 1564 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1565 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1566 | 1567 | jodid25519@^1.0.0: 1568 | version "1.0.2" 1569 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1570 | integrity sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc= 1571 | dependencies: 1572 | jsbn "~0.1.0" 1573 | 1574 | js-tokens@^3.0.0: 1575 | version "3.0.1" 1576 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 1577 | integrity sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc= 1578 | 1579 | js2xmlparser@~1.0.0: 1580 | version "1.0.0" 1581 | resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-1.0.0.tgz#5a170f2e8d6476ce45405e04823242513782fe30" 1582 | integrity sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA= 1583 | 1584 | jsbn@~0.1.0: 1585 | version "0.1.1" 1586 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1587 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1588 | 1589 | jsdoc-75lb@^3.6.0: 1590 | version "3.6.0" 1591 | resolved "https://registry.yarnpkg.com/jsdoc-75lb/-/jsdoc-75lb-3.6.0.tgz#a807119528b4009ccbcab49b7522f63fec6cd0bd" 1592 | integrity sha1-qAcRlSi0AJzLyrSbdSL2P+xs0L0= 1593 | dependencies: 1594 | bluebird "~3.4.6" 1595 | catharsis "~0.8.8" 1596 | escape-string-regexp "~1.0.5" 1597 | espree "~3.1.7" 1598 | js2xmlparser "~1.0.0" 1599 | klaw "~1.3.0" 1600 | marked "~0.3.6" 1601 | mkdirp "~0.5.1" 1602 | requizzle "~0.2.1" 1603 | strip-json-comments "~2.0.1" 1604 | taffydb "2.6.2" 1605 | underscore "~1.8.3" 1606 | 1607 | jsdoc-api@^3.0.0: 1608 | version "3.0.0" 1609 | resolved "https://registry.yarnpkg.com/jsdoc-api/-/jsdoc-api-3.0.0.tgz#0d52700235f865bd4a8bad5ebc1efb562fc8ad2a" 1610 | integrity sha1-DVJwAjX4Zb1Ki61evB77Vi/IrSo= 1611 | dependencies: 1612 | array-back "^1.0.4" 1613 | cache-point "~0.4.0" 1614 | collect-all "^1.0.2" 1615 | file-set "^1.1.1" 1616 | fs-then-native "^2.0.0" 1617 | jsdoc-75lb "^3.6.0" 1618 | object-to-spawn-args "^1.1.0" 1619 | temp-path "^1.0.0" 1620 | walk-back "^2.0.1" 1621 | 1622 | jsdoc-parse@^3.0.0: 1623 | version "3.0.0" 1624 | resolved "https://registry.yarnpkg.com/jsdoc-parse/-/jsdoc-parse-3.0.0.tgz#271531d88f19df2520b1632a7f6c989441a87fde" 1625 | integrity sha1-JxUx2I8Z3yUgsWMqf2yYlEGof94= 1626 | dependencies: 1627 | array-back "^1.0.4" 1628 | lodash.omit "^4.5.0" 1629 | lodash.pick "^4.4.0" 1630 | reduce-extract "^1.0.0" 1631 | sort-array "^1.1.1" 1632 | test-value "^2.1.0" 1633 | 1634 | jsdoc-to-markdown@^3.0.0: 1635 | version "3.0.0" 1636 | resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-3.0.0.tgz#cc8a94f1f412ac1da4bac1657475b0975ee8161a" 1637 | integrity sha1-zIqU8fQSrB2kusFldHWwl17oFho= 1638 | dependencies: 1639 | array-back "^1.0.4" 1640 | command-line-tool "^0.7.0" 1641 | config-master "^3.0.0" 1642 | dmd "^3.0.0" 1643 | jsdoc-api "^3.0.0" 1644 | jsdoc-parse "^3.0.0" 1645 | jsdoc2md-stats "^2.0.0" 1646 | walk-back "^2.0.1" 1647 | 1648 | jsdoc2md-stats@^2.0.0: 1649 | version "2.0.1" 1650 | resolved "https://registry.yarnpkg.com/jsdoc2md-stats/-/jsdoc2md-stats-2.0.1.tgz#bd8343734cfe69ea8050a17931251293f0d9047b" 1651 | integrity sha1-vYNDc0z+aeqAUKF5MSUSk/DZBHs= 1652 | dependencies: 1653 | app-usage-stats "^0.5.0" 1654 | 1655 | jsesc@^1.3.0: 1656 | version "1.3.0" 1657 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1658 | integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= 1659 | 1660 | jsesc@~0.5.0: 1661 | version "0.5.0" 1662 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1663 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1664 | 1665 | json-schema@0.2.3: 1666 | version "0.2.3" 1667 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1668 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1669 | 1670 | json-stable-stringify@^1.0.1: 1671 | version "1.0.1" 1672 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1673 | integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= 1674 | dependencies: 1675 | jsonify "~0.0.0" 1676 | 1677 | json-stringify-safe@~5.0.1: 1678 | version "5.0.1" 1679 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1680 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1681 | 1682 | json5@^0.5.0: 1683 | version "0.5.1" 1684 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1685 | integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= 1686 | 1687 | jsonify@~0.0.0: 1688 | version "0.0.0" 1689 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1690 | integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 1691 | 1692 | jsprim@^1.2.2: 1693 | version "1.4.0" 1694 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 1695 | integrity sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg= 1696 | dependencies: 1697 | assert-plus "1.0.0" 1698 | extsprintf "1.0.2" 1699 | json-schema "0.2.3" 1700 | verror "1.3.6" 1701 | 1702 | kind-of@^3.0.2: 1703 | version "3.2.0" 1704 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" 1705 | integrity sha1-tYq+TVwEStM3JqjBUltIz4kb/wc= 1706 | dependencies: 1707 | is-buffer "^1.1.5" 1708 | 1709 | klaw@~1.3.0: 1710 | version "1.3.1" 1711 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 1712 | integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= 1713 | optionalDependencies: 1714 | graceful-fs "^4.1.9" 1715 | 1716 | lodash.omit@^4.5.0: 1717 | version "4.5.0" 1718 | resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" 1719 | integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= 1720 | 1721 | lodash.padend@^4.6.1: 1722 | version "4.6.1" 1723 | resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" 1724 | integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= 1725 | 1726 | lodash.pick@^4.4.0: 1727 | version "4.4.0" 1728 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 1729 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 1730 | 1731 | lodash@^4.2.0: 1732 | version "4.17.4" 1733 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1734 | integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= 1735 | 1736 | loose-envify@^1.0.0: 1737 | version "1.3.1" 1738 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1739 | integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg= 1740 | dependencies: 1741 | js-tokens "^3.0.0" 1742 | 1743 | marked@^0.3.6, marked@~0.3.6: 1744 | version "0.3.6" 1745 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" 1746 | integrity sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc= 1747 | 1748 | micromatch@^2.1.5: 1749 | version "2.3.11" 1750 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1751 | integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= 1752 | dependencies: 1753 | arr-diff "^2.0.0" 1754 | array-unique "^0.2.1" 1755 | braces "^1.8.2" 1756 | expand-brackets "^0.1.4" 1757 | extglob "^0.3.1" 1758 | filename-regex "^2.0.0" 1759 | is-extglob "^1.0.0" 1760 | is-glob "^2.0.1" 1761 | kind-of "^3.0.2" 1762 | normalize-path "^2.0.1" 1763 | object.omit "^2.0.0" 1764 | parse-glob "^3.0.4" 1765 | regex-cache "^0.4.2" 1766 | 1767 | mime-db@~1.27.0: 1768 | version "1.27.0" 1769 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 1770 | integrity sha1-gg9XIpa70g7CXtVeW13oaeVDbrE= 1771 | 1772 | mime-types@^2.1.12, mime-types@~2.1.7: 1773 | version "2.1.15" 1774 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 1775 | integrity sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0= 1776 | dependencies: 1777 | mime-db "~1.27.0" 1778 | 1779 | minimatch@^3.0.0, minimatch@^3.0.2: 1780 | version "3.0.3" 1781 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1782 | integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= 1783 | dependencies: 1784 | brace-expansion "^1.0.0" 1785 | 1786 | minimist@0.0.8, minimist@~0.0.1: 1787 | version "0.0.8" 1788 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1789 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1790 | 1791 | minimist@^1.2.0: 1792 | version "1.2.0" 1793 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1794 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1795 | 1796 | "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: 1797 | version "0.5.1" 1798 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1799 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1800 | dependencies: 1801 | minimist "0.0.8" 1802 | 1803 | ms@0.7.3: 1804 | version "0.7.3" 1805 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" 1806 | integrity sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8= 1807 | 1808 | nan@^2.3.0: 1809 | version "2.6.2" 1810 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 1811 | integrity sha1-5P805slf37WuzAjeZZb0NgWn20U= 1812 | 1813 | node-pre-gyp@^0.6.29: 1814 | version "0.6.34" 1815 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" 1816 | integrity sha1-lK0ceYoR1/xnOBtQ1H+MwY2Xmfc= 1817 | dependencies: 1818 | mkdirp "^0.5.1" 1819 | nopt "^4.0.1" 1820 | npmlog "^4.0.2" 1821 | rc "^1.1.7" 1822 | request "^2.81.0" 1823 | rimraf "^2.6.1" 1824 | semver "^5.3.0" 1825 | tar "^2.2.1" 1826 | tar-pack "^3.4.0" 1827 | 1828 | nopt@^4.0.1: 1829 | version "4.0.1" 1830 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1831 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= 1832 | dependencies: 1833 | abbrev "1" 1834 | osenv "^0.1.4" 1835 | 1836 | normalize-path@^2.0.1: 1837 | version "2.1.1" 1838 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1839 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 1840 | dependencies: 1841 | remove-trailing-separator "^1.0.1" 1842 | 1843 | npmlog@^4.0.2: 1844 | version "4.0.2" 1845 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" 1846 | integrity sha1-0DlQ4OeM4VJ7om0qdZLpNIrD518= 1847 | dependencies: 1848 | are-we-there-yet "~1.1.2" 1849 | console-control-strings "~1.1.0" 1850 | gauge "~2.7.1" 1851 | set-blocking "~2.0.0" 1852 | 1853 | number-is-nan@^1.0.0: 1854 | version "1.0.1" 1855 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1856 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1857 | 1858 | oauth-sign@~0.8.1: 1859 | version "0.8.2" 1860 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1861 | integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= 1862 | 1863 | object-assign@^4.1.0: 1864 | version "4.1.1" 1865 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1866 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1867 | 1868 | object-get@^2.1.0: 1869 | version "2.1.0" 1870 | resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.0.tgz#722bbdb60039efa47cad3c6dc2ce51a85c02c5ae" 1871 | integrity sha1-ciu9tgA576R8rTxtws5RqFwCxa4= 1872 | 1873 | object-to-spawn-args@^1.1.0: 1874 | version "1.1.0" 1875 | resolved "https://registry.yarnpkg.com/object-to-spawn-args/-/object-to-spawn-args-1.1.0.tgz#031a200e37db2c3dfc9b98074a0d69a5be253c1c" 1876 | integrity sha1-AxogDjfbLD38m5gHSg1ppb4lPBw= 1877 | 1878 | object.omit@^2.0.0: 1879 | version "2.0.1" 1880 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1881 | integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= 1882 | dependencies: 1883 | for-own "^0.1.4" 1884 | is-extendable "^0.1.1" 1885 | 1886 | once@^1.3.0, once@^1.3.3: 1887 | version "1.4.0" 1888 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1889 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1890 | dependencies: 1891 | wrappy "1" 1892 | 1893 | optimist@^0.6.1: 1894 | version "0.6.1" 1895 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1896 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 1897 | dependencies: 1898 | minimist "~0.0.1" 1899 | wordwrap "~0.0.2" 1900 | 1901 | optimist@~0.3.5: 1902 | version "0.3.7" 1903 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" 1904 | integrity sha1-yQlBrVnkJzMokjB00s8ufLxuwNk= 1905 | dependencies: 1906 | wordwrap "~0.0.2" 1907 | 1908 | os-homedir@^1.0.0: 1909 | version "1.0.2" 1910 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1911 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1912 | 1913 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1914 | version "1.0.2" 1915 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1916 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1917 | 1918 | osenv@^0.1.4: 1919 | version "0.1.4" 1920 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1921 | integrity sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ= 1922 | dependencies: 1923 | os-homedir "^1.0.0" 1924 | os-tmpdir "^1.0.0" 1925 | 1926 | output-file-sync@^1.1.0: 1927 | version "1.1.2" 1928 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1929 | integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= 1930 | dependencies: 1931 | graceful-fs "^4.1.4" 1932 | mkdirp "^0.5.1" 1933 | object-assign "^4.1.0" 1934 | 1935 | parse-glob@^3.0.4: 1936 | version "3.0.4" 1937 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1938 | integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= 1939 | dependencies: 1940 | glob-base "^0.3.0" 1941 | is-dotfile "^1.0.0" 1942 | is-extglob "^1.0.0" 1943 | is-glob "^2.0.0" 1944 | 1945 | path-exists@^3.0.0: 1946 | version "3.0.0" 1947 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1948 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1949 | 1950 | path-is-absolute@^1.0.0: 1951 | version "1.0.1" 1952 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1953 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1954 | 1955 | path-parse@^1.0.5: 1956 | version "1.0.5" 1957 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1958 | integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= 1959 | 1960 | performance-now@^0.2.0: 1961 | version "0.2.0" 1962 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1963 | integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= 1964 | 1965 | preserve@^0.2.0: 1966 | version "0.2.0" 1967 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1968 | integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= 1969 | 1970 | private@^0.1.6: 1971 | version "0.1.7" 1972 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 1973 | integrity sha1-aM5eih7woju1cMwoU3tTMqumPvE= 1974 | 1975 | process-nextick-args@~1.0.6: 1976 | version "1.0.7" 1977 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1978 | integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= 1979 | 1980 | punycode@^1.4.1: 1981 | version "1.4.1" 1982 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1983 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 1984 | 1985 | qs@~6.4.0: 1986 | version "6.4.0" 1987 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1988 | integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= 1989 | 1990 | randomatic@^1.1.3: 1991 | version "1.1.6" 1992 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 1993 | integrity sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs= 1994 | dependencies: 1995 | is-number "^2.0.2" 1996 | kind-of "^3.0.2" 1997 | 1998 | rc@^1.1.7: 1999 | version "1.2.1" 2000 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 2001 | integrity sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU= 2002 | dependencies: 2003 | deep-extend "~0.4.0" 2004 | ini "~1.3.0" 2005 | minimist "^1.2.0" 2006 | strip-json-comments "~2.0.1" 2007 | 2008 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: 2009 | version "2.2.9" 2010 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 2011 | integrity sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g= 2012 | dependencies: 2013 | buffer-shims "~1.0.0" 2014 | core-util-is "~1.0.0" 2015 | inherits "~2.0.1" 2016 | isarray "~1.0.0" 2017 | process-nextick-args "~1.0.6" 2018 | string_decoder "~1.0.0" 2019 | util-deprecate "~1.0.1" 2020 | 2021 | readdirp@^2.0.0: 2022 | version "2.1.0" 2023 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 2024 | integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= 2025 | dependencies: 2026 | graceful-fs "^4.1.2" 2027 | minimatch "^3.0.2" 2028 | readable-stream "^2.0.2" 2029 | set-immediate-shim "^1.0.1" 2030 | 2031 | reduce-extract@^1.0.0: 2032 | version "1.0.0" 2033 | resolved "https://registry.yarnpkg.com/reduce-extract/-/reduce-extract-1.0.0.tgz#67f2385beda65061b5f5f4312662e8b080ca1525" 2034 | integrity sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU= 2035 | dependencies: 2036 | test-value "^1.0.1" 2037 | 2038 | reduce-flatten@^1.0.1: 2039 | version "1.0.1" 2040 | resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" 2041 | integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc= 2042 | 2043 | reduce-unique@^1.0.0: 2044 | version "1.0.0" 2045 | resolved "https://registry.yarnpkg.com/reduce-unique/-/reduce-unique-1.0.0.tgz#7e586bcf87a4e32b6d7abd8277fad6cdec9f4803" 2046 | integrity sha1-flhrz4ek4ytter2Cd/rWzeyfSAM= 2047 | 2048 | reduce-without@^1.0.1: 2049 | version "1.0.1" 2050 | resolved "https://registry.yarnpkg.com/reduce-without/-/reduce-without-1.0.1.tgz#68ad0ead11855c9a37d4e8256c15bbf87972fc8c" 2051 | integrity sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw= 2052 | dependencies: 2053 | test-value "^2.0.0" 2054 | 2055 | regenerate@^1.2.1: 2056 | version "1.3.2" 2057 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" 2058 | integrity sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA= 2059 | 2060 | regenerator-runtime@^0.10.0: 2061 | version "0.10.4" 2062 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.4.tgz#74cb6598d3ba2eb18694e968a40e2b3b4df9cf93" 2063 | integrity sha1-dMtlmNO6LrGGlOlopA4rO035z5M= 2064 | 2065 | regenerator-transform@0.9.11: 2066 | version "0.9.11" 2067 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" 2068 | integrity sha1-On0GdSDLe3F2dp61/4aGkb7+EoM= 2069 | dependencies: 2070 | babel-runtime "^6.18.0" 2071 | babel-types "^6.19.0" 2072 | private "^0.1.6" 2073 | 2074 | regex-cache@^0.4.2: 2075 | version "0.4.3" 2076 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 2077 | integrity sha1-mxpsNdTQ3871cRrmUejp09cRQUU= 2078 | dependencies: 2079 | is-equal-shallow "^0.1.3" 2080 | is-primitive "^2.0.0" 2081 | 2082 | regexpu-core@^2.0.0: 2083 | version "2.0.0" 2084 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 2085 | integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= 2086 | dependencies: 2087 | regenerate "^1.2.1" 2088 | regjsgen "^0.2.0" 2089 | regjsparser "^0.1.4" 2090 | 2091 | regjsgen@^0.2.0: 2092 | version "0.2.0" 2093 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 2094 | integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= 2095 | 2096 | regjsparser@^0.1.4: 2097 | version "0.1.5" 2098 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 2099 | integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= 2100 | dependencies: 2101 | jsesc "~0.5.0" 2102 | 2103 | remove-trailing-separator@^1.0.1: 2104 | version "1.0.1" 2105 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 2106 | integrity sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ= 2107 | 2108 | repeat-element@^1.1.2: 2109 | version "1.1.2" 2110 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2111 | integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= 2112 | 2113 | repeat-string@^1.5.2: 2114 | version "1.6.1" 2115 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2116 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 2117 | 2118 | repeating@^2.0.0: 2119 | version "2.0.1" 2120 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2121 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 2122 | dependencies: 2123 | is-finite "^1.0.0" 2124 | 2125 | req-then@^0.5.1: 2126 | version "0.5.1" 2127 | resolved "https://registry.yarnpkg.com/req-then/-/req-then-0.5.1.tgz#31c6e0b56f4ddd2acd6de0ba1bcea77b6079dfdf" 2128 | integrity sha1-McbgtW9N3SrNbeC6G86ne2B5398= 2129 | dependencies: 2130 | array-back "^1.0.3" 2131 | defer-promise "^1.0.0" 2132 | feature-detect-es6 "^1.3.1" 2133 | lodash.pick "^4.4.0" 2134 | typical "^2.6.0" 2135 | 2136 | request@^2.81.0: 2137 | version "2.81.0" 2138 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 2139 | integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= 2140 | dependencies: 2141 | aws-sign2 "~0.6.0" 2142 | aws4 "^1.2.1" 2143 | caseless "~0.12.0" 2144 | combined-stream "~1.0.5" 2145 | extend "~3.0.0" 2146 | forever-agent "~0.6.1" 2147 | form-data "~2.1.1" 2148 | har-validator "~4.2.1" 2149 | hawk "~3.1.3" 2150 | http-signature "~1.1.0" 2151 | is-typedarray "~1.0.0" 2152 | isstream "~0.1.2" 2153 | json-stringify-safe "~5.0.1" 2154 | mime-types "~2.1.7" 2155 | oauth-sign "~0.8.1" 2156 | performance-now "^0.2.0" 2157 | qs "~6.4.0" 2158 | safe-buffer "^5.0.1" 2159 | stringstream "~0.0.4" 2160 | tough-cookie "~2.3.0" 2161 | tunnel-agent "^0.6.0" 2162 | uuid "^3.0.0" 2163 | 2164 | requizzle@~0.2.1: 2165 | version "0.2.1" 2166 | resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" 2167 | integrity sha1-aUPDUwxNmn5G8c3dUcFY/GcM294= 2168 | dependencies: 2169 | underscore "~1.6.0" 2170 | 2171 | resolve@^1.2.0: 2172 | version "1.3.3" 2173 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" 2174 | integrity sha1-ZVkHw0aahoDcLeOidaj91paR8OU= 2175 | dependencies: 2176 | path-parse "^1.0.5" 2177 | 2178 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: 2179 | version "2.6.1" 2180 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 2181 | integrity sha1-wjOOxkPfeht/5cVPqG9XQopV8z0= 2182 | dependencies: 2183 | glob "^7.0.5" 2184 | 2185 | safe-buffer@^5.0.1: 2186 | version "5.0.1" 2187 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 2188 | integrity sha1-0mPKVGls2KMGtcplUekt5XkY++c= 2189 | 2190 | semver@^5.3.0: 2191 | version "5.3.0" 2192 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 2193 | integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= 2194 | 2195 | set-blocking@~2.0.0: 2196 | version "2.0.0" 2197 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2198 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2199 | 2200 | set-immediate-shim@^1.0.1: 2201 | version "1.0.1" 2202 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2203 | integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= 2204 | 2205 | signal-exit@^3.0.0: 2206 | version "3.0.2" 2207 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2208 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 2209 | 2210 | slash@^1.0.0: 2211 | version "1.0.0" 2212 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 2213 | integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= 2214 | 2215 | sntp@1.x.x: 2216 | version "1.0.9" 2217 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2218 | integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= 2219 | dependencies: 2220 | hoek "2.x.x" 2221 | 2222 | sort-array@^1.1.1: 2223 | version "1.1.2" 2224 | resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-1.1.2.tgz#b88986053c0170a7f9de63f18a49ec79c24c3e64" 2225 | integrity sha1-uImGBTwBcKf53mPxiknsecJMPmQ= 2226 | dependencies: 2227 | array-back "^1.0.4" 2228 | object-get "^2.1.0" 2229 | typical "^2.6.0" 2230 | 2231 | source-map-support@^0.4.2: 2232 | version "0.4.14" 2233 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" 2234 | integrity sha1-nURjdyWYuGJxtPUj9sH04Cp9au8= 2235 | dependencies: 2236 | source-map "^0.5.6" 2237 | 2238 | source-map@^0.1.40, source-map@~0.1.7: 2239 | version "0.1.43" 2240 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 2241 | integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= 2242 | dependencies: 2243 | amdefine ">=0.0.4" 2244 | 2245 | source-map@^0.5.0, source-map@^0.5.6: 2246 | version "0.5.6" 2247 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2248 | integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= 2249 | 2250 | sshpk@^1.7.0: 2251 | version "1.13.0" 2252 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 2253 | integrity sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw= 2254 | dependencies: 2255 | asn1 "~0.2.3" 2256 | assert-plus "^1.0.0" 2257 | dashdash "^1.12.0" 2258 | getpass "^0.1.1" 2259 | optionalDependencies: 2260 | bcrypt-pbkdf "^1.0.0" 2261 | ecc-jsbn "~0.1.1" 2262 | jodid25519 "^1.0.0" 2263 | jsbn "~0.1.0" 2264 | tweetnacl "~0.14.0" 2265 | 2266 | stream-connect@^1.0.2: 2267 | version "1.0.2" 2268 | resolved "https://registry.yarnpkg.com/stream-connect/-/stream-connect-1.0.2.tgz#18bc81f2edb35b8b5d9a8009200a985314428a97" 2269 | integrity sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc= 2270 | dependencies: 2271 | array-back "^1.0.2" 2272 | 2273 | stream-via@^1.0.3: 2274 | version "1.0.3" 2275 | resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-1.0.3.tgz#cebd32a5a59d74b3b68e3404942e867184ad4ac9" 2276 | integrity sha1-zr0ypaWddLO2jjQElC6GcYStSsk= 2277 | 2278 | string-width@^1.0.1: 2279 | version "1.0.2" 2280 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2281 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2282 | dependencies: 2283 | code-point-at "^1.0.0" 2284 | is-fullwidth-code-point "^1.0.0" 2285 | strip-ansi "^3.0.0" 2286 | 2287 | string_decoder@~1.0.0: 2288 | version "1.0.0" 2289 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 2290 | integrity sha1-8G9BFXtmTYYGn4S9vcmw2KsoFmc= 2291 | dependencies: 2292 | buffer-shims "~1.0.0" 2293 | 2294 | stringstream@~0.0.4: 2295 | version "0.0.5" 2296 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2297 | integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg= 2298 | 2299 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2300 | version "3.0.1" 2301 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2302 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2303 | dependencies: 2304 | ansi-regex "^2.0.0" 2305 | 2306 | strip-json-comments@~2.0.1: 2307 | version "2.0.1" 2308 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2309 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2310 | 2311 | supports-color@^2.0.0: 2312 | version "2.0.0" 2313 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2314 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 2315 | 2316 | table-layout@^0.4.0: 2317 | version "0.4.0" 2318 | resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.0.tgz#c70ff0455d9add63b91f7c15a77926295c0e0e7d" 2319 | integrity sha1-xw/wRV2a3WO5H3wVp3kmKVwODn0= 2320 | dependencies: 2321 | array-back "^1.0.4" 2322 | deep-extend "~0.4.1" 2323 | lodash.padend "^4.6.1" 2324 | typical "^2.6.0" 2325 | wordwrapjs "^2.0.0" 2326 | 2327 | taffydb@2.6.2: 2328 | version "2.6.2" 2329 | resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" 2330 | integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg= 2331 | 2332 | tar-pack@^3.4.0: 2333 | version "3.4.0" 2334 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 2335 | integrity sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ= 2336 | dependencies: 2337 | debug "^2.2.0" 2338 | fstream "^1.0.10" 2339 | fstream-ignore "^1.0.5" 2340 | once "^1.3.3" 2341 | readable-stream "^2.1.4" 2342 | rimraf "^2.5.1" 2343 | tar "^2.2.1" 2344 | uid-number "^0.0.6" 2345 | 2346 | tar@^2.2.1: 2347 | version "2.2.1" 2348 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 2349 | integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= 2350 | dependencies: 2351 | block-stream "*" 2352 | fstream "^1.0.2" 2353 | inherits "2" 2354 | 2355 | temp-path@^1.0.0: 2356 | version "1.0.0" 2357 | resolved "https://registry.yarnpkg.com/temp-path/-/temp-path-1.0.0.tgz#24b1543973ab442896d9ad367dd9cbdbfafe918b" 2358 | integrity sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs= 2359 | 2360 | test-value@^1.0.1: 2361 | version "1.1.0" 2362 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-1.1.0.tgz#a09136f72ec043d27c893707c2b159bfad7de93f" 2363 | integrity sha1-oJE29y7AQ9J8iTcHwrFZv6196T8= 2364 | dependencies: 2365 | array-back "^1.0.2" 2366 | typical "^2.4.2" 2367 | 2368 | test-value@^2.0.0, test-value@^2.1.0: 2369 | version "2.1.0" 2370 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" 2371 | integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= 2372 | dependencies: 2373 | array-back "^1.0.3" 2374 | typical "^2.6.0" 2375 | 2376 | to-fast-properties@^1.0.1: 2377 | version "1.0.2" 2378 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 2379 | integrity sha1-8/XAw7pymafvmUJ+RGMyV63kMyA= 2380 | 2381 | tough-cookie@~2.3.0: 2382 | version "2.3.2" 2383 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 2384 | integrity sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo= 2385 | dependencies: 2386 | punycode "^1.4.1" 2387 | 2388 | trim-right@^1.0.1: 2389 | version "1.0.1" 2390 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2391 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 2392 | 2393 | tunnel-agent@^0.6.0: 2394 | version "0.6.0" 2395 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2396 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2397 | dependencies: 2398 | safe-buffer "^5.0.1" 2399 | 2400 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2401 | version "0.14.5" 2402 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2403 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 2404 | 2405 | typical@^2.4.2, typical@^2.6.0: 2406 | version "2.6.0" 2407 | resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.0.tgz#89d51554ab139848a65bcc2c8772f8fb450c40ed" 2408 | integrity sha1-idUVVKsTmEimW8wsh3L4+0UMQO0= 2409 | 2410 | uglify-js@~2.3: 2411 | version "2.3.6" 2412 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" 2413 | integrity sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo= 2414 | dependencies: 2415 | async "~0.2.6" 2416 | optimist "~0.3.5" 2417 | source-map "~0.1.7" 2418 | 2419 | uid-number@^0.0.6: 2420 | version "0.0.6" 2421 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2422 | integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= 2423 | 2424 | underscore-contrib@~0.3.0: 2425 | version "0.3.0" 2426 | resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" 2427 | integrity sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc= 2428 | dependencies: 2429 | underscore "1.6.0" 2430 | 2431 | underscore@1.6.0, underscore@~1.6.0: 2432 | version "1.6.0" 2433 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" 2434 | integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= 2435 | 2436 | underscore@~1.8.3: 2437 | version "1.8.3" 2438 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" 2439 | integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= 2440 | 2441 | usage-stats@^0.9.0: 2442 | version "0.9.0" 2443 | resolved "https://registry.yarnpkg.com/usage-stats/-/usage-stats-0.9.0.tgz#a763f6116859f769925e75b5f92e4e3b47a374fd" 2444 | integrity sha1-p2P2EWhZ92mSXnW1+S5OO0ejdP0= 2445 | dependencies: 2446 | array-back "^1.0.4" 2447 | home-path "^1.0.3" 2448 | mkdirp "^0.5.1" 2449 | req-then "^0.5.1" 2450 | typical "^2.6.0" 2451 | uuid "^3.0.1" 2452 | 2453 | user-home@^1.1.1: 2454 | version "1.1.1" 2455 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 2456 | integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= 2457 | 2458 | util-deprecate@~1.0.1: 2459 | version "1.0.2" 2460 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2461 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2462 | 2463 | uuid@^3.0.0, uuid@^3.0.1: 2464 | version "3.0.1" 2465 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 2466 | integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE= 2467 | 2468 | v8flags@^2.0.10: 2469 | version "2.1.1" 2470 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 2471 | integrity sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ= 2472 | dependencies: 2473 | user-home "^1.1.1" 2474 | 2475 | verror@1.3.6: 2476 | version "1.3.6" 2477 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 2478 | integrity sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw= 2479 | dependencies: 2480 | extsprintf "1.0.2" 2481 | 2482 | walk-back@^2.0.1: 2483 | version "2.0.1" 2484 | resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4" 2485 | integrity sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ= 2486 | 2487 | walk-back@^3.0.0: 2488 | version "3.0.0" 2489 | resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-3.0.0.tgz#2358787a35da91032dad5e92f80b12370d8795c5" 2490 | integrity sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU= 2491 | 2492 | wide-align@^1.1.0: 2493 | version "1.1.0" 2494 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" 2495 | integrity sha1-QO3egCpx/qHwcNo+YtzaLnrdlq0= 2496 | dependencies: 2497 | string-width "^1.0.1" 2498 | 2499 | wordwrap@~0.0.2: 2500 | version "0.0.3" 2501 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2502 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 2503 | 2504 | wordwrapjs@^2.0.0: 2505 | version "2.0.0" 2506 | resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-2.0.0.tgz#ab55f695e6118da93858fdd70c053d1c5e01ac20" 2507 | integrity sha1-q1X2leYRjak4WP3XDAU9HF4BrCA= 2508 | dependencies: 2509 | array-back "^1.0.3" 2510 | feature-detect-es6 "^1.3.1" 2511 | reduce-flatten "^1.0.1" 2512 | typical "^2.6.0" 2513 | 2514 | wrappy@1: 2515 | version "1.0.2" 2516 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2517 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2518 | --------------------------------------------------------------------------------