├── .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 |
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 | {'Live update'}
103 |
104 |
105 |
106 |
107 |
108 |
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 |
126 | {key}
127 |
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 |
--------------------------------------------------------------------------------